6

私はGambitSchemeにかなり興味を持っています。特に、サポートされている幅広いプラットフォームと、必要に応じてCコードをSchemeソースに正しく配置できる機能に興味を持っています。とは言うものの、それはCommonLispと比較して「含まれるバッテリー」が少ないSchemeです。多くのことを最初からコーディングするのが好きな人もいますが(別名、激しいヤクの剃毛)、私は好きではありません!

これは、GambitとCommonLispのいくつかのフレーバーの両方を使用したことがある人々を対象とした私の2つの質問に私をもたらします:

1)効果的に図書館へのアクセスが良いのはどれですか?SchemeのライブラリはCommonLispよりも少ないです。ただし、GambitSchemeはC/ C ++コードとライブラリにスムーズにアクセスでき、CommonLispのライブラリをはるかに上回っています。あなたの意見では、GambitのFFIの滑らかさは、ネイティブライブラリの欠如を上回っていますか?

2)Schemeのオブジェクトシステム(TinyCLOS、Meroonなど)は、Common LispのCLOSとどのように比較されますか?それらが不足していることに気付いた場合、どの機能を最も見逃しましたか?最後に、そもそもLisp / Schemeのオブジェクトシステムはどれほど重要なのでしょうか?私は、Lispベースの企業全体(例えば、ITA Software)がCLOSを完全に放棄していると聞いたことがあります。Lisp / Schemeではオブジェクトは本当にオプションですか?Gambitに優れたオブジェクトシステムがない場合、それらを見逃す可能性があることを恐れています(私のプログラミングのバックグラウンドは純粋にオブジェクト指向です)。

C ++ / Pythonからの意欲的な変換を支援していただき、ありがとうございます。

-マット

PS:担当者が1500人を超える人、「ギャンビット」タグを作成していただけませんか。:) Jonasに感謝します!

4

2 に答える 2

5

確かに、Schemeは全体として、定義された標準に含まれるライブラリの数が少なくなっていますが、Schemeの実装は通常、その標準に基づいて構築され、より多くの「バッテリーを含む」タイプの関数が含まれています。

たとえば、GambitはSnowパッケージシステムを使用しており、いくつかのサポートライブラリにアクセスできます。

他のスキームはさらにうまくいき、より多くの(またはより良い)サポートライブラリにアクセスできます。ラケット(PlaneT付き)とチキン(付き)の両方がすぐに思い浮かびます。

とは言うものの、Common Lispも非常に豊富で、多くの興味深く有用なライブラリがasdf-installで簡単にインストールできます。

スキームオブジェクトシステムに関しては、私は個人的にチキンスキームを好む傾向があり、小屋を好むようになりました。とはいえ、TinyCLOSには何の問題もありません。どちらもうまく機能し、不足しているものは実際には見つかりません。その最後のステートメントは、Schemeを書くときに私が多くのオブジェクト指向主義に依存する傾向がないという事実ともっと関係があるかもしれませんが。私の経験では、両方のシステムは、「プロトコル」を書きたいときに表面化する傾向があり、それが理にかなっている場合は、プロトコルに特化する方法があります。

于 2011-01-03T23:14:58.737 に答える
2

1)Gambitスキームを使用したことがないので、C /C++統合がどれほどスムーズかはわかりません。しかし、私が使用したすべてのCommon Lispには、完全に機能するCFFIがあります。したがって、Cライブラリの可用性は同じです。統合するには多少の作業が必要ですが、これはGambitSchemeにも当てはまると思います。結局のところ、LispとCは異なる言語です..?しかし、あなたは別の経験をしているかもしれません。その場合はもっと学びたいと思います。

あなたはQuicklispに興味があるかもしれません。これは本当に良い新しいCommonLispプロジェクトです-それはたくさんの高品質のライブラリを非常に簡単にインストールすることを可能にします。

2)C ++とPythonは、データをカプセル化および構造化するための一般的な手段としてOOPとクラスを使用するように設計されています。CLOSにはこの野心はまったくありません。代わりに、特定のタイプの引数(必ずしもクラスではない)に特化できる総称関数を提供します。基本的にこれはOOPを有効にしますが、Common Lispでは、OOPは物事を成し遂げるための基本的なものではなく、便利な機能です。

CLOSは、C ++オブジェクトモデルよりもはるかに優れた設計と柔軟性を備えていると思います。TinyCLOSは、その点で違いはありません。

于 2011-01-03T21:26:13.317 に答える