ライブラリと言語拡張機能の違いは何ですか?特にScalaで。
3 に答える
これはScala言語仕様です。この仕様で記述されている言語で記述できる場合は、ライブラリです。このドキュメントで説明されている言語に、その言語自体で記述できない変更を加えた場合、それは言語拡張です。
これはScalaとJavaの両方に有効であり、ライブラリは次のように定義できます。
コンピュータサイエンスでは、ライブラリはソフトウェアの開発に使用されるリソースのコレクションです。これらには、事前に作成されたコードとサブルーチン、クラス、値、または型の仕様が含まれる場合があります。
これは、ライブラリがアルゴリズムを実装するためにコードで使用するルーチンのコレクションであることを意味します(私は非常に単純化しています) 。同じコードを何度も書く手間が省けます(たとえば、文字列をコンソールに出力するたびに車輪の再発明を行う必要はありません)。
言語拡張機能は、コードから直接呼び出す(または使用する)コードではなく、プログラムの記述方法を変えるものです。言語自体の構文を変更する可能性があり(通常は変更します)、多くの場合、コンパイラーのプラグインです。Java言語に追加された機能の多くは拡張機能です(たとえば、ジェネリック)。
たとえば、Session-Scalaは、次の両方で構成される拡張機能です。
- 並列プログラミングを管理するためのライブラリ(コードから直接呼び出すことができるコード)。
- 言語拡張:記述したコードをより明確にするために(シンタックスシュガーと呼ばれることもあります)、言語の構文を変更して、ライブラリ関数をより簡単に使用できるようにします(いいと思いますか?)
例については、このページをご覧ください。
とは言うものの、Scalaでは、その構文のために、言語拡張は実際には必要ありません(たとえば、.NET言語よりも簡単に記述できる場合でも)。最初に頭に浮かぶのは中置演算子ですが、一般に、メソッド呼び出しのすべての構文により、DSLなしでDSLとして使用するのが簡単になります。
言語拡張とはコンパイラプラグインを意味する場合、コンパイル時に指定されたソースコードを他のプレーンなScalaコードにチェックまたは変換できます。ただし、同じ元のソースコードを使用している他のユーザーも、コードをコンパイルするためにコンパイラプラグインをインストールする必要があります。
一方、Scalaのライブラリは、Scalaが中置記法/接尾辞表記法とシンボリック法をサポートしているため、言語拡張のように見える場合があります。ただし、コンパイル時に特別なことは何も行われませんが、当然、同じソースコードをコンパイルして実行する場合は、参照ライブラリが必要になります。