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の言語サポートを備えた新しい拡張機能もリリースされました。

Source: https://habr.com/ru/post/J336392/


All Articles