43

動的および/または弱い型付けを特徴とする、マシン コード/バイナリ (VM によって実行されるバイトコードではなく、型付けを考慮するとまったく異なるもの) にコンパイルされるプログラミング言語があるかどうか疑問に思いました。

次のようなコンパイル済み言語を考えてみてください。

  • 変数を宣言する必要はありません
  • 実行時に変数を作成可能
  • 関数はさまざまな型の値を返すことができます

質問:

  • そのようなプログラミング言語はありますか?
  • (なぜだめですか?

動的でありながら強力な型付けされたコンパイル済み言語は本当に理にかなっていると思いますが、それは可能ですか?

4

9 に答える 9

34

私は Lisp がその説明に当てはまると信じています。

http://en.wikipedia.org/wiki/Common_Lisp

于 2010-03-31T17:32:54.007 に答える
6

はい、可能です。ジュリアを参照してください。これは動的言語 (型なしでプログラムを作成できます) ですが、VM 上では実行されません。実行時にプログラムをネイティブ コードにコンパイルします (JIT コンパイル)。

于 2016-03-09T04:26:40.560 に答える
6

Objective-C には、必要なプロパティがいくつか含まれている場合があります。クラスは実行時に開いて変更することができ、オブジェクトが通常応答するかどうかに関係なく、任意の種類のメッセージをオブジェクトに送信できます。そうすれば、Ruby と同じようにダックタイピングを実装できます。ida とほぼ同等の typeにvoid*は、(それ以外の場合は不明な) 型が準拠するコントラクトを指定するインターフェイスを付与できます。

于 2010-03-31T17:32:49.517 に答える
6

C# 4.0 には、これらの特徴のすべてではないにしても、多くの特徴があります。本当にネイティブ マシン コードが必要な場合は、ユーティリティを使用してバイトコードをマシン コードにコンパイルできます。

特に、dynamicキーワードを使用すると、オブジェクトとそのメンバーを実行時に動的にバインドできます。

Anders Hejlsberg のビデオThe Future of C# で入門書を確認してください。

http://channel9.msdn.com/pdc2008/TL16/

于 2010-03-31T17:33:11.347 に答える
4

Objective-C には、あなたが言及した多くの機能があります。マシン コードにコンパイルされ、オブジェクト インスタンスに関して効果的に動的に型付けされます。id型は任意のクラス インスタンスを格納でき、Objective-C はメンバー関数呼び出しの代わりにメッセージ パッシングを使用します。メソッドは実行時に作成/追加できます。Objective-C ランタイムは、実行時にクラス インスタンス変数を合成することもできますが、ローカル変数は宣言する必要があります (C と同様)。

C# 4.0 には、IL (バイトコード) にコンパイルされ、仮想マシン (CLR) を使用して解釈されることを除いて、これらの機能の多くがあります。しかし、これは興味深い点をもたらします: バイトコードがジャストインタイムでマシンコードにコンパイルされている場合、それは重要ですか? もしそうなら、.Net 言語だけでなく、Python ( PyPyまたはUnladed SwallowまたはIronPythonを参照)、Ruby ( MacRubyまたはIronRubyを参照)、および他の多くの動的型付け言語 (多くの LISP バリアントについては言及しません) への扉が開かれます。

于 2010-03-31T17:33:34.670 に答える
3

Lisp と同様に、デフォルトで変数を持たない連結型*言語であるFactor、動的型付け、および柔軟なオブジェクト システムがあります。Factor コードは、対話型インタープリターで実行するか、その関数を使用してネイティブ実行可能ファイルにコンパイルできます。deploy

*ポイントフリー機能スタックベース

于 2013-10-31T04:52:15.197 に答える
2

VB 6にはそのほとんどがあります

于 2010-03-31T17:35:49.103 に答える
1

まさにこれらの機能を備えた言語を私は知りません。ただし、重要なサブセットを持つ 2 つを考えることができます。

  • Dには、型推論、ガベージ コレクション、および強力なメタプログラミング機能がありますが、効率的なマシン コードにコンパイルされます。ただし、動的型付けはありません。
  • C#は、mono プロジェクトを介してマシン コードに直接コンパイルできます。C# には D と同様の機能セットがありますが、やはり動的型付けはありません。
于 2010-03-31T17:33:27.427 に答える
0

PythonからCには、おそらくこれらの基準が必要です。

  1. Pythonで記述します。

  2. Pythonを実行可能ファイルにコンパイルします。単純なPythonスクリプトをWindows実行可能ファイルに変換するプロセスを参照してください。PythonからCへのコードトランスレータの記述も参照してください。

于 2010-03-31T17:58:53.390 に答える