DLang 2.095.0バージョンがリリースされました。このバージョンは、主にObjective-Cのサポートを強化し、Objective-Cプロトコルを宣言する機能を追加し、コンパイラ、ライブラリ、およびツール全体を改善します。61人の貢献者からの合計27の主要な変更と78の修正が含まれています。いくつかのハイライトは次のとおりです。
- C ++ ヘッダーの 生成
しばらくの間、DMDには、C ++からのDライブラリの呼び出しを容易にするために-CHコマンドラインオプションを介してDソースコードからC ++ヘッダーファイルを生成するための実験的なサポートが含まれていました。たとえば、次のDソースファイルがあるとします。
CPP-例d
extern(C ++): struct A { int x; } void printA(ref A a){ import std.stdio:writeln; writeln(a); }
そして、次のコマンドライン:
dmd -HC cpp-ex.d
コンパイラは以下をstdoutに出力します(-HCfはファイル名を指定し、-HCdはディレクトリを指定します)。
//自動デジタル火星Dコンパイラによって生成された 後の#pragma の#include <assert.h> の#include <STDDEF.H> の#include <stdint.h> の#include <math.h>の #ifdefのCUSTOM_D_ARRAY_TYPE の#define _d_dynamicArray CUSTOM_D_ARRAY_TYPE の#else / // D []配列 テンプレートを 表します<typenameT> struct _d_dynamicArray { size_t length; T * ptr; _d_dynamicArray():length(0)、ptr(NULL){} _d_dynamicArray(size_t length_in、T * ptr_in) :length(length_in)、ptr(ptr_in){} T&operator [](const size_t idx){ assert(idx <長さ); ptr [idx]を返します。 } const T&operator [](const size_t idx)const { assert(idx <length); ptr [idx]を返します。 } }; #endif struct A; struct A { int32_t x; A(): x() { } }; extern void printA(A&a);
このバージョンでは、この機能に多くの修正と改善が加えられています。Cヘッダーの生成は、-H、-Hf、および-Hdでもサポートされていることに注意してください。
- デフォルトのC ++標準の変更
現在、C ++ 11標準がデフォルトで使用されています。さらに、コンパイラは-extern-std = c ++ 20を受け入れるようになりました。実際には、現時点での唯一の影響は、コンパイル時の値__traits(getTargetInfo、 "cppStd")を変更することですが、将来、新しいタイプが追加される可能性があります。
- 改善されたObjective-Cサポート
このバージョンは、Objective-Cプロトコルをサポートすることにより、Objective-Cの互換性を強化します。これは、extern(Objective-C)のコンテキストでインターフェイスを再利用することによって実現されます。さらに、@ optional属性と@selector属性はこのタスクを実行するのに役立ちます。
- コンパイル時のフィードバックの改善
詳細については、変更ログを確認してください:https://dlang.org/changelog/2.095.0.html