C#が第一級関数を持たないとされている理由
解決済み
その記述は2010年ごろの英語版Wikipediaが翻訳されたものですが、現在の英語版ではC#2.0は第一級関数を持つと記載されています。 – pgrho
なぜC#は第一級関数を持たないとされているのでしょうか?
また、今後どのような機能が追加されたら第一級関数を持っていると言えるようになるのでしょうか?
Wikipedia: 第一級オブジェクトとWikipedia: 第一級関数は読みましたが、
CやC++、C#、Pascalなどのプログラミング言語は関数ポインタをサポートしており、データ構造に含めたり他の関数に引数として渡したりすることができる。しかし、それらの関数は一般にリフレクションなしではプログラムの実行時に動的に生成することができないため、第一級関数をサポートしているとは見なされていない。
最も第一級関数に近いのは、C#のJITコンパイラによって動的に生成された関数である。これは機械語命令の配列としてメモリにコンパイルされ、関数ポインタへキャストされる。しかしながら、このテクニックは下層管理のフレームワークアーキテクチャに依存しており移植可能でない。もしWindowsを使用しているならば、C#はタイプセーフな関数ポインタのデリゲート型を持っている。また、C#バージョン3ではラムダ式のサポートが追加された。レキサとパーサはコンパイル時に動作し、コンパイラのラムダコード生成部分は実行時に動作する。
についてはよく分かっていない(式木のコンパイルとか話でしょうか?)ので、このままでの回答はご遠慮くださいm(_ _)m