ブログ「サイバー少年」

ブログ「サイバー少年」へようこそ!
小学六年生ごろからプログラミングを趣味にしている高校生のブログです。
勉強したことについての記事などを書いています。フリーソフトも制作、公開しています。
(当ブログについて詳しくは「ブログ概要紹介」を参照)

サイバー少年が作ったフリーソフトは「サイバー少年の作品展示場」へ

ILの言語開発おもしろそう、ところでILの仕組みが凄い

プログラミング言語を開発するのは、かなり難しいことですが、ロマンがあります。

夢のまた夢なんですが、私も「言語開発やってみたいな~」と思うことがあります。

しかし、ネイティブの言語よりも、私はC#やVB.NETのほうが馴染みがあるものですから、

ILの言語開発というのが憧れます。

特に、.NET Frameworkを思う存分扱える、MSILの言語開発が便利そうですね。

しかし、MSILにしてしまうとマルチプラットフォームには出来ませんから考えものです。


と言うのは別として、
それにしても最近、.NETの仕組みを少し見ていたのですが、面白い仕組みですよ。

基本はソフトウェアで仮想のCPUを作るという、エミュレータ的な発想です。

実際のCPUに忠実で、MSILの機械語、MSILのアセンブリ言語などがあります。

プッシュ、ポップ、加算命令、乗除算などのアセンブリ言語の命令があり、
さらに、インスタンスを生成するの命令がありますので、
オブジェクト指向言語を想定したCPUということになります。

C#などをコンパイルすると、
MSILの機械語orアセンブリ言語になりますから、
C#は仮想CPUから見たC言語みたいな存在なんですね。

また、そんなエミュレータ的なことをやっていると、実行速度が遅くなるんじゃないかと思われますが、
実行速度を早くするために色んな技術を使っています。
(頑張っても結局、実際のCPUネイティブよりは遅くなってしまうのですが)


ILって凄いです。

私には言語開発なんて到底不可能ですが、いつかはやってみたいですね。

tag:

コメント

仮想マシン(VM)で動作させているという意味でも

本当にJavaとそっくりな言語だと思いますね。

仮想スタックマシンは作ったことがあるのですが、

そこまで難易度も高くなく、かつ面白いので

やってみることをおすすめします。

  • 2013/01/19(土) 17:28:51 |
  • URL |
  • wisdom103 #-
  • [ 編集 ]

Re: wisdom103

確かにJavaのパクリと言われても仕方がないですね(笑)
ただ、.NETはILという規格の拡張をしたのに対し、Java VMは独自ですから、そこはJavaのほうが劣りますね…なんて話はまた記事に書くことにしましょう。

仮想スタックマシンですか、(カソウスタックマシン??)
基本からやるにはそこからですね。
私は、コードをC#に変換して出力する、なんちゃて言語からやってみたいと思います。

Javaとかは、.java→.class→[JVM]→ネイティブという流れですからね。
JVMも.NETみたいにJava以外の言語に対応してくれればいいのに。そうしたらあらゆる言語で作れてあらゆる環境で動くというすんばらしい環境が手に入るのですが…
言語作るならインタプリタしか自分は無理ですね。BrainF*ckあたりめちゃ簡単なので…

Re: yykimoto

そうですよね。
仕組み的にはJavaも多言語開発が可能なのかも知れませんが、実際Javaしか対応していませんからね。
多言語開発の面では.NETのほうが優れているのに注目されない.NET Framework…。
MSが独占していますからね。

JVMで動く言語は他にもあるみたいですよ
Ruby(JRubyという)とかが動くらしいです
公式ではないようですが…

  • 2016/06/21(火) 23:10:57 |
  • URL |
  • 表記なし #-
  • [ 編集 ]

Re:

なんとも懐かしい記事だ…。
というか書いたの覚えてないですね。

まあ、CLIほど色々な言語が並列にメジャーになっているわけではないですけど、Javaも多少は各言語取り揃えているようですね~。
JRubyとか、Scalaとかが有名みたいですね。
ちなみにRubyは.NETでは非公式でIronRubyというのがあるようです。

コメントの投稿

トラックバック

トラックバック URL
http://cyberboy6.blog.fc2.com/tb.php/227-49833fe7
この記事にトラックバックする(FC2ブログユーザー)

当ブログをご利用(閲覧等)になる場合は必ず「当ブログの利用規定」をお守りください。