6

私は CS の初心者で、クラスのほとんどは Java です。私は現在、独学で「Little Schemer」を読んでおり、その方法を見つける過程で、Scheme の「実装」に関する多くの参照を見つけました。私の質問は、実装とは何ですか?

それらはSchemeの亜方言ですか、それとも別のものですか(DrSchemeは言語のさまざまな「フレーバー」を許可しているようです)?IDE、インタープリター、対話型ツールなどを組み込んだ特定のエコシステムに付けられた名前ですか?

他のすべての言語 (Java など) にもさまざまな「実装」がありますか、それとも「オープン」言語用に予約されているものですか?

ありがとうございました、

ジョス・ドラージ

4

4 に答える 4

7

プログラミング言語の実装は、その言語のコンパイラまたはインタプリタです。IDE などのエコシステムの追加コンポーネントは、実装の一部にすることができますが、必須ではありません。Scheme には、DrScheme、Guile、Gambit など、多数あります。

多くのプログラミング言語にはさまざまな実装がありますが、特定の言語のすべての実装は、まったく同じ方言を実装 (つまり、コンパイル) する必要があります。これは、Scheme の場合のように、言語の明確で公式な仕様がある場合に最も簡単です。もちろん、ほとんどの言語仕様には多くのバージョンがあるため、実装が異なればサポートされる言語のバージョンも異なる場合があります。

Java については、Sun、Oracle、IBM からの実装があり、私はお互いに考えています。

于 2010-03-04T09:31:24.347 に答える
6

言語の実装とは、その特定の言語を実行またはコンパイルするすべてのプログラムを意味します。

具体的には、Scheme については良い質問です。なぜなら、言語仕様には複数の大幅な改訂があったからです。それを超えて、Scheme と呼ばれる多くの言語 (オリジナルの Scheme を含む!) が、どの仕様にも完全には準拠していません。HTDP の初心者用言語は、問題の解決方法を少し制限するために (おそらく他の理由で) 小さくなっています。GIMP はごく最近まで、SIOD (Scheme In One Defun または Scheme In One Day) と呼ばれる非標準の Scheme インタプリタを使用していました。他にも多くの例があります。たとえば、言語標準サポートに対する PLT Scheme の見解については、 Dialects Of Schemeを参照してください。

于 2010-03-04T09:28:07.323 に答える
1

実装は、プログラミング言語のコンパイラまたはインタプリタです。言語の指示を行動に変換する方法です。現在、複数の実装を持つ最も一般的な言語は、おそらく JavaScript です。

人々が実装について話すとき、それは多くの場合、複数の実装から生じる問題に対処しなければならないという文脈にあります。好きな人が好きなようにやってくれるというメリットはありますが、イライラすることもあります。Chrome と Firefox、IE と Safari はすべて同じ JavaScript コードを使用しても動作がわずかに異なるため、Web 開発者はさまざまなブラウザーでコードをテストし、使用しているブラウザーを検出し、コードを環境に適応させるために多大な時間を費やさなければなりません。ライブラリ、バグなどのわずかに異なるセット。

一部の言語は、ドキュメントではなく標準実装 (ruby、perl、python) によって定義されています。そのため、それらの複数の実装について聞いたことはありません。これらの言語でも、さまざまなバージョンの動作が異なるという関連する問題があります。

実装は新しい現象ではありません。たとえば、Bill Gates は高校時代に多くの BASIC 実装の 1 つを書き始めました。

他の言語よりもSchemeの問題を悪化させるのは、仕様が意図的に小さく、ほとんど指定しようとしないことです。利点は、プログラミング言語を設計する人々が、きちんとした新しいプロパティを備えた新しい実験的な Scheme 実装を比較的迅速に作成できることです。これが完了すると、他の人が小さな言語を有用な言語に拡張する方法を示しているため、自分が書いた小さな言語でさえ「有用」であると主張できます。しかし、その「プログラミングの単純な問題」には多くの作業があり、各実装は独自に非常に多くの決定を下さなければならないため、実装間の違いは非常に大きくなります。したがって、複数の実装に関連する問題は、より完全に指定された言語と比較して、Scheme では多くかつ大規模です。

Scheme コミュニティは、小さな仕様の利点とともにこの問題を認識しており、標準の新しいバージョンで実験的な言語から有用な言語への移行をより明確にする方法に積極的に取り組んでいます。 http://scheme-reports.org/

今のところ (2010 年)、新しいユーザーが PLT スキームで作業を開始することを個人的にお勧めします。多くの実装の問題に怯える必要はありません。プログラミング言語の設計者が独自に設計した言語で作業することには、大きなメリットがあります。PLT には、大規模なコミュニティと、上で概説した問題を克服するのに役立つ一連の優れたライブラリがあります。

ベスト、グレム

于 2010-03-12T02:01:50.647 に答える
1

実装は、特定の標準 (クラス インターフェイス、API、言語仕様など) を実装 (準拠、提供など) する特定のベンダーのバージョン/製品です。

これを類推して理解しやすくするために、コカコーラとペプシの両方がソーダ (または、あなたがそう思うならポップ) の実装であると見なすことができます。ソーダ/ポップは一般的な概念であり、コカ・コーラとペプシはその概念に準拠した特定の製品です.

同様に、Mac OS X と Linux はどちらも Single UNIX Specification の実装です。GNU C++ コンパイラとインテル C++ コンパイラは、C++ プログラミング言語の実装です。Sun Java 6 JDK、OpenJDK、および GNU Compiler for Java (GCJ) はすべて Java の実装です。

すぐにわかるように、Java 内では、クラスがインターフェースで宣言された関数の具体的な定義を提供するときに、「implements」という言葉がキーワードとして使用されます。インターフェイスに込められたコンセプト。

「実装」の意味についての理解を深めるのに役立つことを願っています。

于 2010-03-04T11:43:31.097 に答える