Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
vimを読もうとした話
Search
Hakkadaikon
December 13, 2023
0
230
vimを読もうとした話
ゴリラ.vim #29 登壇時のスライド。
https://gorillavim.connpass.com/event/301953/
Hakkadaikon
December 13, 2023
Tweet
Share
More Decks by Hakkadaikon
See All by Hakkadaikon
PHP x Nostr
hakkadaikon
0
34
Emacs x Nostr
hakkadaikon
1
160
My Introduction To Nostr
hakkadaikon
0
140
Nostr × C#
hakkadaikon
0
130
思考の速さで使うクライアント ~vimクライアント作ってみた~
hakkadaikon
0
270
ゴリラ.vim #30 ライブコーティング
hakkadaikon
0
63
継続的な勉強会には何が必要か語り合ってみた!
hakkadaikon
0
47
健全な投稿専用クライアントを作ってみた
hakkadaikon
0
370
やる夫bot作ってみた
hakkadaikon
0
290
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
It's Worth the Effort
3n
183
27k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Product Roadmaps are Hard
iamctodd
PRO
49
11k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
Site-Speed That Sticks
csswizardry
0
40
GitHub's CSS Performance
jonrohan
1030
460k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
28
2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Transcript
を 読もうとした話 ゴリラ.VIM #29 発火大根
自己紹介 名前 : 発火大根 職業 : インフラエンジニア (コードも書くよ) vim歴 :
6-7年? (プラグイン等に凝りだして2年半くらい)
最近は技術書典でNostrやBluesky (SNS)の本出したり オンライン勉強会配信やったりしてます
ハイブリッド勉強会も! 12/8(金)開催しました!
今日は… vimを読もうとした話をします
なぜ読もうと思ったか? ・vimにいつかコントリビュートしたい ・いつも使っているvimがどう作られているか知りたい
唐突にクイズ! vimリポジトリのソースコードは何行あると 思いますか? ・src/以下をclocコマンドで計測 ・11/27時点の実行行数(空行/コメントを除く)とする
答え 836,105行
多い!
ちょっと待とう まあ、落ち着いてエントリポイントから読んでみよう -> src/以下にmain.cがある!
None
main.cだけで 中々のボリューム。
MAIN.Cのソース(一部)
VIMのソースをそのまま読むのは大変 ・main.cだけでもボリュームが多い ・ifdefが多い ・インデントが揃っていない場合も
そこで、、、 ①main.cを整形 ②エントリポイント抜き出し ③ifdefを除く ④皆大好きChatGPTに説明させる
①main.cを整形 clang-formatで 自分好みに インデントを整形!
②エントリポイント抜き出し 実はエントリポイントだけだと、そこまで行数無い (99L~443L) = 345L
③ifdefを除く 「unifdef」というコマンドがある ->プロセッサ条件行を取り除ける
③ifdefを除く vimをビルド時のログをリダイレクト $ make > make.log
③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
③ifdefを除く main.cから#if/#ifdef/#ifndefを取り出す $cat main.c | grep -e “#if” -e “#elif”
-e “defined”
③ifdefを除く unifdefでifdefを取り除く $ unifdef ¥ -D[定義1] -D[定義2] … ¥ -U[定義1]
-U[定義2] … ¥ main.c
③ifdefを除く 150行くらいのエントリポイントが抽出できた!
④ChatGPTに聞く GPT-4の力を借りる
④ChatGPTに聞く いい感じの回答をゲッツ!
④ChatGPTに聞く GPT-4のエントリポイント説明 要約すると… ①色々初期化する ②メインループ(vim_main2)実行
④ChatGPTに聞く 同じ要領で、vim_main2もGPT-4に説明させた。
④ChatGPTに聞く こんな感じで、 GPT-4でmainから追って概要説明させていけば 普通に読むより相当楽なはず! ※AIの性質上、たまに嘘吐かれるのでそこは注意
という話でした。
え、vim本体を解析して解説してくれるんじゃない の!? 宣伝スライド2枚も挟んだのに!? -> 別途、技術記事を作成予定!
おしまい