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