言語機能のランタイムサポートの必要性と、ネイティブコンパイルされた言語と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を実装するプラットフォームに制限されています。理論的にはバイナリポータビリティは可能ですが、実装はありません。