「低レイヤを知りたい人のためのCコンパイラ作成入門」挫折体験まとめ

2022年セキュリティ・キャンプ Cコンパイラゼミの講師をやる上で知っておきたかったので収集
10
ぶんぶん @adoring_onion

「低レイヤを知りたい人のためのCコンパイラ」はC言語知ってること前提で進むから、結局C言語そのものが分からなくて詰まる

2020-05-08 00:51:41
orumin @orumin

とりあえず C の基礎の文法わかってる人には godbolt.org を教えて色々なコードがどう翻訳されるのか、呼び出し規約でどうコードが変わるのかとかやるといいと思っているんですが、godbolt で自分で色々やって読んでみるためのアセンブラの読み方の bootstrap みたいなのは別個要るよね…

2021-04-25 17:33:01
はすじょい (hsjoihs) @hsjoihs

@kotatsu_mi 「低レイヤを知りたい人のためのCコンパイラ作成入門」がわりとそこを埋めようと頑張っていた気はしますが、とはいえもうちょい言葉を尽くした説明もあった方が教育的なのかもですねぇ sigbus.info/compilerbook

2021-04-25 17:34:52
orumin @orumin

@hsjoihs たぶん Rui 先生のこれを与えて自学できる人にはあれこれこちらが手を尽すよりそれで自分のペースでのびのびやってもらったほうが良さそうだけれど、これを読んでもらってつまづくようならそういう人向けにギャップを埋める何かもあると丁度良いのかも。

2021-04-25 17:36:11
はすじょい (hsjoihs) @hsjoihs

【募集】 「低レイヤを知りたい人のためのCコンパイラ作成入門」sigbus.info/compilerbook をやろうとしたけれど、途中で飽きた・挫折した、というご意見をお寄せ下さい。 寄せられた意見の例 ・「関数定義で詰まった」 ・「編集途中っぽいから、仕上がったあとにまた今度やろう」と考えそのまま放置

2022-05-04 17:40:12
uta8a @uta8a

twitter.com/hsjoihs/status… 個人的な失敗談なのでちょっと恥ずかしいですが正直に書きます。 - 2019/9にstep8: ファイル分割までやってフェードアウト - 2021/10にstep7: 比較演算子までやってフェードアウト - 2022/2にstep11: return文までRustでやって今もやる気はある みたいな状態です

2022-05-04 20:52:13
uta8a @uta8a

大きくまとめると僕が挫折した理由は「気合が足りない」「一緒にやる人がいなくてペースメーカーがない」「フィボナッチを動かすまでが遠く感じた」「セルフホストという壮大な目標までのロードマップがなさそうで途中から先を見通して諦めてしまう」あたりでした。

2022-05-04 20:52:14
uta8a @uta8a

気合、ペースメーカーに関しては現在解決しています。セキュリティミニキャンプ2021のCコンパイラブック輪読会の皆さんの影響が大きくて今やる気があるのはほとんどそこの方々の様子を見ているところから来ています。

2022-05-04 20:52:14
uta8a @uta8a

フィボナッチについては、過去にLLVMを使って自作言語を作ったときにフィボナッチが動いて感動したところからそこが個人的な目標で、ここまで辿り着くのにstepがちょっと多く辛いなと感じてしまいました。

2022-05-04 20:52:15
uta8a @uta8a

ロードマップについては、 alignof.github.io/blog/posts/roa… この記事で解消されました。 この記事を知る以前はちょっと進んで、「これこの先めちゃくちゃ自力で頑張る必要があるのでは?まだ僕には早い?」みたいな気持ちになって挫けてしまいました 以上です!長文すみません

2022-05-04 20:52:15
uta8a @uta8a

2019/10: github.com/uta8a/compiler… 2021/10: private repo 2022/2~現在: github.com/dhivelopers/r9… リポジトリです

2022-05-04 20:54:03
kizuna @k1_zuna

分割コンパイルの所で分け方の詳細が分からなくて、とりあえず分けてみたらエラー出てそれを5回ほど繰り返して萎えて辞めた記憶あります。 twitter.com/hsjoihs/status…

2022-05-04 20:57:35
kizuna @k1_zuna

また、それまではあったリファレンス実装がなかったのも影響してます。自分は答え見て、どのような処理をしているか把握するという勉強法で今まで取り組んで来たので、理解しづらかったです。

2022-05-04 20:58:05
dhue @dhue_no_tweet

一番しょぼい挫折体験かもしれない。 「特にGitHubにアップロードする積極的な理由はないのですが、アップロードしない理由もないですし」と書かれた箇所に行き当たり、GitHubやっておらず世界に公開するメールアドレスを持っていないので、新たにGitHubアカウントを開設する動機も持てずに挫折した。 twitter.com/hsjoihs/status…

2022-05-04 21:03:17
mutax @RMT_xxx

自分の場合は、以下で挫折して初めからやり直そうとしてます。 ・Better CとしてC++で書いていて、セルフホストのためにリセットしてCで書き直したかった。 ・型の取り扱いが難しかった。(サイズの違う型どうしの計算とか) twitter.com/hsjoihs/status…

2022-05-05 00:57:20
【移住済み】happo31【readonly】 @hapo31_t

@hsjoihs 3年ほど前に挑戦したときは「ステップ19: ポインタの加算と減算を実装する」で躓きました と思っていたんですが、今具体的に何で詰まっていたのか確認しようと当時のリポジトリを見に行ったら、なんとテストコードのほうが間違っていた説が浮上しました (みたいな内容でも大丈夫だろうか…)

2022-05-05 17:11:19
ω・`)にべべb @2bbb

思い出したけどmacしか持ってないってところで挫折したんだな… dockerで頑張れるのかもだけど…

2022-05-05 17:30:10
dshin @dshin78174430

sizeofまで実装しましたが、配列で詰まってやめました。 github.com/dshintani404/0… twitter.com/hsjoihs/status…

2022-05-06 23:11:14

著者である Rui さん曰く

Rui Ueyama @rui314

Cコンパイラを作るのを挫折している人は単にソースコードを読んでない気がする。本がお題でコードが答えというクイズみたいな構成ではなく、コードが本文でその解説が本です。どちらかしか読まないならむしろコードだけ読んだほうがいいです。 github.com/rui314/chibicc

2022-05-05 18:10:31
Rui Ueyama @rui314

コードの書き方を学ぶにはコードを読むのがいい、という話。

2022-05-05 18:11:59
Rui Ueyama @rui314

無論それだけがありえる問題というわけではなくて、単にCプログラミングに慣れてないというのもよくあるのだろうけど(もしそうならなおさらコードを最初から見たほうがいいのではという)。

2022-05-05 18:43:22