VB.NET: .Net Frameworkが出力するものって、

Visual Basic .NET が出力するオブジェクトファイルって、Visual Basic と違い、機械語ファイルじゃないのね。

過去、私が成り行きで開発環境を使ったことがある、DOSやWindows3.1 のような古い思想で動くOSや、組み込みシステム用のプログラムを製作する場合、

ソースコード → リロケータブルファイル → オブジェクトコード → Sレコード等

となって機械語がROMに書き込まれるわけですが、.Net Framework や .Net core を使った開発環境の場合、最終生成物であるオブジェクトは、機械語じゃなく中間コードや仮想コードであるって、知りました。

CPUは、最終的には機械語でしか動かないので、.Netを使った出力ファイルが中間コードということは、実行前にJITコンパイルして機械語に落とすか、仮想CPUを作って実行する必要があります。
この実行方式だと、CPUは最大速度で動作することはきませんが、今の時代のマルチコアCPUはそういう余計なことをしたとしても十分速いってことなんでしょう。
速度低下はデメリットですが、機械語を直接メモリにロード・実行しないことから、セキュリティー視点からは安全性が向上します。また、オブジェクトがターゲットとする .Net が組み込まれている(または組み込める)なら、OSを問わずに実行できるってこと。それがJITコンパイルになるのか仮想になるのかはわかりませんが。Webブラウザー上のJAVA VMと同じ考え方ですね。速度を犠牲にして拡張性、可用性を向上させているわけですね。

Visual Basic の場合は、

Visual Basic → Visual Basic .Net Framework → Visual Basic .Net Core

と拡張されてきたようです。

私は、Visual Basicなんだから、どれでも同じでしょ。一緒に同梱するランタイムが違う(実行できるOS範囲が異なる)くらいにしか考えていなかったのですが、(大雑把には正しいが)意図することが全然異なっていました。

まず、Visual Basic、これは Windows限定の機械語オブジェクトが出力される、昔ながらの実行環境。

続いて、Visual Basic .NET Framework。以前からWindows Updateで、.NET Framework 3.5とか 4.8とかいろいろ更新されたり、ビデオドライバーなど外からゲームやドライバーをインストールしようとすると、一緒に入っていたけど、そういうものだからと全く理解せずに使っていたものの本体。.Net Framework バージョン x.x をターゲットとして出力されたオブジェクトファイルの実行環境。同じバージョンの .net framework がインストールされているかインストールできるWindows環境ならどこでも動く。Visual Studio から出力されるものは(多分)中間コード。

そして、最後が最新の、.Net Core。.Net Core がインストールされている環境なら、出力されたオブジェクトファイルは Windows OSに限らず、MacOS や Linux でも動作する(らしい。まだ試したわけじゃないけど。)Visual Studio の Releaseオプションには、ターゲットCPU にはAnyCPUの他、x86, x64, ARM32,ARM64 があるので、ひょとするとオブジェクトを動作させる環境を限定してサイズを小さくできるのかも。
いずれにせよ、一つのプロジェクトが出力するファイルを複数のOSで動作するような使い方ができるらしい。
現在は、.net core 6 が安定版で、.net core 7 が最新とのこと。
これはすごい。
ただ、(ユーザーに.netを事前インストールする必要を省略してもらうには)オブジェクトファイルサイズが、最小でも20MBくらいになってしまうっていうのが泣き所。Visual Studio には、CPUのアセンブラソースコードを出力する機能もあるので、使おうとすれば組み込み用にも使える気がします。

Visual Studioに触り始めて約2か月。今までに理解したことを追加メモしておくと、

VB → VB .net framework → VB .net core というのは、バージョンアップじゃなく、VBというBasic系言語の世代交代という理解の方が正しいようです。(私の場合、ここが根本的に間違ってた。)
なので、VB でプログラムを書こうとして、行き詰まり、Web検索して表示された情報が、必ずしもそのまま使えるとは限りません。VB .net framework と VB .net core は Visual Studio 2019か2022 上で記述するのでソースコードは同じですが、.Net 以前のVBは、使用可能なコマンドや書式が異なる場合が多い。厳密には、.net core3、.net core 6、 .net core 7 もコマンドが違うらしいですが、今の私には、その違いを生かしたソースコードを書く力はありません。

上の理由から、現時点で Visual Basic  や VB に関する情報を検索して、期待したものが見つかったとして、その情報の作成日を確認しないと、Visual Studio 2022の上で使えるかどうかはわかりませんね。
Radikoの認証方法や、聴取方式と同様、最新情報なのかどうかも一緒にチェックする必要があります。

まだまだ初心者。

コメントを残す