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
160
vimを読もうとした話
ゴリラ.vim #29 登壇時のスライド。
https://gorillavim.connpass.com/event/301953/
Hakkadaikon
December 13, 2023
Tweet
Share
More Decks by Hakkadaikon
See All by Hakkadaikon
Nostr × C#
hakkadaikon
0
48
思考の速さで使うクライアント ~vimクライアント作ってみた~
hakkadaikon
0
150
ゴリラ.vim #30 ライブコーティング
hakkadaikon
0
38
継続的な勉強会には何が必要か語り合ってみた!
hakkadaikon
0
36
健全な投稿専用クライアントを作ってみた
hakkadaikon
0
350
やる夫bot作ってみた
hakkadaikon
0
210
Featured
See All Featured
Large-scale JavaScript Application Architecture
addyosmani
504
110k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Art, The Web, and Tiny UX
lynnandtonic
290
19k
The Invisible Side of Design
smashingmag
294
49k
The Invisible Customer
myddelton
114
12k
What's new in Ruby 2.0
geeforr
338
31k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
16
1.6k
Gamification - CAS2011
davidbonilla
77
4.6k
How to name files
jennybc
65
94k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
A designer walks into a library…
pauljervisheath
201
23k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
501
140k
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枚も挟んだのに!? -> 別途、技術記事を作成予定!
おしまい