2012-06-09 9 views
6

私は、拡張性と効率性(そして安全性、使いやすさなど)を結びつけたプログラミング言語を設計したかったのですが、最近Dを再発見しました.D 2.0が私が望む言語自分を作る。私が最も愛しているのは、メタプログラミングの可能性です。理論的には、Dのtraitsシステムはコンパイル時に以下の機能を有効にできますか?Dはこれらの機能に十分強力ですか?

  1. 実行時リフレクション:コンパイル時のリフレクション機能は、Java/.NETの実行時リフレクションシステムを構築するのに十分ですか?

  2. コード変換:メタプログラムを使用して、C#/ C++/etcを作成します。コンパイルするたびにあなたのDプログラムのバージョン(ドキュメントのコメントを伝えることができる場合はボーナスポイント)。

  3. 形質。私はmetaprogramming traitsがDに組み込まれているわけではなく、object-oriented traits for class compositionを意味します。 Dプログラムは構成する特徴の集合を示し、メタプログラムがそれらを構成する。

  4. ユニット推論エンジン:ユニットを推論するためのいくつかの表記を与えます。 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 
    

答えて

7

ランタイム反射を:コンパイル時の反射がするのに十分な機能ですJava/.NETの実行時反映システムを構築しますか?

はい。 __traitsを使用してコンパイル時に必要なすべての情報を取得し、実行時リフレクションに必要なランタイムデータ構造を生成することができます。

コード変換:メタプログラムを使用して、C#/ C++/etcを作成します。コンパイルするたびにあなたのDプログラムのバージョン(ドキュメントのコメントを伝えることができる場合はボーナスポイント)。

いいえ、どれだけ強力なDであっても簡単にはできません。一部の機能は単純に転送しません。たとえば、Dにはインラインアセンブラがありますが、これはC#への変換が100%不可能です。無言語で他のすべての言語に変換することはできません。

形質。私はDに組み込まれたメタプログラミングの特徴を意味するものではなく、クラス構成のためのオブジェクト指向の特性を意味します。 Dプログラムは構成する特徴の集合を示し、メタプログラムがそれらを構成する。

template mixinsを使用できますが、除外方法はありません。

ユニット推論エンジン:ユニットを推論するためのいくつかの表記を与えます。 Dメタプログラムが次のコードを調べ、正しい単位を推測し、最後の行にエラーメッセージを出すことができますか? (これはブーイングのために書かれているので、これは一般的にプログラム全体で可能です):

はい、これは簡単です。既にat least one implementationがあります。

+0

私は、コンバータがアセンブリ言語を含むすべての機能をサポートすべきであることを示唆するものではありません:)しかし、Dが変換を試みるのに十分に深くコードを検査できるという考えだけです。 – Qwertie

+0

Dの特定のサブセットに自分自身を限定することで、D、C++、C#で同時にプログラムを書くことができます。ラムダのテンプレート引数を実行時の引数に変換するか、ターゲット言語の制限に従って異なる引数を持つテンプレートを自動複製します。そのような変換ツールは、ある種のライブラリ、特にアルゴリズムやエキゾチックなデータ構造を書くのにDをもっと魅力的にするかもしれませんが、私はそれが必ずしもメタプログラミングで達成される必要はないと認識しています。 – Qwertie

+0

私は信じられるかもしれませんが、それはコンパイル時に言語翻訳を必要とします...それは巨大なプロジェクトになるでしょう... – DejanLekic

関連する問題