Cより良い

現在、システムプログラマは、使用する言語を実質的に選択できません。 良い意味で、すべてのオプションは純粋なCまたはRustに分類されますが、経験上、誰もがその構文を好まないことを示しています。



言語開発チームの努力のおかげで、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の言語サポートを備えた新しい拡張機能もリリースされました。



All Articles