HN公開:Spray - 17歳が6か月を投じて開発したCデバッガ
(github.com/d4ckard)- SprayはCコード向けの小型デバッガで、機能をシンプルで理解しやすいものに保ちながら、実行中のプログラムを制御し、状態を検査・変更するためのツール
- 対応機能は、関数・ファイル行・アドレス基準のブレークポイント、変数・アドレスメモリ・レジスタの出力と設定、Cのシンタックスハイライト、バックトレース、命令・関数・行単位のステップ実行、コマンド出力のフォーマットフィルタ
- REPLコマンドは
print/set、break/delete、continue、next、step、leave、inst、backtraceで、実行制御と値の読み書きを行う printとsetの後ろにはパイプ(|)でフィルタを付けられ、dec、hex、addr、bits、bytes、deref/*によって同じ64ビット値を別形式で表示したり、アドレスの逆参照を行ったりできる- ビルドには CHICKEN Scheme と libdwarf が必要で、サブモジュールまでクローンした後に
makeを実行すると、buildディレクトリにsprayバイナリが生成される - デバッグ対象のバイナリは
-gフラグでデバッグ情報を含めてコンパイルする必要があり、最良の出力を得るには最適化を無効にする必要がある - SprayはClangでのみテストされており、コンパイラごとに同じコードのデバッグ情報生成方法が異なるため、Sprayでデバッグするプログラムは
clangでコンパイルする必要がある - ロードマップには、複合構造体の出力・変更、複合構造体のシンタックスハイライト、フレームポインタではなくDWARFベースのバックトレース、インライン関数、外部ライブラリの読み込み、デバッグ対象プログラムに送信されたシグナルの捕捉が残っている
1件のコメント
Hacker News のコメント
特にクリーンで一貫性があり、モジュール化もしっかりしていて、バイナリ形式やカーネル API に関するかなり深い知識が必要な問題を扱っている
多くの「シニア」プログラマでさえ、こういうものを概念レベルですら作るのは難しいだろうし、「最近の若者は…」の正反対だと思う
どうやって17歳でこのレベルの知識を身につけたのか気になる。本、同年代の仲間、プログラミング部、プログラマの親などがきっかけなのだろうか?
純粋な好奇心と、必要なハードウェアに「ただアクセスできる」という大きな条件、そして少しの本や雑誌だけでも、かなり遠くまで行ける
両親はプログラマではなかったが、父が1984年に早くからコンピュータを買ってくれて、後には職場経由で TurboPascal や C++ のようなコンパイラを家に持ち帰り、実験させてくれた
主に雑誌と本で学び、後にはデモ制作をしていた同年代の人たちと少し交流し、文書入りのディスク(https://fr.wikipedia.org/wiki/DP_Tool_Club)を郵送で買ったこともあった。たとえば https://en.wikipedia.org/wiki/Ralf_Brown%27s_Interrupt_List のような資料だった
小さなものを作りながら段階的に繰り返し、CGA 向けのウィンドウツールキット、Tetris クローン、Bomberman クローン、FFT ソフトウェアを経て、最終的には FPU なしでソフトウェアだけによる Phong レンダリングのような リアルタイム 3D レンダリングまで作るようになった(https://github.com/thbar/demomaking#obez-1995)
デモ制作の世界で同じことをしていたほかの10代とも偶然出会ったので、自分が完全に孤立した特異な例だったわけではない
今の時代なら、好奇心のある子どもは、その好奇心さえうまく伸ばしてもらえれば、もっとずっと先まで行けると思う
そして予想どおり、父はコンピュータ科学者だ
本当にすごい子はいるものだ。自分はその年齢のとき、C++ を学んで挫折して泣いていた
すごい。若い頃の自分にもこのくらいの献身があればよかったのにと思う
Google Summer of Code、KDE Season of Code、Linux Foundation LFX、X.org EVoC のようなプログラムに参加してみることを勧める
解く価値のある面白い問題がたくさんある。学生のときにこういうものを知っていればよかったが、今はフルタイムで働いていてオープンソースに貢献する時間がない
このまま頑張ってほしい
プロジェクトをざっと見てみたが、よく整理されているように見える。素晴らしい
どれくらい長くプログラミングをしていて、どの言語から始めたのか気になる。何十年も年上の開発者の中にも、いまだにMakefileを使えない人をかなり知っている[1]
ソース中のインライン絵文字にはどんな意図があるのかも気になる。最近のクールな子たちはみんなそうしているのか、それとも ASCII 以外の入力を意識させるためなのか?
[1]: 動的に生成されるターゲットを使う、あるいは理解できる人はもっと少ない
絵文字は1週間くらいやっていたちょっとした冗談みたいなものだった。Rust の界隈では絵文字をもっとよく見かける気がする。わざわざ消しはしなかった
PID の周りの虫の絵文字は面白いと思う。コメント中のものはいつか消えるかもしれない。ただ、今のところエディタの問題はなく、Helix、Emacs、VSCode のどれでもちゃんと動いている
ターミナルの色が無効なら、REPL で標準出力に絵文字を出すのも一緒に無効化すべきか考えている
おめでとう、そしてプロジェクトの幸運を祈る
コンパイラは、自分がコンピューティングに興味を持つきっかけになった最初の深掘り対象のひとつだった
何度も繰り返し読んだ本のひとつが今では無料公開されていて、デバッグではなくコンパイラ寄りではあるが、読むもののリストに入れる価値はあるかもしれない
「Compiler Design in C」
https://holub.com/compiler/
少し古い本だが、興味深いかもしれない
残念ながら、多くの本はあまりに象牙の塔的すぎることがある
17歳でこれだけの知識と成熟度があるのはとても印象的だ
扱って実験しているテーマは学部レベルで期待される内容で、その中でもこのプロジェクトは大学院の授業レベルに近い
敬意を表したいし、成功するキャリアを願っている
数年後でもまだ若い技術愛好家だろうし、その頃にはさらに印象的なプロジェクトを成し遂げている可能性が高い
その時点では、この年齢でどれだけ先を行っていたかはあまり知られなくなっているかもしれない。20代で始めても印象的なことをする賢い人はいるし、同じ年齢になれば大半の観察者には同世代の仲間のように見えるだろうから
それでもこの先行優位は、維持し続けられる不公平な強みになり得る
何年後、あるいは何十年後には、ある種の「秘密兵器」として表れてくるかもしれない
若いプログラマのコードを読むのが好きだ。かなり高いレベルの知識はあるが、まだ何年分もの経験はない状態で、どう全体を設計するのかを見るのが面白い
作者は学習が速い人のように見えるし、6か月の成果としては素晴らしい
17歳の子たちもまだ CD が何か知っているらしい
フロッピーディスクの保存アイコンも、まだ捨てなくていいのかもしれない :P
いいね。自分がその年齢だった頃、Turbo Pascal で実際の描画コードは手で最適化したアセンブリを差し込んで、2D グラフィックライブラリを作っていたのを思い出す
ただ、それはインターネットを知る前だったので、作るのは楽しかったが、どこにも使われない個人プロジェクトで終わった
個人プロジェクトを、他の人が見て、ひょっとすると実際に使えるものへと発展させる次の段階まで進んだのは素晴らしい。全体としてとても整っていて、コメントもよく書かれており、README も明快だ
世に出すのは怖いこともあるが、人が言うことは、とりわけそれがあなた自身についてのものなら、あなたの仕事と同じくらいその人自身のことを表しているのだと覚えておくといい
ついでに言うと、自分はこのプロジェクトよりむしろ Motes のほうに興味があるので、今試してみようと思う :)
Emacs プラグインでは妙な動作があるかもしれない。それでもスクリプトはこの数週間、自分のところでは完璧に動いていた
気に入ってもらえたらうれしい :D
すごい
今夜コードをクローンして見てみるつもりだ
関心分野が近いので、このプロジェクトに貢献してみたい
たいていの箇所にはコメントを残してあるが、全部が役立つかどうかは分からない
デバッガは特に書くのが難しいのに、これはかなり良い