私は、拡張性と効率性(そして安全性、使いやすさなど)を結びつけたプログラミング言語を設計したかったのですが、最近Dを再発見しました.D 2.0が私が望む言語自分を作る。私が最も愛しているのは、メタプログラミングの可能性です。理論的には、Dのtraitsシステムはコンパイル時に以下の機能を有効にできますか?Dはこれらの機能に十分強力ですか?
実行時リフレクション:コンパイル時のリフレクション機能は、Java/.NETの実行時リフレクションシステムを構築するのに十分ですか?
コード変換:メタプログラムを使用して、C#/ C++/etcを作成します。コンパイルするたびにあなたのDプログラムのバージョン(ドキュメントのコメントを伝えることができる場合はボーナスポイント)。
形質。私はmetaprogramming traitsがDに組み込まれているわけではなく、object-oriented traits for class compositionを意味します。 Dプログラムは構成する特徴の集合を示し、メタプログラムがそれらを構成する。
ユニット推論エンジン:ユニットを推論するためのいくつかの表記を与えます。
unit(value)
は、Dメタプログラムが次のコードを調べ、正しい単位を推測し、最後の行にエラーメッセージを出すことができますか? (私はそう、私は、これは、一般的にプログラム全体の可能を保証することができますbooためにそのようなことを書きました):auto mass = kg(2.0); auto accel = 1.0; // units are strictly optional auto force = mass*accel; accel += metresPerSecondSquared(9.81); // units of 'force' and 'accel' are now known force += pounds(3.0); // unit mismatch detected
私は、コンバータがアセンブリ言語を含むすべての機能をサポートすべきであることを示唆するものではありません:)しかし、Dが変換を試みるのに十分に深くコードを検査できるという考えだけです。 – Qwertie
Dの特定のサブセットに自分自身を限定することで、D、C++、C#で同時にプログラムを書くことができます。ラムダのテンプレート引数を実行時の引数に変換するか、ターゲット言語の制限に従って異なる引数を持つテンプレートを自動複製します。そのような変換ツールは、ある種のライブラリ、特にアルゴリズムやエキゾチックなデータ構造を書くのにDをもっと魅力的にするかもしれませんが、私はそれが必ずしもメタプログラミングで達成される必要はないと認識しています。 – Qwertie
私は信じられるかもしれませんが、それはコンパイル時に言語翻訳を必要とします...それは巨大なプロジェクトになるでしょう... – DejanLekic