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
Perl1.0 Deep Drive 0.01
Search
AnaTofuZ
August 09, 2025
Technology
200
0
Share
Perl1.0 Deep Drive 0.01
ShizuokaTECH#1
でのトークです
AnaTofuZ
August 09, 2025
More Decks by AnaTofuZ
See All by AnaTofuZ
k1LoW/deckのすすめ
anatofuz
0
660
Rubyの国のPerlMonger
anatofuz
3
1.6k
Pythonで爆速でHello, World!する
anatofuz
0
120
思いつきで推しの誕生日記念コンテンツを2日で作る技術
anatofuz
0
180
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
490
令和最新版 Perlコーディングガイド
anatofuz
5
10k
rakulangで実装する! RubyVM
anatofuz
6
5.2k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
6.7k
OpenAPI Generator Perl Clientでも型チューニングしたい!!
anatofuz
0
480
Other Decks in Technology
See All in Technology
サービスの信頼性を高めるため、形骸化した「プロダクションミーティング」を立て直すまでの取り組み
stefafafan
1
260
アプリブロック機能のつくりかたと、AIとHTMLの不合理な相性の良さについて
kumamotone
1
230
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8k
会社説明資料|株式会社ギークプラス ソフトウェア事業部
geekplus_tech
0
210
Forget technical debt
ufried
0
180
鹿野さんに聞く!CSSの最新トレンド Ver.2026
tonkotsuboy_com
6
2.8k
[Scram Fest Niigata2026]Quality as Code〜AIにQAの思考を再現させる試み〜
masamiyajiri
1
300
いつの間にかデータエンジニア以外の業務も増えていたけど、意外と経験が役に立ってる
zozotech
PRO
0
370
クラウドネイティブ DB はいかにして制約を 克服したか? 〜進化歴史から紐解く、スケーラブルアーキテクチャ設計指針〜
hacomono
PRO
6
850
(きっとたぶん)人材育成や教育のような何かの話
sejima
0
680
2026-05-14 要件定義からソース管理まで!IBM Bob基礎ハンズオン
yutanonaka
0
120
AIエージェントの支払い基盤 AgentCore Payments概要
kmiya84377
2
160
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
310
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Practical Orchestrator
shlominoach
191
11k
New Earth Scene 8
popppiees
3
2.2k
Music & Morning Musume
bryan
47
7.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
300
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
120
Test your architecture with Archunit
thirion
1
2.2k
Making the Leap to Tech Lead
cromwellryan
135
9.8k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.2k
Mind Mapping
helmedeiros
PRO
1
190
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した • 絶賛移植しているので別の機会に続きはご期待 まとめ