えー、VB.netの言語仕様とかについては項を改めてまた後日書き綴るつもりなので、ここではもぅ少し開発/動作環境に絞って話を広げたいと思います。
VS.netのIDE。
従来のVSは、その中に各種言語のコンパイラやツールやソース/リソースを作成するためのIDEなんかが1セットになっていました。つまり、VSを買わない限りVBやVC++でのプログラム作成はできなかったわけです。
(もちろんVBやVC++の単体売りパッケージもありますが。それにしてもそれを買わないとプログラム作成ができなかった、ってのは同じです。)
ところが、今回の .net では、コンパイラは .net Framework SDK で提供されるんですね。
もちろんVS.netには.net Framework SDKが機能の一部として提供されているので含んで大なりなのですが、極論を言えば
.net Framework SDKだけでプログラムは作成できる。
VS.netの入手は必須ではない。
ってことになります。プログラム作成に必須ではないVS.net。…ちょっと違和感があります、私。
VB.netのコンパイラであるVBC.EXE、C#.netのコンパイラであるCSC.EXE、VC++.netのコンパイラであるCL.EXEはすべて.net Frameworkの中にあります。
ので、テキストエディタで正しいソースを記述できるだけのスキルがあるのなら、なにもわざわざIDEを使わなくとも実行ファイルは作成できます。
(実際には、簡単なWeb用のスクリプトならともかく、中~大規模のソース/リソースをIDEなしで作成するのは非現実的な選択であろぅよと私は思っていますが。)
さて、コンパイラと密着しなくなってしまったIDEとしては、ではどこを目指していくのか。
とことんまでリソース作成機能ややヘルプ機能(MSDN)と密着し、ある程度のソース自動生成機能やチーム開発にも対応した開発環境として一本立ちしていこうとしているよぅです。
ので、どぅも動作を見ている限りでは、IDEそのものはほとんど言語依存していないよぅなんですね。
新しい言語が出てきても、その言語仕様のデータとヘルプを組み足せば、その新しい言語に即した動作ができる開発環境として動作できるよう作ってある感じです。
そぅいえば、つい先日(2001.10.12)Visual J#.netのベータが発表されましたね。製品版のリリースは2002年末くらいになりそぅですが。
もちろんこーいぅ後付けで出てきた言語に対しても、VS.netのIDEは対応していくとMicrosoftは明言しています。
実際、すでに20種類以上の言語が.netに対応していくと声を上げているそぅですし。
ただしこの20種類の言語が何々なのかは、ちょっと調べがつきませんでした。COBOL.netとかPL/I.netとかPascal.netとか出るのかなぁ…具体的なラインナップをご存じの方はいらっしゃいますか?
あ、こないだPerl.netはなんか見かけたよぅな気がします。C#のソースに変換するソフトだそぅで…それでも.net対応って言えば確かにそぅか。ちょっと目からウロコ状態。
余談ですが。
MicrosoftがJAVAの取り扱いでSUNとケンカし(といぅか、あれはSUNはJAVAの主導権を主張してケンカ売って、Microsoftに「じゃあJAVAのデフォルトサポートなんかやめてやるぅ」って怒られた途端に泡喰って「WindowsにJAVAをデフォルトで入れろ」キャンペーンなんか張ったりして…って感じの騒動でした。な、情けない。)、てっきりJAVAから手を引いたと思っていたのでJ#.netの発表はちょっとびっくり。
でも、J#.netは「Java言語開発者向けのツール」であり「Java言語のスキルをそのまま活用」できるとは言っていますが、「J#.netはJAVAである」とは言っていないんですね。逆に、「Microsoft Visual J# .NET はマイクロソフト社の製品であり、サン マイクロシステムズ社との関連性は全くありません。」と言い切っちゃってるし。
うーん。おもしろいけど、これ、SUNとまた一悶着あるんだろぅなぁ。
あと、VS6では一度取りやめになったはずのCrystalReportsが復活してたりしていますね。
CrystalReportsについてはシングルプロセスエンジンだったのが使いにくく、また製品版へアップグレードしよぅとした時の日本語版販売代理店のあまりにもお粗末な対応に失望したせいもあり、あまりいい印象を持っていません。
せめて同梱版できちんと使い物になるマルチプロセス対応のものであればいいなぁと淡い期待をしておりますが。
あ、それと。VisioXP(英語版)が同梱されておりましたよ。
IDEから実行すると、その時点でのクラスやらオブジェクトやらが描画オブジェクトとして自動生成されます。
ちょっとオブジェクトのデザインに私なんかは違和感を感じますが、ドキュメント作成補助まで考えてくれている姿勢は前向きに評価したところですね。
えーと、話を戻して。
VB.netのコンパイラは、C#.netコンパイラなどと同じ独立した実行ファイルとしての提供になりました。ので、まず従来のように「IDEから[実行]ってやるとコンパイルなしでいきなり動作開始」ってことはできなくなりました。(正確には今までだって、動作単位ごとにp-codeコンパイルしながら実行してたんですけどね。オプションに、順次コンパイルのON/OFFってありましたでしょ?)
必ずビルド(VBで従来呼んでいた「コンパイル」じゃありませんよ)をした後に実行。もっともいきなり[実行]ってやると、自動でビルド→実行の手順を踏んでくれちゃいます。
で、今まではコンパイルした際にエラーがあると、最初に見つかったエラーにフォーカスが当たって実行停止。何ヶ所もエラーが内在している場合は、一ヶ所直して実行→次に指摘されたエラーを直してさらに実行、って繰り返していかなきゃならなかったんですけど。ビルドの場合はソースを先に読んで全部コンパイルして、全部のエラーをリストアップしてくれます。
今までのVBに慣れ親しんでいる方にはかなりな違和感かもしれませんが、ふつーコンパイラってそぅいぅものです。VC++もBorlandの一連の製品も、もっと言えばCUIの時代からコンパイラってそーいぅものでしたので、私なんかはよぅやくコンパイラとしてあるべきスタイルになったよぅな気がします。
で、なんでそんな仕様になったかといぅと、たぶんこれ、他言語とビルドの手順や中途生成物を同じレベルにしておきたかったんでしょうね。
その時々でのオペレーションの結果生成される中途生成物/最終生成物が同じレベルのものであるとどぅいいことがあるのか。
マルチランゲージでの開発(特にデバッグ)が
むちゃくちゃシームレスになるんです。
こ、これは嬉しい。
今までVBのサブルーチンをVC++で作るなら、VC++側をDLLにして、しかもそのつながりをテストするためにVB側をネイティブコード(最適化なし、シンボリックデバッグ情報を生成)コンパイルして、さらにVBソースの位置をVS IDE側にセットしてデバッガにかけていかなきゃならなかったんです。
それが今度は、なーんの考慮もなしでいきなりデバッグに突入できる。しかもひょっとすると、VB.netのソースとC++.netのソースを混ぜ合わせて1実行ファイルとしてビルドできる(んじゃないかなーと思ってるんですが、本当にできるかどぅかはまだ調べてません)。
この状態が成り立つのであれば、チーム開発において言語を絞り込む必要がなくなります。各々が自分のもっとも得意とする言語を任意に選びつつ、完成品はひとつのEXEとして提供できるようになるんですね。
(ただしここではチームメンバー内でのお互いのソースに首を突っ込む必要がある、という側面は考慮していません。また、納品後メンテナンスを担当する人間のスキルも考慮していません。そこまで考えると、商売としてプログラムを組む場合にはちょいと難しいかもしれませんね…。)
今まで他言語に対して孤立していたVBが
今回の.net対応でとうとう同じ土俵に上がれるよぅになった
と解釈していいんじゃないでしょぅか。
そのためのVS.netのIDEへの参入であり、作成過程の統一なんだと思いますよ。
ちょっと愚痴。
あちこち資料をあさりながらVS.netを勉強したりここらへんのコンテンツを書いたりしているわけなんですが、どぅも用語や概念があっちとこっちで食い違う、なんてことが今回多いんですよ。
- MSILはインタプリタ実行される
MSILは実行時にはネイティブなマシン語コードに変換されるのでインタプリタのよぅな実行エンジンは持ちません。
- CLRの説明のはずなのに「CLS」と呼んでいる
CLSはCLRのサブセット相当の共通言語仕様ライブラリです。
- C++.netでのネイティブなマシン語コードをアンマネージドコードと呼ぶ
CLR配下にない非管理のコードはすべてアンマネージドコードなのであって、C++.netのネイティブなマシン語コードだけをアンマネージドコードと呼ぶわけではありません。
などの明らかなミスは私でもわかるので読み飛ばせば済むんですが、ホントなんだかどぅなんだか微妙に間違われてたりするとこちらも現時点ではちょっと判断しきれなかったりもします。
まぁ書き手の方も今までにない概念を大量に押しつけられて慌てて書いている向きもあるでしょうから、みんながみんな広く深く正しく理解して書くべき、と断じる段階でもないことは十分承知なんですけどねぇ。
そこに持ってきて私の側の理解ミスなんかもきっとあるでしょうから…結果として、本コンテンツはかなりあやしげな確度にしかなっていません。とほほ。
でもまぁそんなにイタいレベルで大間違いはしていないと思ぅので。
よそ様よりは平易に、プログラマに必要だと思う情報をいち早く書き並べているつもりなので、そのへんの意を汲んでひとつご勘弁いただきたいところではあります。
もしミスや誤解を見つけられた方はご一報いただけると幸いです。