• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
GC本のツクリカタ
 

GC本のツクリカタ

on

  • 3,408 views

 

Statistics

Views

Total Views
3,408
Views on SlideShare
3,365
Embed Views
43

Actions

Likes
5
Downloads
19
Comments
0

2 Embeds 43

http://www.slideshare.net 31
http://coderwall.com 12

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    GC本のツクリカタ GC本のツクリカタ Presentation Transcript

    • GC本のツクリカタ Making of the GC book nari/中村 成洋 ネットワーク応用通信研究所 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 自己紹介
    • 自己紹介 ✓ nari/中村 成洋です ✓ 福岡生まれ、島根在住 ✓ NaCl勤務 2/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 自己紹介 ✓ GC歴 3.5年(駆け出し) ✓ アイス工場歴 3年 ✓ 大体一緒くらい 3/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • アンケート
    • GC本を持っている人? ノシ
    • おお…
    • サインします!!
    • 全部読んだ人? ノシ
    • なんと…
    • 今日お話しする内容!!
    • 注:GC本の内容自体には あまり触れません
    • (が、読んでおかないと分か らない箇所もありそう)
    • 今日話すこと
    • GC本に習って二部構成に しました
    • 今日話すこと ✓ ノーマル編 ✓ ガチムチ編 15/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 今日話すこと ✓ ノーマル編 ✓ GC本のツクリカタ ✓ ガチムチ編 16/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 今日話すこと ✓ ノーマル編 ✓ GC本のツクリカタ ✓ ガチムチ編 17/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ノーマル編
    • GC本のツクリカタ
    • 相川(共著者)さんとの 出会い
    • 3年前、突然のメール
    • 内容 ✓ 大卒の論文でGCのWikiを参考に したそう ✓ GCで有名な京都の方にある研究室(Y 研) ✓ GCLover同士の出会い 22/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • その後 ✓ 院でRubyのGCを研究 ✓ 相川さんが笹田さんにお世話にな る ✓ 回り回ってまたお知り合いに 23/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • GC勉強会 ✓ 毎週Skypeで「GC勉強会」 ✓ GCの論文の話しとか ✓ このとき「G1GC」を題材にしたが 理解できず 24/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 共著のお願い
    • nari「一緒に書きません か?」
    • aikawa「修論が…」
    • 死亡フラグktkr!
    • 卒業できて良かった (つд⊂)エーン
    • 竹内先生(監修者)との出 会い
    • 相川さん=>笹田研=>竹内研 ✓ よく分からないけどこんな感じで お願いできた ✓ 退官される忙しい時期にお願い ✓ 快く了承してもらう 31/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • すべての原稿をレビュー ✓ 特にアルゴリズム編はよく読んで いただいた ✓ 多くの原稿は電車の中で読まれ たそう 32/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ドラクエ7問題 ✓ ドラクエ7がレビュー時期に発売 ✓ 竹内先生はドラクエが好き ✓ 電車の中でプレイ可能な NintendoDS 33/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • あとは言わなくても 分かりますよね!
    • とはいえ遅れなく ✓ さまざま指摘を頂いた ✓ 優しくも厳しい、絶妙 ✓ レビュー結果は真鵺道にて記述 35/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • とっても勉強なりました
    • 最終講義でも「GC本」紹介 してもらいました(;-;)
    • まつもとさん (Ruby作者兼帯職人) との出会い
    • 会社の飲み会終わりに
    • nari「今度、GCの本を書く ことになりました」
    • matz「おお、すごい」
    • nari「GC本の帯をお願いし たいのですが…」
    • matz「いいよー」
    • nari「(´;ω;`)ブワッ」
    • 素晴らしい帯 古(いにしえ)からの魔 法、ガベージコレクショ ンの秘密を完全解説 [「ガベージコレクションのアルゴリズムと実装 − 帯」より 引用] 45/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • その他にもさまざまな出会い ✓ 編集者さん ✓ レビューアのみなさん ✓ Evan Phoenix ✓ 読書会を開いてくれる&来てくれ るみなさん 46/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 出会いの中心にあった『GC 本』
    • 最初は苦難の道のり
    • GC本構想時の反応
    • GC本出すよ! ✓ 誰得ですか? ✓ 私は買いますが、他に誰か買いま すか? 50/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ( ´∀`)つ□ 涙拭けよ
    • GC本の企画自体も通るか微妙 ✓ 編集者さんの力でなんとかしても らった ✓ 「先見の明」がある ✓ 「本ではなく、人を売り出したい」 ✓ 「本は出してみないと結果がわか らない」 52/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • が、おかげさまで好評です。 感謝感謝m(_ _)m
    • なぜここまで好評であった か?
    • たぶん「2つの問題」を 解決しているから
    • 2つの問題とは?
    • 問題点(1)
    • 「若者のGC離れ」 が深刻化
    • ある懇親会での出来事
    • 学生さん「GCに興味がある んですよ」
    • nari「はいはい」
    • 学生さん「GCってどうなっ てるんですか?」
    • nari「えーと、まずルートとい うものが…」
    • また、違う懇親会で
    • 学生さん「GCに興味がある んです」
    • nari「えぇえぇ」
    • 学生さん「コピーGCって保 守的GCなんですか?」
    • nari「えーと、まずルートとい うものが…」
    • これは疲れる!
    • なぜ知らないのか?
    • 原因 ✓ 日本語でGCについて詳細に書か れた本がない ✓ 英語の本はある(RJGC) ✓ アルゴリズムは知っていてもイマ イチ実装と結びついてない 73/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • では、どうすればよいか?
    • 解決策
    • 日本語のGC本を書く!
    • 思い描いたGC本の構想
    • アルゴリズム 3 : 実装 7
    • 理由 ✓ 単純にアルゴリズムを使用する ケースは少ない ✓ RJGCと違うものを 79/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 理由 ✓ いろんな言語処理系のGC実装を 紹介した本は世界的にない ✓ アルゴリズムはGCの一面でしか ない(実装ありき) 80/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 問題の解決は? ✓ 知識の底上げはできた(気がす る) ✓ すくなくとも「GC本読んでください」と 言える! ✓ GCを実装する人が増えてくれ る…といいなぁ 81/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 問題点(2)
    • 初心者向けの 本が多すぎる
    • 見渡せば入門書ばかり ✓ 初めてのXX ✓ XX入門 84/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • もちろん入門書は欲しいけ ど
    • 重複した入門書は欲しくな い
    • 私はもっとガチな本が読み たい!
    • 我々が愛したガチ本 ✓ RHG(Rubyソースコード完全解 説) ✓ ハッカーの楽しみ ✓ Java仮想マシン仕様書 ✓ etc.. 88/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 解決策
    • ガチな本を書こう!
    • GC本の構成 ✓ アルゴリズム編 ✓ 実装編 91/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • こういう構成はあまりない
    •   http://twitter.com/kinaba/status/10027309487
    • 本を書くときのポリシー
    • 逃げない
    • ごまかさない
    • 具体的には ✓ いろんな言語処理系を読んだ ✓ 言語処理系によってGCはさまざま ✓ しんどかった… 97/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 具体的には ✓ なぜこの実装を書いたのか?とい う点を追求 ✓ 泥臭い実装も説明 ✓ DalvikVMとかどうしようと思った。泣け た。 98/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    •   http://twitter.com/miura1729/status/10082548659
    • おかげでガチな内容になっ たと思います m(_ _)m
    • ノーマル編:まとめ
    • ノーマル編:まとめ ✓ GC本で2つの問題を解決 ✓ GCを知らないけど興味がある人 に知識を提供 ✓ 悶々としている人にガチな本を提 供 ✓ マニアックな本でも売れた!! :) 102/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 今日話すこと ✓ ノーマル編 ✓ ガチムチ編 103/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 今日話すこと ✓ ノーマル編 ✓ ガチムチ編 ✓ GCの実装を読むコツ ✓ GCバッドノウハウ集 ✓ まぼろしの目次案 104/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ガチムチ編
    • GCの実装を読むコツ
    • 誰得…orz
    • GCを読む前の準備
    • 前準備(1) ✓ Emacsを使う ✓ Emacs!Emacs!!!! ✓ Emacs!Emacs!!!! 109/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 前準備(2) ✓ GCのアルゴリズムを把握 110/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 前準備(3):3つの「g」 ✓ gdb ✓ 言語処理系自体を動かせる状態に ✓ gtags ✓ 関数の呼び出し箇所を発見できる ✓ git ✓ git grep!! 111/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • すべてEmacs上で使う
    • 前準備(4) ✓ 行数を数えて落ち着く ✓ 言語処理系全体行数、GC行数を見る 113/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 準備後は
    • こんな順番で読んでいく 1. データ構造 2. ヒープ構造&アロケータ 3. GC 115/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • GC三角関係 116/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • データ構造 ✓ オブジェクトがどのような構成に なっているか? ✓ ヘッダはどうなってる? 117/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ヒープ&アロケータ ✓ GCと密接に関係 ✓ GCを切り替えるときはヒープの構 造も切り替わることが多い ✓ それにともなってアロケータも変わ る 118/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • GC ✓ 今までで雰囲気を掴んでいるはず ✓ GCアルゴリズムをイメージしなが ら 119/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • まとめ
    • GC三角関係を意識し 適切な順に読んでいくのが 大事
    • 今日話すこと ✓ ノーマル編 ✓ ガチムチ編 ✓ GCの実装を読むコツ ✓ GCバッドノウハウ集 ✓ まぼろしの目次案 122/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • GCバッドノウハウ集
    • 2つだけ 1. GCの臭い 2. 謎の0xAB 124/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 1. GCの臭い
    • よくあること
    • 「GCに関連する処理を見つ けたいっ!」
    • 「Don't think, FEEL!」
    • ファイル名から嗅ぎ分ける ✓ object.h => データ構造が!! ✓ alloc.c => アロケータ!! ✓ heap.c => ヒープ!! ✓ mark_sweep.c => GC!! 129/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • grepで見つける ✓ gcでgrep => 大抵見つかる ✓ garbage collectionでgrep ✓ garbage collectorでgrep ✓ アルゴリズム名でgrep 130/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 2. 謎の0xAB
    • オブジェクトを割り当て 132/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 前後に謎の0xAB 133/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ナニコレ? 134/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ヒント ✓ デバッグ時のみしか使わない ✓ メモリ系のバグは死ねる 135/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 分かる人いますか?
    • 答え
    • メモリ破壊を検知するため
    • 0xABの正体 ✓ delete時(C++)に0xABをチェック ✓ 0xABのままならOK! ✓ 書き換わってたらメモリ破壊が あった! 139/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • メモリ破壊系のバグはしんどい ✓ どこで書き換わったか見つけるの が難しい ✓ gdbのwatchとか使う? ✓ 良い方法があれば教えてください >< 140/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • その他、気づいた所は本に 書きました
    • 今日話すこと ✓ ノーマル編 ✓ ガチムチ編 ✓ GCの実装を読むコツ ✓ GCバッドノウハウ集 ✓ まぼろしの目次案 142/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • まぼろしの目次案
    • アルゴリズム編で抜けた章 ✓ 並列GC ✓ 並行GC 144/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 実装編で抜けた章 ✓ HotspotVMのGC ✓ GCを作ってみよう! 145/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 紹介する予定だったアルゴリズ ム ✓ TreadmillGC ✓ MappingCollector ✓ etc... 146/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • HotspotVM(OpenJDK7) ✓ 2ヶ月くらい掛けていた!! ✓ 50ページくらい書いていた!! ✓ タイムオーバー…orz 147/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • なのでこの場を借りて説明 します><
    • 正確なGCへの道: HotspotVM編
    • HotspotVM ✓ スタックマシン ✓ スタックマシンとは(ry 150/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • JVMスタック ✓ メソッド呼び出し時にフレームを積 む 151/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ポインタと即値の区別 ✓ プリミティブ型はJVMの中でも数 値として扱っている ✓ プリミティブ型の値がフレーム内 に混ざってしまう ✓ 区別しなければ保守的GCとなる 152/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ポインタと即値の区別 ✓ フレーム内 ✓ ローカル変数配列 ✓ オペランドスタック ✓ 即値? ポインタ? わからん… 153/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • どうするか?
    • 「参照マップ」の作成
    • HotspotVM実行フロー ✓ .java => .class ✓ .classはJavaバイトコードの固まり ✓ VMはバイトコードの命令セットを1 つずつ実行 156/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 抽象的インタプリタ ✓ 実体はないけど型情報だけで実 行しちゃおう ✓1 + 1 = 2 ✓ => int + int = int ✓ ローカル変数配列、スタック内に 入る型情報を記録 ✓ => 参照マップ 157/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • どういうものか実際に見て みましょう
    • とあるソースコード class TwoDifferentLocalVars { public static void main(String args[]){ int primitiveType = 1; // プリミティブ型 Object referenceType = new Object(); // 参照型(ポインタ) } } 159/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • Javaバイトコードが 透けて見えますよね
    • こうなる pc( 0): iconst_1 pc( 1): istore_1 pc( 2): new #2 // class java/lang/Object pc( 5): dup pc( 6): invokespecial #1 // Method java/lang/Object."<init>" pc( 9): astore_2 pc(10): return 161/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • pc( 0)=>pc( 1) // int primitiveType = 1; pc( 0): locals = 'r..', stack = '' // iconst_1 // iconst_'i' : // 'i'の部分にあたるintの定数をオペランドスタックに積む pc( 1): locals = 'r..', stack = 'v' ✓ reference : 参照型(ポインタ)、 value : プリミティブ型 162/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • pc( 1)=>pc( 2) // int primitiveType = 1; pc( 1): locals = 'r..', stack = 'v' // istore_1 // istore_'n' : // ローカル変数配列の'n'番目に // オペランドスタックの先頭のint型の値を格納する pc( 2): locals = 'rv.', stack = '' 163/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • pc( 2)=>pc( 5) // Object referenceType = new Object(); pc( 2): locals = 'rv.', stack = '' // new #2 // new : // 新たなオブジェクトを生成し、オペランドスタックに積む pc( 5): locals = 'rv.', stack = 'r' 164/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ちょっと飛ばして
    • pc( 9)=>pc( 10) // Object referenceType = new Object(); pc( 9): locals = 'rv.', stack = 'r' // astore_2 // astore_'n' : // ローカル変数配列の'n'番目にオペランドスタックの // 先頭の参照型の値を格納する pc(10): locals = 'rvr', stack = '' 166/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 参照マップ ✓ 一命令毎のJVMフレームの情報 を持つ ✓ 現在JVMスタックに積まれているフレー ム全て ✓ 情報 => 「参照型」「プリミティブ 型」を区別する地図 167/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • なぜローカル変数配列に マップが必要?
    • グローバル変数、クラス変数等 の場合 ✓ グローバル変数、クラス変数等 ✓ 型情報によってコンパイル時に区別可 能 169/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • ローカル変数配列の場合 ✓ フレーム内のローカル変数 ✓ ローカル変数配列の内容は実行時に 決まる 170/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 駄目なケース if (条件) { Object referenceType = new Object(); } else { int primitiveType = 1; } ✓ 条件によってローカル変数配列内 の情報が変化 171/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 続いて
    • G1GC
    • G1GCとは ✓ OpenJDK7に入ってる ✓ Garbage-First Garbage Collection ✓ サーバタイプ ✓ 大容量のメモリ使う ✓ 停止時間を気にする 174/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 概要 ✓ Javaヒープを「リージョン」単位に 分割 ✓ トレインGCに似ている 175/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 従来のCMS(Cuncurrent  Mark Sweep)
    •   http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
    •   http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
    • G1GC
    •   http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
    •   http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
    •   http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-5419.pdf
    • G1GCの特徴 ✓ 並行GC ✓ 並列でできることは並列化(凄い) ✓ リージョン内のゴミ割合が分かる ✓ 停止時間が予測可能 183/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • リージョン内のゴミ割合が 分かる?
    • リージョン毎の記憶集合 185/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 記憶集合 ✓ 記憶集合からゴミが割り出せる ✓ ゴミが多いリージョンがわかる 186/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • Garbage-First ✓ ゴミが多いリージョンを優先的に GC 187/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 賢い
    • 停止時間が予測可能?
    • ゴミの割合がわかるということ は ✓ 一つのリージョンにかかるGC時間 もわかるはず ✓ マシンパワーに依存する計算時間 も加味 ✓ GC時に実際に計測して予測精度を高 める 190/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 停止時間の設定 ✓ ユーザが「これくらいの停止時間 で!」というのを設定できる ✓ それを越えないようにGC対象の リージョンを選択 191/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 「あなたが予測可能な範囲 で止まりますよ!」 という割り切り
    • かなり賢い
    • 参考文献 ✓ JavaOneの発表資料 ✓ http://developers.sun.com/learning/ javaoneonline/2008/pdf/TS-5419.pdf ✓ 論文 ✓ URL忘れたけど公開してた ✓ 注:発狂するほど難しい 194/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • せっかく ここまでがんばったので ✓ 「実装編:HotspotVMのGC」章を 出したいなあ ✓ 電子書籍? ✓ まだわかりません>< 195/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • まとめ
    • まとめ ✓ HotspotVMは大変だった ✓ G1GCの論文も大変 ✓ 俺の正月…どこいってしもたん…? ✓ 目次案は皮算用しない! 197/202 GC本のツクリカタ - Making of the GC book Powered by Rabbit 0.6.4
    • 今回発表でいいたかった
    • たった一つのこと
    • なんやかんやで GCカワイイ!
    • ご静聴 ありがとうございました。
    • 質疑応答 (GC本の内容に関すること でも可)