言語開発チームの努力のおかげで、Dには純粋なCと互換性のあるサブセットがあり、Cプログラマーに馴染みのある構文を持つだけでなく、言語の機能を大幅に拡張しています。 新しいサブセットは「betterC」と呼ばれます。 このサブセットにより、Cライティングアプリケーションを新しいレベルに引き上げることができます。
以下は、betterCプログラマーが許可するものの短いリストです。
1.プリプロセッサの欠如
2.より速いコンパイル速度
3.完全なモジュール性
3.1さまざまなタイプのインポート(静的インポート、部分インポート、インポートの名前変更など)のサポート
4.コンパイル時に、コード生成、イントロスペクション、さまざまな条件のチェックが可能です
4.1
static if
および
static foreach
によるコンパイル時の分岐
4.2フォーム
version(linux) { ... }
ブロックの可能な操作
version(linux) { ... }
5.テンプレート
6. Rustからの
scope pointers (scope T*)
、
scope slices (scope T[])
、
scope references (scope ref T)
による借用チェックの類似
7.
const
および
immutable
アクセス修飾子のサポートmore
8.デフォルトでのTLS
9.契約プログラミングのサポート
10.スライスをサポートする便利な配列
11. SIMDによるアレイの作業の高速化
12.便利な単体テスト
13.組み込みプロファイラー
14.ユーザー定義の属性
15.組み込みの非常に便利なドキュメントジェネレーター
16.すべてのCプログラマ構文に精通している
17. Unicodeサポート
18. Cメモリーよりも安全
19.閉鎖
20.その他。
ここでいくつかの例を見てみましょう。
次のCコード:
#include <stdio.h> int main(int argc, char** argv) { printf("hello world\n"); return 0; }
次のようにコンパイルされます。
_main: push EAX mov [ESP],offset FLAT:_DATA call near ptr _printf xor EAX,EAX pop ECX ret
出力サイズ:23,068バイト。
今、betterCモードのDで同じこと:
import core.stdc.stdio; extern (C) int main(int argc, char** argv) { printf("hello world\n"); return 0; }
出力サイズ:23,068バイト。
悪くないですか? betterCモードを使用しない同じコードの重量は194Kbです。
より複雑な例:
Cバージョン:
#include <stdio.h> /* Eratosthenes Sieve prime number calculation. */ #define true 1 #define false 0 #define size 8190 #define sizepl 8191 char flags[sizepl]; int main() { int i, prime, k, count, iter; printf ("10 iterations\n"); for (iter = 1; iter <= 10; iter++) { count = 0; for (i = 0; i <= size; i++) flags[i] = true; for (i = 0; i <= size; i++) { if (flags[i]) { prime = i + i + 3; k = i + prime; while (k <= size) { flags[k] = false; k += prime; } count += 1; } } } printf ("\n%d primes", count); return 0; }
DのBetterCバージョン:
import core.stdc.stdio; extern (C): // C __gshared bool[8191] flags; int main() { int count; printf("10 iterations\n"); foreach (iter; 1 .. 11) { count = 0; flags[] = true; foreach (i; 0 .. flags.length) { if (flags[i]) { const prime = i + i + 3; // const - auto k = i + prime; while (k < flags.length) { flags[k] = false; k += prime; } count += 1; } } } printf("%d primes\n", count); return 0; }
はるかに読みやすく、短いことがわかりました。
空のプロジェクトを初期化するには、次を呼び出します:
dub init
dub.sdlでこのモードを有効にするには、次の行を追加します。
dflags "-betterC"
dub.jsonの場合、行は次のようになります。
"dflags" : ["betterC"],
コンパイラバージョンdmd 2.076以降が必要です。
初心者プログラマ向けに、 ロシア語の教科書の最初のバージョンを言語Dで公開しました。
Visual Codeの言語サポートを備えた新しい拡張機能もリリースされました。