投稿者 魔界の仮面弁士  (社会人) 投稿日時 2008/11/18 01:40:16
> それでも仮に挑戦するとしたら、知識としては何が必要なのでしょう。
> また、技術としてはどれぐらいのことができるようであればよいのでしょう。

知識/技術というか、開発してくれる同志を集める力が必要かな…?
すべてを自分一人で組むつもりならば別ですけれども。

まぁ、それはともかくとして:

まずは、CLI の仕様を把握せねばなりません。それを記した
ECMA-335 は英語ですが、これを理解せねば先に進めません。

日本語化された "JIS X 3016" もありますが、こちらは有料です。
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3016%3A2006&dantaiCd=JIS&status=1&pageNo=1
ただし下記で "X3016" と検索することで、閲覧専用のPDFを見る事ができます。
http://www.jisc.go.jp/app/JPS/JPSO0020.html


また、Windows API に関する造詣もあった方が良いかと思います。
先述した MSDN オフラインセミナーによると、.NET Framework のクラス実装は、
Windows API をカプセル化したものであるため、各種 Windows API を
その環境向けに実装してやるのが、実現への近道となるそうです。
(可能であれば、先述のセミナーのWeb配信を参照してみてください)

その他の参考資料としては、先に示した Shared Source CLI のソースが
強力な資料になるかと思います。(sscli20\clr\src)
このソースは C# で書かれていますが、C# では表現できない部分においては、
C++ で記述されています。(たとえば、sscli20\clr\src\ecall.cpp など)


> コンパイラだとかCPUを自作できるぐらいの腕はやはり必要なのでしょうか。
我々が作成するアプリは、VB や C# にて記述しますよね。
生のIL(中間言語)を直接書くわけではありませんから、少なくとも
それらを IL に変換するためのコンパイラを作らねばなりません。


> 携帯の中身について知りませんがやはりPCと同じようにCPUがあるのでしょうし。
IL は、高級言語(VBなど)のソースコードと機械語の中間に位置する物であり、
CPU 別に用意しなければなりません。実際、.NET Compact Framework 2.0 でも
それぞれのCPU アーキテクチャ向けに、ARMv4、MIPSII、MipsIV、SH4、X86 とで
別のファイルとして用意されています。

ただし携帯電話では ARM が使われる事が多いので、最終的な機械語は、
ARM アーキテクチャ向けに組まれていくことになるでしょう。

あるいは CLI を、他のフレームワーク(Java や BREW など) の上に
実装するという手もあります。BREW はライセンス面がハードルになりますが…。



> VBそのものとはいかなくてもVBの作法を踏襲したような何か
> そんな言語を開発するなんていうことは可能なのでしょうか。
VB の前身である BASIC 言語でさえ、コンパイラ(あるいはインタプリタ)の
作成にはそれなりの手間がかかります。簡単な事ではありませんが、
リスナーさんの頑張り次第では可能かも知れません。

ただそのためには、VB 以外の言語にも触れておいた方が良いかと思います。
http://ja.wikipedia.org/wiki/Hello_world%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%B8%80%E8%A6%A7

そしてせっかく言語を作成するなら、『チューリング完全』にすべきでしょう。
http://ja.wikipedia.org/wiki/Hello_world%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E4%B8%80%E8%A6%A7

もちろん VB もチューリング完全ではありますが、いきなり VB ソースコードの
字句解析を作りこむのは難易度が高いので、まずは実用性を無視して、
Brainfuck 言語などの実装が簡単なコンパイラ作成から試してみては如何でしょう。


> 何らかの言語の開発に強い関心を持ったもので、
携帯用という点は抜きにして、言語の作成に興味があるのであれば、
System.Reflection.Emit とか、System.CodeDom 名前空間のクラスを
調べてみると、面白いかと思いますよ。