この記事は,FUN part2 Advent Calendar 2019の20日目の記事です.
昨日の記事は,VBHを触ってみたでした.

コンパイラセルフホストしてみたかった話

みなさんは,コンパイラを書こうとしたことが,ありますか?
もちろん,書いたことがありますよね?という,煽り文句でも,言いたかったのですが,見事に締め切り駆動開発に失敗しました.(やるべきことやパートナーとのあれこれで精神と時間を消費しまくって,何もできなかった.)
今年の春から,一応ちょこちょこ書いていて,このタイミングで,一気に頑張ってセルフホストまでたどり着けねーかなと,思ったんですがね.これからも,ちょっとづつ書いていつかは,セルフホストできるようにがんばります.
ちなみに,セルフホストっていうのは,自分で書いたコードで自分の書いたコードの実行バイナリを生成できるようになることで,よく言われる自作コンパイラの目標です.
正直,セルフホストまでできていないので,この話は,あまり言うことがありません.最後に,記録的に今どんなことができるか書いておこうかな・・・

テック系Podcast

さて,ここからが本題になるのですが,みなさんは,技術系の情報を集めるときには,何を使っていますか?
Twitter, RSS, YouTube, メーリングリストなどなど様々あるとは思います.
そこで,タイトルにもある通り,ここで僕がおすすめしたいのは,Podcastです.もし,一回も聞いたことがない人は,この機会に是非聞いてみてください!
もう,使ってるよっていう人には,この記事の価値が無いかもしれません.

Podcastとは,

簡単に言うと,ボイスブログのようなもので.ラジオ感覚で聞くことができます.様々な人が様々なテーマで,配信しているので,この段階で気になった人はiOSのデフォルトアプリであるPodcastなど(Androidでもそういったアプリがあると思います.)で,適当に検索してみて,いろいろ聞いてみると面白いかもしれません.

Podcastのここがいい

なぜ,僕がPodcastをおすすめするかというと,

  • Inputに耳さえあればいい
  • 普段アンテナを張っていない領域の情報が入ってくる
  • BGMに最強(個人差あり)

この辺が大きな推しポイントですかね. Podcastは,いろんなゲストを呼んでいる会があったり,その人たちが感じたことをつらつらとお話していることが多いので,自分からは,わざわざ探しにいかないような情報が飛び込んでくることが多いです.前半にちょっとお話した,自作コンパイラのこともPodcastを聞いていたことで知ることができました.雑に,いろんな情報を聞くことができるので,本当に楽しいです.
あとは,情報だけじゃなくて,ラジオのように聞くことができるので,なにか作業しながらでも,簡単に聞くことができます.僕みたいな人たぶん一定層いると思うのですが,音楽よりも人の話し声みたいなのが一番落ち着くBGMだと思っている人にもおすすめです.上位のPodcastだとかなり,音質を気にして録音しているみたいで,かなり落ち着いて,聞くことができます.肝心の情報をあまり聞かずにただただ流していることも多いです.
英語のPodcastを聞いて,無料のスピードラーニングみたいな使い方をしたりもしてますね.

おすすめタイトル

僕がよく聞く,Podcastを簡単に紹介したいと思います.

推しておいて,あまり多くのタイトルを聞いていないのですが,僕がよく聞く,好きなPodcastを簡単に紹介します.

Turing Complete FM

Turing Complete FMは,僕が個人的に一番好きなPodcastです.残念ながら,2018年10月1日の更新を最後に止まってしまっています.僕が,自作コンパイラというものを知る切っ掛けになったPodcastです.
Googleのエンジニアでlldというリンカのオリジナル作者である@rui314が配信しているPodcastで,毎回様々なゲストを呼んで技術のお話を色々としている.技術の領域としては,いわゆる低レイヤのお話が多いですね.ゲストには,界隈では,有名なるくすさんやhikaliumさんなどが来ていて,とても楽しいお話が聞けます.

Rebuild FM

Rebuild FMは,テック系Podcast聞いている人なら知らない人はいないであろう,テック系で一番有名なPodcastだと思います.最新話は,255話ということでかなり活発に更新がされています.このPodcastも,ゲストが来て対談形式でいろいろなことを話すPodcastになっていて,飽きの来ないものになっています.このPodcastでは,プログラミングのような技術の話もありますが,ガジェットなど技術に限らず世の中のトレンドが話のテーマになっていることも多いので,かなり聞きやすくて,Podcast初心者におすすめです.また,ゲストに来る人もすごく話の面白い方ばかりなのでぜひ聞いてほしいです.特にNさんの回は,どの回でも思わず聞きながら笑ってしまいます(直近のNさん回はこれ)

Fukabori.fm

Fukabori.fmは,NTTコミュニケーションズのiwashiさんさんがメインで配信しているPodcastです.こちらもゲストを呼んで対談形式で,行っています.テーマとしては,アジャイルやチーム開発のことが多めです.なかなか,チームの運用みたいなお話は聞く機会があまりないので,とても新鮮な情報を聞くことができると思います.

ゆるふわPodcast

ゆるふわPodcastは,北海道出身のエンジニアによるPodcastです.このPodcastでは,3人の北海道出身のエンジニアが技術のことを語りつつ,近況をいろいろ話すみたいな内容になっています.同郷であったり,比較的歳が近いのかなあという感じで,謎の親近感を感じながら楽しく聞いています.

最後に

最後のほうの紹介は,ちょっと力尽きてしまった感がありますが,どのPodcastも一押しです!ぜひ,聞いてみてください.身の回りで「最新のRebuild聞いた?」みたいな会話ができる人が増えることを楽しみにしています. 以上,@kmdkukの「テック系Podcastのススメ」でした. 明日は,FUN part2 Advent Calendar 2019の記事は,akashi_akatsukiさんの記事です.

見なくていいよ

最後の最後に@kmdkukの自作コンパイラがどんな進捗か,記録しておきます.
ソースコードはここ
ちなみにこういうことに興味ある人は,TuringCompleteFM聞いて,@rui314さんの低レイヤを知りたい人のためのCコンパイラ作成入門を読もう!!

こんなもの作ってます.

こんなものをプログラムに渡すと,

main(){
  return 5 + 6 * 7;
}

こんな出力をするプログラムを書いています.

.intel_syntax noprefix
.global main
main:
  push rbp
  mov rbp, rsp
  sub rsp, 0
  push 5
  push 6
  push 7
  pop rdi
  pop rax
  mul rdi
  push rax
  pop rdi
  pop rax
  add rax, rdi
  push rax
  pop rax
  mov rsp, rbp
  pop rbp
  ret

このアセンブラを実行すると,ちゃんと47がリターンされていることが確認できます. どうやってんのみたいな話は,さっき上に上げたruiさんのページを見るといいです. わかるように解説できるほど,練度がありません;;

現状できること

四則演算

↑で例に上げたようなもの,ちゃんと演算子の順序を考えて,やってたり.

変数定義

まだ,スコープとかが存在しないけど,

main(){
  aBc = 3;
  Xyz = 5 * 6 - 8;
  return aBc + Xyz /2;
}

こんな感じのコードがコンパイルできる.

関数呼び出し

別でコンパイルしたオブジェクトファイルから,関数の呼び出しができます.

int plus(int x, int y) {
  return x + y;
}

こんな感じのCをコンパイルしたオブジェクトファイルと一緒に,

main(){
  a = 3;
  b = 4;
  return plus(a + b, b);
}

これをコンパイルして実行すると,7が帰ってくる.

関数定義

外部の関数呼び出しだけじゃなくて,ちゃんと中で関数定義ができる.

bar(a){
  return a;
}

main(){
  return bar(3);
}

比較演算子

あとは,ifとかの制御構文が無いので,意味ないんだけど,

main(){
  return 1==1;
}

trueなら1が,falseなら0が返ってきます.もちろん!=も実装済み

今後

型が,intしかなかったり,制御構文がなくて,ループとか分岐とかできないので正直まだまだ,,,
ここで,セルフホストした報告ができるといいな.コツコツ大事