Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Perl1.0 Deep Drive 0.01
Search
AnaTofuZ
August 09, 2025
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Perl1.0 Deep Drive 0.01
ShizuokaTECH#1
でのトークです
AnaTofuZ
August 09, 2025
More Decks by AnaTofuZ
See All by AnaTofuZ
Perl GraphQL 高速化バトル 2026年5月版
anatofuz
0
77
k1LoW/deckのすすめ
anatofuz
2
820
Rubyの国のPerlMonger
anatofuz
3
2.7k
Pythonで爆速でHello, World!する
anatofuz
0
140
思いつきで推しの誕生日記念コンテンツを2日で作る技術
anatofuz
0
210
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
580
令和最新版 Perlコーディングガイド
anatofuz
5
11k
rakulangで実装する! RubyVM
anatofuz
6
6.3k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
8.2k
Other Decks in Technology
See All in Technology
Browser Spec: Testing Hotwire with Ruby
takahashim
1
150
大型犬好きによるPugの紹介
yamanoku
1
160
Active Record Connection Adaptersにおける長年の課題に再び取り組む
yahonda
0
380
AIカンパニーへの転換を支えた、エンジニアの仕事の再定義
kworkdev
PRO
2
1.4k
sue445's proposals 2026
sue445
0
120
AI時代のGraphQL
joere
1
280
Turning Repos into the Product Second Brain with an LLM Wiki
linedevth
0
120
PagerDuty Tech Hub-鳴らすけれど、人は動かない
ezaki
0
190
SAENM ~Jupyterで残すPoCの試行錯誤、未来の自分と仲間を助ける記録!~
terapyon
0
170
会社説明資料
persolserverworks
0
9.8k
アウトプット初心者、半年間のふりかえり
4o1sobblue
0
460
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
220
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
4k
Paper Plane
katiecoart
PRO
5
54k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
Designing for humans not robots
tammielis
254
26k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
1
280
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
530
Done Done
chrislema
187
17k
Bash Introduction
62gerente
615
220k
Scaling GitHub
holman
464
140k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Transcript
2025/08/10 ShizuokaTECH#1 八雲アナグラ (@AnaTofuZ) Perl1.0 Deep Drive 0.01
2 • 八雲アナグラ(@AnaTofuZ) • 株式会社コードタクトでRailsエンジニアをしています • 山梨県甲府市でリモートワーク ◦ 沖縄と京都にもいました •
Kofu.rb / Houtou.pm • Perl生まれPerl育ちです • 伊豆と清水によくいきました ◦ 東海大学海洋科学博物館 ◦ いのしし村 my $self = shift;
3
4 【PR】山梨にもきてくれ !!!(今熱いぞ!!) • Kofu.なんか ◦ 2025/08/16 クラフトビール屋さんでやるテックトーク • Kofu.rb
◦ 2025/08/23 TRICKを見る会 • Otsuki.なんか ◦ 2025/10/11 古民家でのノンジャンルトークイベント
5 • 今年のはじめにRubyの会社に転職した ◦ 今まではPerlやTypeScriptがメイン • Rubyの勉強をする必要がある ◦ Perlは得意 ▪
なら得意なPerlをRubyで作れば最強なのでは...!? • 現存する最古のPerlことPerl1.0をRubyで実装してみる • というのを今やっているのですが、そこでわかったPerl1.0についての話で す ◦ 移植の話しようとしたら15分では足りなかった Perl1.0再考
6 • 今はPerl5.42 ◦ 究極 • ずっとPerl5のままだがPerl1 ~ Perl4の時代もあったことがある ◦
1994年からPerl5 Perl
7 • 1987年12月18日にリリース • 驚くべきことにGitHubでソースコードが見れる ◦ メンテナンスされているバージョンも ▪ https://github.com/AnaTofuZ/Perl-1.0 ◦
DockerHubにもあるのでdockerでも動く • 文字列と文字列の配列、実験的機能で連想配列がサポート Perl1.0
8 • 置換 • 基本正規表現 • リスト操作 ◦ shift, unsfhit,
pop, push • サブルーチン • for文 結構いろいろある
9 • レキシカル変数 ◦ グローバル変数しかない • わかりやすいコード解説 ◦ そもそもK&R Cなので最近のCとも違う
◦ 最近はAIが出たのであんまり問題ではなくなった ないもの
10 • スコープがなく全部グローバル変数なのでfor文を抜けてもアクセスできる for文で配列を初期化するやつ
11 • Perl1.0を極力模倣して再実装したいのでPerl1.0の中身を見ていく必要が ある • 動くバイナリがあると便利なので一旦ローカルでビルドを通してみる ローカルビルド
12 • macOS(LLVM/clang環境)だとそのままだとコンパイルが通らない ◦ Linux環境(gcc)だと通る状態 • 動くようにパッチをつくった 昨日メンテナンスしました
13 • C言語の様々に対応する必要がある ◦ ビルド時のオプションで制御できるものとコードに手をいれるものの2 択 ◦ -Wno-implicit-function-declaration ▪ clangだと関数を使う前に宣言が必要だがなくても動くようにする
macOSで動くようにメンテナンス
14 • macOSだと/usr/includeや/usr/libがない ◦ /Library/Developer/CommandLineTools/SDKs/MacOSX. sdk/以下にあるのでこれを指定 macOSで動くようにメンテナンス
15 macOS使うの久々だったのでググったら自分のエントリが出てきた 自分のブログは便利
16 だいたい返り値の型がおかしいので指定すればよい 動くようにパッチをあてる
17 • #define DEBUGGINGの後ろに1をつけるとデバッグモードでビルドでき る • perlの起動オプションに-Dが追加される ◦ ./perl -D123
hoge.plのようにDの次に有効化したいデバッグ フラグに対応したビット列を渡す • 一部のデバッグモードでセグフォが起こるが基本はこの対応でビルドでき た デバッグモード
18 • 字句解析 ◦ 入力されたコードをトークン(意味ある単位)ごとに分割 • 構文解析 ◦ トークンを元に文法と照らし合わせてASTを作る •
実行 ◦ ASTを実行する 一般的なプログラミング言語の処理フロー
19 • 字句解析部分を手書き • 構文解析はYacc(Bison)を利用 ◦ 完全にフェーズが別れているわけではなく構文解析から字句解析を 呼び出す • 実行はASTを直接取り回す
◦ これはPerl5でも同様 Perl1.0においては
20 $が現れたらscanregした値を設定しREGトークンとして切り出す レキサー
21 @が現れたらcanした値を設定しREGトークンとして切り出す レキサー
22 リストを作る()などはトークンそのものが記号(char文字) 記号とトークンが一致するケース
23 • Perlの文法上数値はクォーテーションが不要 ◦ 数値がトーカナイズされたら以降は文字列読み取りモードに移行する リテラルのトーカナイズ
24 • Perlは"で変数を囲むと中身が展開される • Perl1.0ではデフォルトでは"は'であるとフラグをつける ◦ 読み取る文字列の中に$などがあればダブルクォーテーションモード に変更 ダブルクォーテーションおもしろポイント
25 Ruby製のパーサージェネレーターのLramaを使うとダイアグラムで表示でき る Perl1.0の文法規則
26 • bundle exec lrama --diagram perl.yするといい感じにHTML が生成される • https://anatofuz.net/perl-1.0-diagram/で見れるぞ!!
Perl1.0の文法規則
27 • 代入はsetexprとして定義されている 代入文
28 • 代入はsetexprとして定義されている • setexprはtermだけも含む 代入文
29 • termはREG(変数)やRSTRING(文字列)がマッチする ◦ 代入文の規則がここで判明する 代入文
30 こういう感じ
31 文法解析を見てみる
32 パースすると
33 • cmd ◦ 制御構造(basic block)単位を表現 • arg ◦ 実際の式や演算子を表現
▪ cmdにおける引数としての意味合い ◦ いわゆる値っぽいものはすべてこれ ASTの仕組み
34 基本ブロック!! cmd
35 いわゆるif文はサブタイプでtrueかそれ以外をリストしている cmd
36 • ちょっとわかってきましたね(???) • わかってきたので改造をしてみます Perl1.0わかってきた
37 • do/endでのブロックを作る構文にしてみる Perl1.0をRubyライクにする
38 • もともとPerlにはdoが意味を持つキーワードとして定義されている • endだけ定義しなおせばいい do
39 新定義
40 レキサーで endをキャプチャする
41 • もともと{}がPerlのブロック • 同じ処理block_headを使うといい感じにブロックに ブロックに対応させる
42 こういうのが動くように !!
43 • Perl1.0 Deep Driveした • 絶賛移植しているので別の機会に続きはご期待 まとめ