コンパイラ作成(9) 色々整理
ここまで無計画にコンパイラを作成してきたけど、ここらでちょっと整理するよ。まずは開発環境。
~/myc$ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.2 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.2 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic ~/myc$ ruby -v ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu] ~/myc$ clang-5.0 -v clang version 5.0.1-4 (tags/RELEASE_501/final) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0 Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/8 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.3.0 Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0 Candidate multilib: .;@m64 Selected multilib: .;@m64 ~/myc$
Ubuntu上で開発してる。開発言語はRuby。補助的にclangも使ってる。組み込み関数の実態を作ったり、mycで出力したアセンブリコードをアセンブル、リンクするのにも使ってるよ。あとこれが一番大きいんだけどmycで出力するコードの参考資料としても使ってる。
次はコンパイルターゲット。今回は素直にx86_64のコードを吐くようにした。llvmに対応したコードを出力するのもちょっと考えたよ。最適化とかを考えるとllvmの方が良いんだろうけどね。それとクロスコンパイラにしてcaslのコードにするのも一瞬考えたよ。x86_64版がある程度出来上がったら挑戦してみようかな。
で、最後にmycの言語仕様だけど、これは今のところ定まってないよ。C言語のサブセットでちょっとしたプログラムが作れるくらいにはしたいなあ。それと出力するアセンブリコードについてはちゃんと動けばOKとする。最適化は考慮しないよ。