読者です 読者をやめる 読者になる 読者になる

muranoyaのブログ

https://github.com/muranoya

CPU,コンパイラ,OSを作りたい

昔からコンパイラとOSは作ってみたいと思っていた.実際コンパイラはいくつか試行錯誤してきたが,目標としているC99完全準拠したものはできていない.

しかし今まで何度か挑戦してきた感じからして,もう少しで出来そうな感触はある.これは@rui314さんの8ccにかなり感化されている.

個人的な興味のテーマとしては,特に目新しくもなく車輪の再開発ではあるが,LRパーサジェネレータを作り,構文解析をすることだ.有名なパーサジェネレータであるYaccはLALR法であり,これはLR構文解析の表をコンパクトにすることでメモリ消費量の削減を行ったものだが,現代のマシンではもはやLR法でよいのではないか,という意見はちらほら聞く.1〜2年前に研究室の先生に,上記のような事を述べたところ,C言語で書くのか?と聞かれ,セルフコンパイルしたいのでそうだ,と答えたところ,それはおすすめしない,セルフコンパイルできればよいのなら,Lisp処理系をC言語で書いてLispでパーサジェネレータを書くべきだ,と言われた.確かにLispが使えればLR構文解析で必要な集合計算は容易になるだろう.そこだけに絞った処理系ということであれば,C言語でも1000行程度あれば良いのではないか,という気もする.

手で書くのであればLL構文解析になるが,今までやってきた感想からいって,やはり面倒である.というのは,C言語の関数ポインタ周りなどを考えるとどうしても面倒だと思ってしまう(実際それほどLLパーサを書くのは難しくは無いと思うのだが…私個人の不勉強もある).

また,OSについては有名な,30日で作る自作OS本など情報は多く取り組みやすいと思う.

さて,ここまできて後は何があれば面白いか?それはやはりCPUであろう.というわけで,FPGAでCPUを作りたい.これについてもいくらか書籍が出ているし,FPGAのボード自体も数万で買えるので問題ないと思っている.どういう命令セットを作るのか,は難しい問題だ.最近良く見るのはゲームボーイスーファミなどのエミュレータを作った,という話であるが,あのあたりのゲームの実行ファイルなどの仕様がどこに転がっているのかよくしらない.そもそも吸いだしたゲームソフト自体はどこで手に入れればよいのだろう.

しかし最も問題なのは英語だ.例えばx86やArmの資料は大部分が英語だ.また,論文を読むにしても結局英語が必要になる.気になる本もいくつかあるが,洋書だ.英語は嫌いではないが,やはり読むのに時間がかかってしまうことなどを考えると読むのがだんだんと億劫になってしまう.最近はGoogle翻訳が良い翻訳結果を出すようになってきたので,とりあえず投げてよくわからない部分は原文を読むのが良いのだろうが….