3

重複の可能性:
Scala の「eval」

Subramaniam 博士のプレゼンテーションhttp://www.youtube.com/watch?v=LH75sJAR0hcの 30 分で、Scala の関数型スタイルについて話し始めたときに、この例を挙げています。

class Car {
  def turn(direction: String) = {
    println("turning " + direction)
  }
}

val car = new car
car turn "left"

そして彼は、最後の行をデータ ファイルから読み取って評価できると述べています。つまり、データがコードになり、コードがデータになります。

Scala はこれをどのようにサポートしていますか? 機能はありevalますか?

4

1 に答える 1

1

ほぼすべての言語が関数をサポートしていevalます (Haskell のような強く静的に型付けされた言語も)。主にバイトコード解釈によって実装される言語 (Lisp に似た言語、Erlang、Java など) 用に構築された多くの言語ランタイムは、実行時に新しい (バイト) コードを挿入する機能をサポートしています。

新しいコードを動的に挿入できるようになったら、 eval を記述できます

Scala はそのような言語の例であり、実行時に JVM を使用できます

完全なメタプログラミングや動的リンクの特定のサポートがない言語実装でも、リフレクション メカニズムまたはコード生成サポート ライブラリ (LLVM など) を介して、プログラマの制御下でコードを動的に生成する方法がよくあります。

単純な 1 段階の eval を超えて、より一般的には、多段階の計算をサポートする言語では、任意の数の段階で、ある段階から次の段階へのプログラムの生成が可能になり、eval を安全に任意にネストすることが可能になります。

背景の読み方

  • McCarthy、John、LISP の歴史、SIGPLAN ではありません。1978. -- 導入eval
于 2012-05-15T12:23:02.007 に答える