JavaとかPascalとか.NETとかQtとかwxWidgetsとか
ところで最近ちょっと仕事で使うCLIP STUDIO PAINTの機能の不満点を自作ソフトで補完するみたいなことをやってるのだけど、それらを公開するときに気になるのが、もとのCLIP STUDIOはMac/Winで使えるソフトなんだよね。僕が作ってるアプリはWindows用
2013-12-06 02:38:51メジャーグラフィックソフトとかってわりとMac/Win両方に対応してたりするので、それを補うソフトもできれば両対応したいとこなんだけど、やっぱそれって難しいんだよねえ。MacとWindowsじゃ基本API全然違うし
2013-12-06 02:40:40基礎知識: APIとは、アプリケーションプログラミングインターフェイスの略。要するにファイルを操作したり画面になんか表示したりキーボードやマウスの入力を処理したりという部分はOSが受け持つので、アプリケーションがOSをやりとりする方法を決めている。それがAPI
2013-12-06 02:42:45ビットマップ画像を作成するためにメモリ上でどういう風に領域を確保して、描画のための線の描き方をどうするか、その太さは、フォントの取り扱いは、そんなんOSごとに全部違う。
2013-12-06 02:44:54なので、両対応ソフトというのは、プログラムの仕様を決めて、それぞれのOSごとに全く違うプログラムを書くか、もしくはOSのAPIの上にさらに一つ層を重ねて、抽象的な「OSにとらわれないAPI」を作成することになる
2013-12-06 02:46:55この考え方は、さかのぼればPascalにたどり着く。ALGOLという、元祖構造化言語から派生したPascalは、P-Codeという仮想マシン語にコンパイルして、P-Codeインタープリタ上で動いていた。
2013-12-06 02:51:29確か初期のPascalは、P-codeと強く結びついてたと思う。8ビットパソコンでももてはやされたけど、実際のところまあ、ベタなBASICよりは速いかもねえ、くらいな感じ?
2013-12-06 02:54:29Javaが登場して、雑誌でがんがん特集組まれてたとき、PascalのP-code思い出して、「ああ、こりゃいずれネイティブコンパイルになる。でなきゃこける」と思った人多いんじゃね?いや僕はそう思ったんだけど、
2013-12-06 02:59:51雑誌やネットでは「write once, run anywhere!」を賞賛する記事ばかりで。いやあれ出た頃のJava、すげえ重かったじゃん。仮想マシンが起動するのもめっちゃ重かったし。実行ももたもたしてたじゃん。えええ?って思わなかった?
2013-12-06 03:00:49そのうちMSがJavaを勝手に高速化します。追加機能つけますとかやりだしてSUNに訴えられるんだよね。なんかしばらく訴訟合戦やってるなーと思ったら。「C#」発表。Javaっぽくてもっと便利な感じのやつ。しかもWindowsに最適化されたやつ。
2013-12-06 03:04:58.NETフレームワークというAPIと、CILという中間言語へのコンパイル。JavaのバイトコードとAWT,SWINGをWindowsフォームに向いた形に変えたようなあれ。
2013-12-06 03:08:49まあ、Javaが最終的にJavaバイトコードにコンパイルされるのと同様、.NETはVisualBasicやらC#やらF#(まだ生きてる?)のコードをCILにコンパイルして実行するわけで
2013-12-06 03:10:58ちなみにVisualBasicはもともとx86のマシン語にネイティブコンパイルされてたので、http://t.co/NraxRyPpClになって中間言語コンパイラになったのは、実行速度の点で不利になってたりする
2013-12-06 03:13:16なんかtogetterにまとめるときに、VB.NETと書いた部分が「http://t.co/NraxRyPpCl]と置き換えられてしまいました。もとの文章は
「ちなみにVisualBasicはもともとx86のマシン語にネイティブコンパイルされてたので、VB.NETになって中間言語コンパイラになったのは、実行速度の点で不利になってたりする」
です
まあ、プロのプログラマは、http://t.co/NraxRyPpClとか使わない。使うとしたらC#なのである。なぜならVBは所詮素人の言語だからである。C#ならなんかプロっぽい。CとかC++使ってる人が使う「.NETならしょーがねえからこれ使うか」の言語なんである
2013-12-06 03:16:23これも
「まあ、プロのプログラマは、VB.NETとか使わない。使うとしたらC#なのである。なぜならVBは所詮素人の言語だからである。C#ならなんかプロっぽい。CとかC++使ってる人が使う「.NETならしょーがねえからこれ使うか」の言語なんである
です
ところで.NETとかC#はマイクロソフトの独占技術ではない。要は中間言語のオペコードと、アプリケーションフレームワークなので、第三者が実装するのは別にかまわないのだ。なのでMonoというオープンソースの.NET互換ライブラリがあったりする
2013-12-06 03:19:42実際にMonoが使われるアプリケーションってあんましなさそうだけど、かの「セカンドライフ」がリンデンスクリプトという仮想世界内の独自言語をMonoで実装し直したりという事実があったりする
2013-12-06 03:21:47ちなみにリンデンスクリプトというのはCを簡易化した言語で、switch caseもないので、パターン分岐を延々 if else で書かないといけない代物だったので、Monoになると発表されたときに「んじゃC#で書けるのか?」とすげえ盛り上がったのだけど
2013-12-06 03:28:49