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

muranoyaのブログ

https://github.com/muranoya

インクリメンタルにソフトウェアを作ることについて

大学入学前から,コンパイラには興味があって一度は自分でコンパイラを作ってみたいと思っていた.当時,コンパイラに興味が湧いたのは,.NET言語で開発したアプリケーションの起動の遅さが原因だった.ngen.exeでネイティブコードのキャッシュを生成してもやはり遅い.C/C++で開発されたアプリケーションの起動の早いこと,とても羨ましかった.

そこで思いついたのが,.NET言語をネイティブコンパイルするコンパイラを作ればいい,ということ.今となっては.NETを使ってアプリケーションを開発することはない.Linuxで.NETを使う利点がほぼないから.

コンパイラを作るにはどうしたらいいのかサッパリわからなくて,大学に行けばわかるだろう,と思って入学した.コンパイラの授業は取ったけど理論的な話が中心で実装の話はない.せいぜいYaccとLexを使って四則演算の電卓作るくらい.

そのうち,色々と本を読むうちに,LL構文解析器を自分で書けばいい,それには字句解析器が必要で,とりあえずネイティブコードを吐くのはよくわからんからオレオレスタックマシン向けコードを吐くようにして…ということがわかった.

 

それで本に載っていた簡易的Cコンパイラに手を加えていったのが最初.このコンパイラは,ASTを作らずにいきなりコードを吐いていたので,すぐに行き詰まった.

rui314さんのQiita記事を読んで,フルスクラッチでC99コンパイラを作ろう,と思って作り始めて失敗.原因はいきなりC99完全準拠のコンパイラを作ろうとして,いつまでたっても動かないコードにモチベーションが保てなかったこと.

 

本題のインクリメンタルにソフトウェアを作ること,これはとても大事で,私の場合はコンパイラ製作で身を持って知った.何かを作ろうとするとき,大事なのはモチベーションを維持させることなのだ.知識なんか,モチベーションがあるうちはすぐに吸収していくから問題ない.作ろうと思った瞬間に作り始める,とりあえず動くものを作ってモチベーションを維持しなければ.