NemerleおよびMonoの式の計算。

週末に、数式の解析に関する3つの記事がハブに登場しました:式コンパイラ数式のパーサー、式 の値の計算、および簡潔さと表現力のためのプロローグコードがこれらの記事の例を破る1つのコメント



以下に、プラットフォームと言語の標準ツールを使用して同じ結果、つまり式の計算を実現する方法を示します。



PDC2008カンファレンスで、Anders Hejlsbergはプレゼンテーションを行い、C#言語の進化を追跡しました。 彼は既存のバージョンをレビューし、将来のバージョンをレビューしました:4番目のバージョンでは、開発者は動的言語の機能を使用して厳密な型システムを希釈でき、5番目のバージョンでは、コンパイラーはマネージコードに完全に書き換えられ、サービスとして使用できます(サービスとしてのコンパイラー) 。



このイデオロギー(サービスとしてのコンパイラー)を今すぐ試してみたいプログラマーにとって、それができるのは朗報です。 実際、nemerleコンパイラはnemerleで記述されており、単純なライブラリとして使用できます。 また、この場合、その操作中に、反対の操作が必要でない限り、ディスク上にファイルが作成されないことに注意してください。 以下は、コンパイラをライブラリとして使用し、式の解析/評価の問題を効果的に解決するコードの例です=)



using System;



using System. Console ;

using Nemerle.Evaluation. Evaluator ;



module Program

{

Main() : void

{

def function = EvaluateExpression( "x => x + 1.0" ) :> double -> double ;

WriteLine(function(2.0));

}

}








C#を所有するプログラマーはこのコードを理解していると思いますが、モジュールは静的クラスの同義語であり、double-> doubleは関数型であり、Func <double、double>の類似体であり、System.Consoleを使用するとSystem.Consoleがこのように展開されることに注意してくださいその静的メソッドはグローバル関数/プロシージャに「変わる」、つまり、WriteLine(関数(2.0))の呼び出しは、実際にはConsole.WriteLine(関数(2.0))の呼び出しです。



未来を味わうもう1つの機会は、モノラルプラットフォームです。 私は長い間バージョン2.2のリリースを待っていて、誰もまだそれについてハブで書いていないことに驚いています。 私の期待は、Miguel De Icazaが9月に彼のブログに投稿したメモに基づいていました。そこでは、サービスイデオロギーとしてコンパイラーに基づいたREPLが、モノの次のバージョンに追加されることを発表しました(現在は既に最新です)。 以下は、Nemerleコードに類似した、モノのC#コードです。



using System;

using Mono.CSharp;



public class Program

{

public static void Main(string[] args)

{

var function =

Evaluator .Evaluate ( "new System.Converter<double,double>(x=>x+1.0);" )

as Converter < double , double >;

Console .WriteLine(function(2.0));

}

}








PS

また、NemerleとMonoはどちらもオープンソースプロジェクトです。 このノートを作成するときにこの機能を使用しました。つまり、NemerleとMonoでのサービスとしてのコンパイルの使用に関する包括的なドキュメントは見つかりませんでしたが、すぐにソースコードを調べて、興味のあるすべての情報を見つけることができました。



All Articles