Slide 1

Slide 1 text

を 読もうとした話 ゴリラ.VIM #29 発火大根

Slide 2

Slide 2 text

自己紹介 名前 : 発火大根 職業 : インフラエンジニア (コードも書くよ) vim歴 : 6-7年? (プラグイン等に凝りだして2年半くらい)

Slide 3

Slide 3 text

最近は技術書典でNostrやBluesky (SNS)の本出したり オンライン勉強会配信やったりしてます

Slide 4

Slide 4 text

ハイブリッド勉強会も! 12/8(金)開催しました!

Slide 5

Slide 5 text

今日は… vimを読もうとした話をします

Slide 6

Slide 6 text

なぜ読もうと思ったか? ・vimにいつかコントリビュートしたい ・いつも使っているvimがどう作られているか知りたい

Slide 7

Slide 7 text

唐突にクイズ! vimリポジトリのソースコードは何行あると 思いますか? ・src/以下をclocコマンドで計測 ・11/27時点の実行行数(空行/コメントを除く)とする

Slide 8

Slide 8 text

答え 836,105行

Slide 9

Slide 9 text

多い!

Slide 10

Slide 10 text

ちょっと待とう まあ、落ち着いてエントリポイントから読んでみよう -> src/以下にmain.cがある!

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

main.cだけで 中々のボリューム。

Slide 13

Slide 13 text

MAIN.Cのソース(一部)

Slide 14

Slide 14 text

VIMのソースをそのまま読むのは大変 ・main.cだけでもボリュームが多い ・ifdefが多い ・インデントが揃っていない場合も

Slide 15

Slide 15 text

そこで、、、 ①main.cを整形 ②エントリポイント抜き出し ③ifdefを除く ④皆大好きChatGPTに説明させる

Slide 16

Slide 16 text

①main.cを整形 clang-formatで 自分好みに インデントを整形!

Slide 17

Slide 17 text

②エントリポイント抜き出し 実はエントリポイントだけだと、そこまで行数無い (99L~443L) = 345L

Slide 18

Slide 18 text

③ifdefを除く 「unifdef」というコマンドがある ->プロセッサ条件行を取り除ける

Slide 19

Slide 19 text

③ifdefを除く vimをビルド時のログをリダイレクト $ make > make.log

Slide 20

Slide 20 text

③ifdefを除く リダイレクト結果から、「-D」を取り出す gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-3.0 - I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 - I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio- unix-2.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/fribidi - I/usr/include/harfbuzz -I/usr/include/atk-1.0 -I/usr/include/cairo - I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 - I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount - I/usr/include/blkid -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib- 2.0/include -O2 -fno-strength-reduce -Wall -Wno-deprecated-declarations -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -o objects/main.o main.c

Slide 21

Slide 21 text

③ifdefを除く main.cから#if/#ifdef/#ifndefを取り出す $cat main.c | grep -e “#if” -e “#elif” -e “defined”

Slide 22

Slide 22 text

③ifdefを除く unifdefでifdefを取り除く $ unifdef ¥ -D[定義1] -D[定義2] … ¥ -U[定義1] -U[定義2] … ¥ main.c

Slide 23

Slide 23 text

③ifdefを除く 150行くらいのエントリポイントが抽出できた!

Slide 24

Slide 24 text

④ChatGPTに聞く GPT-4の力を借りる

Slide 25

Slide 25 text

④ChatGPTに聞く いい感じの回答をゲッツ!

Slide 26

Slide 26 text

④ChatGPTに聞く GPT-4のエントリポイント説明 要約すると… ①色々初期化する ②メインループ(vim_main2)実行

Slide 27

Slide 27 text

④ChatGPTに聞く 同じ要領で、vim_main2もGPT-4に説明させた。

Slide 28

Slide 28 text

④ChatGPTに聞く こんな感じで、 GPT-4でmainから追って概要説明させていけば 普通に読むより相当楽なはず! ※AIの性質上、たまに嘘吐かれるのでそこは注意

Slide 29

Slide 29 text

という話でした。

Slide 30

Slide 30 text

え、vim本体を解析して解説してくれるんじゃない の!? 宣伝スライド2枚も挟んだのに!? -> 別途、技術記事を作成予定!

Slide 31

Slide 31 text

おしまい