私は、言語が「動的」であることが実際に何を意味するのかをよりよく理解しようとしています。Adobe(旧Macromedia)Director製品ラインのスクリプト言語であるLingoについてはかなりの経験があり、「動的言語」と見なされるのではないかと思っています。
変数とリストの処理方法は、私には非常に「動的言語」のように思えます。
変数を使用すると、foo = 3
またはを書くだけbar = "Hello World"
です。int
変数をまたはとして宣言しないでください-それはそのままでそれstring
を理解します。
リストを使用すると、のようなものを書くことができますmiscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]]
。これは?に似ていませんtuple
か?
これらの機能は、「動的言語」ステータスの資格を得るのに十分ですか?
興味深いことに、私はC#をより多く使用し、Director / Lingoをより少なく使用していますが、最近の動的言語に対するすべての興奮で、私は実際に穀物に反対しているのではないかと思います。
編集
以下のMarkRushakoffの回答に関して、このWikipediaの記事を使用して、Lingoが「動的」であるかどうかを分析する試みを示します。
Eval
--Lingoにはキーワードがdo
あります。コマンド全体を実行します。たとえば、または。文字列を数値に変換しようとしますが、これは単なる解析演算子ではありません。実際には、変数の文字列表現をその数値に変換できます。たとえば、ステートメントが23と評価されると仮定します。value
do
do "foo = 23"
do "foo = sum(20, 3)"
value
foo = 23
value("foo")
高階関数-私がこの権利を理解している場合、これは基本的に私がC#で「デリゲート」と呼ぶものです。Lingoは、私が知る限り、これを直接サポートしていませんが、関数を持つ型(「親スクリプト」と呼ばれる)を作成し、その型のインスタンスを渡すことはできます。
閉鎖-私が知る限り、これはサポートされていません。
継続-私が知る限り、これはサポートされていません。
リフレクション-少なくともある意味ではそうです。実際には、文字列を使用して型の新しいインスタンスを作成します(例:
fooInstance = script("Foo").new(bar)
。型のインスタンスを、型の名前を含む文字列に変換することもできます(したがって、c#のGetType()
機能を模倣することができます)。プロパティの名前を知らなくてもタイプのプロパティをクエリして(たとえば、インデックスでプロパティを検索する)、インデックスでプロパティの名前を見つけることもできます。マクロ-ウィキペディアの記事がマクロを説明しているように、私はそうは思わない。ただし、実行時にスクリプトを編集することは可能ですが、それが重要になる可能性があります。
したがって、Lingoは動的機能で6点満点中2〜3点を獲得しているようですが、Lingoがそれらをサポートしていないことを確認するには、クロージャと継続について十分に明確ではありません。何を結論付けたらいいのかわからないと思います。コメントを歓迎します。