Source code Reading の理想と現実
Menu Menu
情報工学科の授業の一貫として行ってます
学部向け コンパイラ構成論 大学院向け Advance Software研究室でも、うちのソフトを読んだり、必要なものを読んだり
読み会の目的
大規模ソースコードの書き方を知る使われているソフトウェア技術
デザインパターン
コード生成
構成管理
改良
バグ取り
他のものを作る時の参考にする
学生の教育
先輩の凄さをみせつける
大きなソースコードでもビビらないようにする
研究室内での引き継ぎ
これまでの実績
JVM C 読んだのは KaffePostgresSQL C コメントが丁寧
MySQL C++ ダメなコードほど動くし速い
Linux Kernel C 最近、C++も。マクロを最近多用するようになった
assemblerGCC C 巨大なCを生成する。md の記述がS式
LLVM C++
Cassandra java で書れた分散KVS
xv6 Kernel C 教育的
assemblerHadoop java HDFSと組
Squeak C SmalltalkのVM記述からCを生成
Haskell Haskellで書かれている デバッグ不可能
system-FCの解説を読んだTensorflow C++ Python OS X上でちゃんと動いていなかった
Spark Scala Classの継承が深い。とても。
pypy Python 動かし方が難しい
java script engine C C++ いろんなものが
Rails Ruby
gdb C
docker golang
tightVNCViewer Java
TreeVNCの元ネタBIND9 C
MongoDB C mmapを使った木構造DB
読み会の流れ
読むコードを決めるbuildする
実行方法を調べる
デバッカーから実行を追う
ソースコードツリーを調べる
トレースする
読むコードを決める
出てこない 商用でソースがない 最新のソースコードを手に入れる Stable release ではダメ
buildする
debug用に できればVMにする (再現性が高い) 生成されるコードもあるのでbuildは必須
実行方法を調べる
サンプルプログラムを探す ミニマム
デバッカーから実行を追う
Break point をかける どこにかけるかを調べる
ソースコードツリーを調べる
どんなファイルがあるかを調べる そのソフトウェアの構成要素を調べる
トレースする
Stack Trace を記録する 使われているオブジェクトの中身を調べる
形式
2-3日連続して
毎週少しずつはだめ合宿
読み会よりも書き会が良い?
ネット中継する USTREAM Producer
音声が聞き取りにくい めんどくさい経過をWikiに書いておくので十分?
どんな様子?
デバッカーの使い方
bc
s
n
up/down
x
p
l
lldb/gdb で結構違う
thrread list breakpoint delete
binary debug
disass
最適化で消えた変数を探す
関数自体がないことも
最適化を切る
Linux Kernel は最適化を切ると動かない debugするところだけ切る
conditional break point
watch point
stack trace
bt
attach
学生をリモートコントロール
画面上の操作は学生にやってもらいます手を動かさないと覚えない
ソースコードツリーの探索
InteliJ/ecripse
find usage go to implemantation 画面分割方法 4K対応のIDEが必須 fontの大きさを簡単に買えられる
Unix command で
grep
find
cc -E
ls
vi
emacsいいけど、ソースコード変更するな
tags は grepと同程度で いまいち。 はまればvimで便利
documentation
コードだけなくドキュメントも読むRFC
TreeVNC/RFB Protocol
in source tree document
API Document
画面共有
TreeVNCマルチウィンドウ
成功例
GCCとLLVMの改良ができるようになったCassandraを読んで独自のデータベースJungleを作成した
TreeVNC
失敗例
ちゃんと動かすことができなかった Tensorflowデバッグ環境を作れなかった Linuxのリモートデバッグ
VMで可能になったトレース方法がわからなかった Haskell
BINDは難しい 小さいのがあったので、それが良かったかも
Linux kernelよりはx.v6?
理想
参加した人がプログラムの構造を理解していじれるようになる詳しい人がいる
読み会やったことがある人がいる
みんなのやる気がある
現実
失敗も多い準備不足
動いてないと当日わかる
20人中5人しかついていけない
授業だから
ついてこれない人をどうするお立ち台が良いが
今後
しつこく続けるゲストを呼ぶ
書いた人を追求する
なんかアイデアある?
これ読んだほうが良いとかPostgressQLはおすすめ
実際に読んでみよう
xv6アドバンスドソフトウェア2015ソース読み会 xv6 LLVM