$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mv {C,Golang}- Perl1.0
Search
AnaTofuZ
January 26, 2019
Technology
0
800
mv {C,Golang}- Perl1.0
YAPC::Tokyo 2019のLTです
AnaTofuZ
January 26, 2019
Tweet
Share
More Decks by AnaTofuZ
See All by AnaTofuZ
k1LoW/deckのすすめ
anatofuz
0
280
Perl1.0 Deep Drive 0.01
anatofuz
0
150
Rubyの国のPerlMonger
anatofuz
3
1.1k
Pythonで爆速でHello, World!する
anatofuz
0
85
思いつきで推しの誕生日記念コンテンツを2日で作る技術
anatofuz
0
140
AWSで雰囲気でつくる! VRChatの写真変換ピタゴラスイッチ
anatofuz
0
350
令和最新版 Perlコーディングガイド
anatofuz
5
7.5k
rakulangで実装する! RubyVM
anatofuz
6
4.1k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
6.2k
Other Decks in Technology
See All in Technology
プロダクト負債と歩む持続可能なサービスを育てるための挑戦
sansantech
PRO
1
1.1k
Flutter Thread Merge - Flutter Tokyo #11
itsmedreamwalker
1
110
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.2k
メッセージ駆動が可能にする結合の最適化
j5ik2o
9
1.7k
AWS re:Invent 2025 で頻出の 生成 AI サービスをおさらい
komakichi
3
250
Codeer.LowCode.Blazor 紹介と成長録
wadawada
0
100
【保存版】「ガチャ」からの脱却:Gemini × Veoで作る、意図を反映するAI動画制作ワークフロー
nekoailab
0
110
.NET 10のEntity Framework Coreの新機能
htkym
0
130
[続・営業向け 誰でも話せるOCI セールストーク] AWSよりOCIの優位性が分からない編(2025年11月21日開催)
oracle4engineer
PRO
1
150
確実に伝えるHealth通知 〜半自動システムでほどよく漏れなく / JAWS-UG 神戸 #9 神戸へようこそ!LT会
genda
0
160
日経電子版の BCP への取り組みについて/mediajaws1121
nikkei_engineer_recruiting
0
100
Active Directory 勉強会 第 6 回目 Active Directory セキュリティについて学ぶ回
eurekaberry
7
2.6k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
680
Done Done
chrislema
186
16k
Visualization
eitanlees
150
16k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
A Modern Web Designer's Workflow
chriscoyier
697
190k
The Language of Interfaces
destraynor
162
25k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
980
Making the Leap to Tech Lead
cromwellryan
135
9.6k
Statistics for Hackers
jakevdp
799
230k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
͏ݟͨ!!! id:AnaTofuZ
• 最近Perl1.0とPerl6の処理系を書きます • 「Perl1.0を触っている」と人々に言うと…
Perl1.0 • 「古い」 • 「化石」 • 「それ使ってて何の意味あるのw」 • 「そんなことよりLisp」 •
「いいから卒論」
Ұपճͬͯ৽͍͠ ݹ͍
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で) •古めのCで書かれている から古いと思われるや!!!!
ΑΖ͍͠ ͳΒ
None
mv {C,Golang}- Perl1.0 八雲アナグラ @AnaTofuZ YAPC::Tokyo 2019
Cで書かれたPerl1.0を golangで 書き直していくぞ!!!!
Perl1.0 C Yacc Configure Makefile 字句解析/ おおよその処理 構文解析 ビルド周り オリジナル
Perl1.0 C Yacc Configure Makefile 字句解析/ おおよその処理 構文解析 ビルド周り オリジナル
Go goyacc golang Go
Ͱ͖ͦ͏ͳงғؾ
rewriting Perl1.0 • Perl1.0そこそこ書かれている(まぁプログラミング言語だし…) • 全部書き直すのは可能であると思うが,いきなりは厳しい • 戦略として適当なサンプルプログラムを用意し, gdb/lldbで元のPerl1.0をトレースしつつ そのPerlプログラムの実行で
使う関数と構造体をその都度実装していく
• c2goとかいうCをgoに変換してくれるツールも ありますが… • 使ってみたらエラー吐いて変換できなかった
Perl1.0 • golangでポインタ演算は厳しい(unsafeを使えば出来る?)が Perl1.0はポインタ演算や, アドレス参照をしまくっている • 単一の構造体のポインタを返しているだけかと思いきや, 同じ関数で構造体のリストをポインタ演算して作っている • yaccのデバッグトレースに対する知見があまりない
Perl1.0 • 無駄な処理がある (初期値をいれて構造体を作った次の行で書き換えるなど) • 構造体の名前が良くわからない (なんでこんな名前にしたんだ……) • char型の下位ビットなどをフラグにしている
(goへの移植時にいろいろと考える必要がある) • 実装の解説資料が無い • ラベルgoto多用
Perl1.0 • 言うほどマクロ使ってない • 一人の人間が理解できそうな気がするコード量 • 気合いれれば結構読める処理が多い • ラリー・ウォールが書いたコードが読める!! •
golangへの変換でCとgolangの勉強になる
• 一週間でスカラ変数の代入と出力をしたかったが厳しかった • スカラ変数の代入と出力で利用するYACCの要素 レキサーの中で使用する関数は実装した • 愚直に使うコードを移植していてPerl1の雰囲気がわかってきた • 年内には作れそう!!
goPerl1.0 • これからのgoPerl1.0にご期待下さい! (進捗報告はOkinawa.pmで!!!) • https://github.com/AnaTofuZ/Go-Perl1