6

構文的にはCのスーパーセットです。ただし、メッセージは実行時に送信および処理されるため、cのような純粋なコンパイル言語にすることはできませんが、VisualBasicや.Netランタイムのようなランタイムが必要です。

それでは、このランタイムを.NETFrameworkやJavaJVMなどに変換することで、他のプラットフォームに移植できないようにする理由は何でしょうか。

注:VBと言うとき、バイトコードにコンパイルされるのはもちろん最後のバージョン6なので、移植性を除いてJavaまたは.NetがVB6と根本的に異なるふりをするのはなぜですか?Javaと同様に、VisualBasicはにコンパイルされます。 「バイトコード」と呼ばれる中間言語。バイトコードは、VisualBasicランタイムモジュールによってx86マシン言語に変換されます。

続きを読む:http ://www.answers.com/topic/visual-basic#ixzz19iJd3wjA

Javaと同様に、VisualBasicは「バイトコード」と呼ばれる中間言語にコンパイルされます。バイトコードは、VisualBasicランタイムモジュールによってx86マシン言語に変換されます。

4

3 に答える 3

15

言語機能のランタイムサポートの必要性と、ネイティブコンパイルされた言語とVMコンパイルされた(または解釈された)言語の違いとの間で混乱しているようです。

ほとんどの高級言語には、ある種の実行時サポートが必要です。Cにもランタイムライブラリがありますが、多くのプラットフォームでは、その一部またはすべてを使用しないことを選択できます。最新のオペレーティングシステムはさらに多くのランタイムサポートを提供し、多くの言語はこれらを統合するOS固有の拡張機能を提供します-ライブラリの動的ロードを検討してください...

さらに、本質的にそれをサポートしていない言語の上にメッセージパッシングシステムを構築することを妨げるものは何もありません。これは非常に一般的であるため(特にイベント駆動型プラットフォーム用に作成されたプログラムの場合)、言語に統合することは、エラーが発生しやすい多忙な作業を高レベルのコードから言語とランタイムに単純に分解するものと見なすことができます。

最後に、Javaとほとんどの.NET言語の両方が実際にコンパイルされます。これらは、マシンがネイティブに実装しないバイトコードにコンパイルされるだけであり、実際に実行するには仮想マシンを使用する必要があります。最もパフォーマンスの高いVMは、コードを実行する前に再度コンパイルします。これは、高速で効率的なコンパイラツールチェーンを構築するために使用されているほど効果的な手法です。

Visual Basicは、ここでは非常に重要です。一部のバージョンは解釈され、他のバージョンはコンパイルされ、VB.NETは他の.NET言語と同様にバイトコードにコンパイルされ、実行中に再びJITコンパイルされます(表面的には似ていますが、これは実装される傾向があります)以前のVBVMとは大きく異なります)。他に何もないとしても、これは、言語とそれに書かれたプログラムが実行される手段が、一般的に信じられているほど緊密に結合されていないことを示しているはずです...

あなたの最後の質問への答え:Objective-Cは、少なくともCが移植可能であるという意味で(つまり、ソースコードの移植性)、決して移植可能ではありませんでした。AppleはGCCコンパイラを使用しています。GCCコンパイラは目がくらむほどのプラットフォームの配列に移植されています...しかし、プラットフォーム固有のAPIを利用し始めると(おそらく、AppleプラットフォームでObj-Cを使用する最も良い理由の1つです。 ..)これらのAPIを実装するプラットフォームに制限されています理論的にはバイナリポータビリティは可能ですが、実装はありません。

于 2010-12-31T17:45:51.430 に答える
14

メッセージパッシングがコンパイルできないということにはまったく従いません。これは、メッセージを実行時にメソッド呼び出しに解決する必要があることを意味しているにすぎません。Objective-C確かにコンパイルされた言語です。

プロセスはここで説明されています。メソッドの最初の呼び出しはC++メソッドの呼び出しよりも遅いのは事実ですが、解像度がキャッシュされるため、後続の呼び出しは速くなります。このような非決定論的な振る舞いは、Objective-Cを一部のアプリケーションに適さないものにします。

Objective-CはGCCのフロントエンドとして提供されているため、移植性が高くなっています。ただし、OSXとその前身であるNextSTEP、およびiOSのみが、Objective-Cが優先言語(つまり、OS APIが記述されている言語)であるOSAPIを備えています。そのため、GCCをサポートするすべてのOSで使用できますが、そのようなプラットフォームでの有用性は限られています。

于 2010-12-31T17:55:12.977 に答える
4

ただし、メッセージは実行時に送信および処理されるため、これはcのような純粋なコンパイル言語であることを意味します。

なぜだめですか ?コンパイルされた言語でメッセージを送信および処理できます。コンパイルされた言語は、必要に応じて、リフレクションを提供し、呼び出しを動的にディスパッチすることもできます。

OSX / iOSに実装されているObj-Cは、ネイティブコードにコンパイルされます。これがObj -Cランタイムの簡単な紹介です。これがもう1つです。

于 2010-12-31T17:43:52.667 に答える