Python と JavaScript を結びつける妄想
かつて、"Write once, run anywhere" という標語みたいなものがあって、ちょっとばかりプログラマの夢、というか心を惹きつけてました。いまさらですが、一度コードを書けばどこでも動く、という Java 勢力のプロパガンダみたいなものです。これはある程度実現してますし、ある程度真実ですが、一つだけ落とし穴がありました。つまり、どんなプログラマも「自分な好きな言語とその適用分野を知っていて、なんでもかんでも Java で書きたい訳ではない」ということです。大抵のプログラマは言語を使い分けます。
ここで、ちょっと焼酎「鏡月」など飲みながら妄想を広げてみました*1。つまり、
- みんなが好きなどんなプログラム言語コンパイラも、出力を機械語にしないで Java VM (Java Virtual Machine) で動くコードにしてやれば、少なくとも Java VM が動いている環境なら、どこでも走らせることができるぞ。
- 世の中にもっとも広まっている実行環境で Java VM を実装すれば、自分の好きなプログラム言語で書かれたコードを世界中どこでも走らせられるぞ。
ということです。あ、当たり前ですね*2。
前者についていうと、私の好きな言語の一つ Python には、Jython という実装があって、Java VM 上で動くようです。試したみたことないけど。
後者についていえば、Java アプレットという形であれば、最近の web ブラウザならどこでも動かせますが、セキュリティの関係で全てのコードが実行できる訳ではありません。もひとつ、web ブラウザで Java アプレットを動かそうとすると、起動までに随分と待たされるという欠点があります(ありました。最近はどうだろう。)。Java アプレットは、JavaScript ほど抵抗なく使える技術ではないわけです。
なお、大抵の Windows PC には、何らかの形で JRE (Java Runtime Environment) がインストールされていることが多いようです。Windows ならある程度野望に近づきます。Mac は分かりませんが。
ここで、この辺の野望*3を実現すべく日夜努力されている、世界中の猛者(というかプロジェクト)を少し探してみたので、紹介しましょう。
Java VM マクロアセンブラ
野望に直接貢献するわけではありませんが、これからのプログラマは、かつてのプログラマが M68000 や x86、Z80、6502 (古すぎ)のアセンブラを知らないと世の中を渡っていけなかったのと同様に、Java VM のニーモニック(?)くらい理解していないと時代に取り残されます。この意味で、Java VM マクロアセンブラは必携のツールとなるでしょう。(← ならないと思う)
- 参考: judoscript.com
Jython
世の中で、スクリプト言語界の最右翼といえば Python ですが(多数の異論あり)、私がこれから勉強するであろう Jython をもってすれば、もはや世界の計算機が Java VM しか解さなくなっても生き残れます。あ、これから私も勉強するところなので、突っ込まないでください。
C → JVM コンパイラ
世の中には、私と野望を共にし、いつか世の中が Java VM で席巻されても C 言語だけは使えるようにしたい、と考えられている猛者があったようです。これです。
最近、「Wikipedia の言うことは当てにならないよ。レポートの参考文献に加えたら、朱入れて突き返されたよ」という事例もあるようですが、まだまだ健在です。Wikipedia 頑張れ*4。
JavaScript で実装された Java VM
いま拙者が探しているのはこれだ。Java にはマルチスレッドの環境があるから、これを JavaScript で実装するのは少し辛いかも知れないが、上にも書いたようにマ○オを JavaScript で実装してしまう強者もあることだし、なんとかなるでしょう、きっと。たぶん。
実際、これがあると、極端なことを言えば Python で書かれたコードを web ブラウザ上の JavaScript で走らせることができる訳です、理論的には。C で書かれたコードを web ブラウザ上で走らせることもできるぞ。やはり、計算機のローカル資源には自由にアクセスできないけどね。
というわけで、この野望について何か参考になる情報があったら、私に是非教えてください。よろしくお願いいたします。私はというと、野望実現の日まで、いつか Jython を勉強してみたいと思っています。あ、あと Java VM にニーモニックも勉強しなくては。
*1:エルバート・ハバード曰く: The world is moving so fast now-a-days that the man who says it can't be done is generally interrupted by someone doing it. だそうなので、もう誰かに実現されてしまっているかも。
*2:ちなみに欠点は、計算機上で最速で動かすのは無理ということです。でも、良いんじゃないか? MMU にしても VM (Xen とか VMware とか)にしても JavaScript にしても、いまや計算機でプログラムを最高速に動かさなくても満足している人は大勢いる訳だし。
*3:妄想じゃなかったのか?
*4:Wikipedia が信用ならないといって、じゃあ大辞典なら信用できるのか? かつて歌人齋藤茂吉は「辞林ごときを見て何を言うか」と相手を論破した。