Source code Reading の理想と現実

Menu Menu


情報工学科の授業の一貫として行ってます

    学部向け   コンパイラ構成論
    大学院向け Advance Software

研究室でも、うちのソフトを読んだり、必要なものを読んだり


読み会の目的

大規模ソースコードの書き方を知る

使われているソフトウェア技術

デザインパターン

コード生成

構成管理

改良

バグ取り

他のものを作る時の参考にする

学生の教育

先輩の凄さをみせつける

大きなソースコードでもビビらないようにする

研究室内での引き継ぎ


これまでの実績

JVM C 読んだのは Kaffe

PostgresSQL C コメントが丁寧

MySQL C++ ダメなコードほど動くし速い

Linux Kernel C 最近、C++も。マクロを最近多用するようになった

   assembler

GCC C 巨大なCを生成する。md の記述がS式

LLVM C++

Cassandra java で書れた分散KVS

xv6 Kernel C 教育的

    assembler

Hadoop 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に書いておくので十分?


どんな様子?


デバッカーの使い方

b

c

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


Shinji KONO / Sat Jul 2 16:34:34 2016