LISPは今日でもまだ実践/使用されていますか、それともレガシー言語ですか
はい、そうですが、どこを見るべきかを知っておく必要があります。LISPを使用する人は大声で叫ぶ傾向はありませんが、過去20年間にLISPを使用して大きな影響を与えた少数の有名なスタートアップの例がいくつかあります。また、ヨーロッパの小規模企業でも非常に人気があります。
最も広く使用されている方言は何ですか?
これは有効な質問ですが、答えるのは簡単ではありません。また、答えるのに特に有用なものではないかもしれません:多くの実装は特定の焦点を持っているので、それが他の方法で使用される範囲に基づくのではなく、特定の問題に適合する場合に最適に選択されます。代わりに、オプションについて少し説明しますので、自分で決定してください。
LISPは言語のファミリであり、それらの各言語には方言と実装のファミリがあります。方言は、大きく2つの「LISP」と「Schemes」に分類されます。
LISP:比較的最近まで、Common LISPは王様でした。これは、異種のLISPをすべて統合する試みであり、不親切ではないが、LISPの「C ++」でした。つまり、それは巨大な言語でした。それにはすべてがありました。過去数年間で、Clojureが登場しました。Clojureは、Java仮想マシン上で実行されるLISPであり、関数型プログラミングの哲学に根ざしています。従来、他のLISPは厳密にマルチパラダイムでした。Clojureは、LISPとJVMの両方で最高と最低の両方を取得できるため、興味深いものです。そこのJavaベースの言語の冗長性の多くはまだだとそれは別のもののためにノブやボタンがたくさんあるので、彼らはかなり自由で構文で簡単にしてきたが、彼らはいくつかを持って本当にデータ型に関する興味深いアイデア、特に関数型プログラミングからのアイデアを適用するためにそれらが思いついたいくつかの実用的な方法。
スキーム:スキームは、LISPの厳密なサブセットです。SchemeはSteeleとSussmanによって考案され、初期の頃はMIT Computing 101 Lecture Courseで使用されていたことで有名でした。スキームは、「アルゴリズム言語スキーム(RnRS)の改訂^ nレポート」で定義されています。はい:彼らはそこに数学のジョークを持っています。Schemeは、他のLISPにはない標準化された言語です。これは実装間の移植性を大いに助けますが、それは特効薬ではありません。標準化の取り組みは保守的である傾向があり、実装の革新は、特にモジュールのようなものを中心に、バラバラになる傾向がありました。IETFのRFCプロセスに似たSRFI(実装のためのスキーム要求)のシリーズもあります。人々はそれを使用して、必要に応じて小さなものを標準化します。
スキームはLISPとは異なり、一連の厳しい要件を満たす必要があります。その1つは、再帰を効率的にするのに役立つ「テールコールの最適化」です。したがって、LISPよりもSchemeの方がプログラミングの再帰スタイルがはるかに一般的です。Schemeも、不親切ではありませんが、LISPの「C」のようなものです。つまり、小さな言語であり、すべてを一度に頭の中に保持できるはずです。
現在、2つのスキームファミリがあります。5番目のバージョンに基づくもの(R5RS)と6番目のバージョンに基づくもの(R6RS)です。R6RSの複雑さは前任者のどれよりも非常に大きく、多くのR5RS実装はそれをスキップすることを選択し、R7RSがR6RSよりもR5RSに似ていることを期待しています。R7RSの標準化プロセスは現在進行中であり、R5RSの実装者の要望とR6RSの人々の要望の両方を、最初のワーキンググループで小さなベース言語を標準化してから、大きな機能を標準化するために2番目のワーキンググループに委託することで試みました。これにより、言語は、小さな組み込みハードウェアとより高性能なマシンの両方で効率的で有用な実装を行うことができます。
次に、より具体的にします。
PicoLispは、本当にクールなLISPです。小さいです!著者はそれを自分のために書いており、私が理解しているように、彼は1980年代からそれで生計を立てています。彼の講演に参加する機会があれば、それをすべきです。彼は本当に興味深く、彼のことをよく知っているので、主流や退屈なものの小さな匂いさえも聞き取れません。
私はCommon Lispの実装に詳しくないので、これ以上コメントしません。
Guileは公式のGNUスキームです。
ラケットはR6RSスキームですが、最近はネットを広げたようで、「言語の作成、設計、実装のプラットフォームとして機能するように」試みています。
チキンは実用的なスキームを目指しています。R5RSに基づいており、Cにコンパイルされます。これは、既存のCライブラリを使用することが非常に簡単になるため、非常に重要な利点であることがわかりました。したがって、Chickenは、Perl、Python、Rubyなどを日常のスクリプト言語として置き換えるためのおそらく最も便利なスキームです。数年間、すべてのニーズに排他的に使用している人がいます。インタラクティブなREPLとコンパイラがあります。コミュニティ(メーリングリストとIRCの両方)は知識が豊富で、フレンドリーで役に立ちます。
多数のモジュールを備えた実装を探します。これは、広く使用可能であり、手元のタスクに役立つものがある可能性が高いことを示しています。
コンパイラを使用した実装、または少なくともIDEまたはREPLベースではないものを探してください。教育用に設計された実装の多くは、汎用スクリプトの作成には非常に困難です。
それが私が使用するものであるので、私はチキンをお勧めします。私は自分の個人プロジェクトでそれを使用し、プロとして使用しています(そして現在使用しています)。
完全に時代遅れの場合、私は何かに過度の努力を注ぎたくはありません。
Schemeはプロとして死んでいるわけではありませんが、そのコンテキストでそれを使用するにはある程度の時間をかける必要があります。Chickenのようなものは、単なる学問以上のものであり、現在使用している高級言語のほぼすべての基盤を簡単にカバーできます。