病気、ネメルル

画像 Nemerleは、3つのプログラミングパラダイムをサポートする.NET言語です。ほとんどのプログラマーは、OOPをパラダイム、機能的パラダイム(代数的データ型、パターンマッチング)、メタプログラミング(AOP、準引用、a-laマクロによるネマール自体の構文拡張)と見なしています。 lisp)。 これらはすべて、厳密な静的型付けのトラック上に置かれ、強力な型推論システムで味付けされています。





単一の全体では、これは次のように結合されます。プログラム構造はクラスによって定義されます。つまり、コードは古き良きC#のように見えますが、FPはメソッド内の生命に責任があります。 メタプログラミングは気づきにくいです-クラスの属性または実際のマクロである「標準」whileコンストラクトとして偽装できます。マクロはコンパイル時にテール再帰に展開され、「純粋な」ネマールコンパイラによってILのループに変換されます。 。 if、when、unless、while、forなど、nemerleのほとんどすべての制御コマンドがマクロとして実装されているため、クリーンと言います。 したがって、メタプログラミングについては何も知らずに、コードをnemerleで記述できますが、コード全体を使用し、意識する必要はありません。 簡単に言えば、彼について何も聞いていないのであれば、これはnemerleでのコーディングを妨げるものではありません。 これはFPにも当てはまります-副作用のある関数を使用することを誰も気にしません。 しかし、C#であり、メタ、FPにハンマーであるかのようにコードを記述し始めたとしても、驚くかもしれません-nemerleはタプル、デフォルトパラメータをサポートし、デリゲートを機能型に置き換えます、つまり、同じシグネチャとのデリゲート互換性の問題を解決しますFunc <int、int>は、たとえば、int-> intのように署名を書き込むだけです。



これはRSDNの記事 、ブログ、およびドキュメントから学びましたが、私は常に自分自身をじっと見つめようとしたかったのです。 残念ながら、これまでさまざまな理由でこれをしませんでした-便利なプログラミング言語がどうあるべきかについて私の見解を共有していない人々と仕事をするか、新しい言語で大規模なプロジェクトを開始することを恐れました。 しかし正直なところ、それはただの怠lazでした。 数日前、インフルエンザが私を襲い、私は夢を実現することに決めました-ネメルに書くこと。 実験ウサギは、私の数年前からの私の趣味であった私の長期にわたるシャーププロジェクトでした。 たぶんいつかハブでそれについて書きますが、これまでのところ詳細はありません。主な機能の1つは、式の分析と、これらの式を表すツリーの操作です。 この部分はテストで簡単にカバーできたので、開発中にTDDを使い続けました。その結果、71個のファイルに対して73個のテストがありました。 このような完全なテストカバレッジにより自信が得られ、言語の変更などのリファクタリングを決定しました。 3日間、nemerleのコードを完全に書き直しました。これにより、コードの理解が深まりました。



言語は私にとって非常に便利なようでした。なぜなら、コードをネメルスタイルで書き直したくない場合、脳をオフにし、コードをシャープからネメルに機械的に転送しましたが、FPスタイルを使用するのが合理的だと思ったので、これを使用して、最大38ファイルのプロジェクトサイズ。 この結果を達成できたのは、FPをその場所、つまり式の分析とツリーでの作業に使用したためです。関数型言語でツリーを代数データ型として表現するのが自然であり、作業が大幅に簡素化されます。 nemerleと知り合った後、私はお気に入りのユニバーサルプログラミング言語のリストを確認しました。現在、nemerleは静的な型付けとhotcl(動的なチームを表す)の代表として最初の地位を占めています。



この記事では、テストがクールであることをもう一度思い出し、habrasocietyの注意をネメルに引き付けたいと思います。



以下は、nemerleとMS VS 2008の統合レベル、および言語の構文を反映した小さなコラージュです。



画像







All Articles