Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
mv {C,Golang}- Perl1.0
AnaTofuZ
January 26, 2019
Technology
0
490
mv {C,Golang}- Perl1.0
YAPC::Tokyo 2019のLTです
AnaTofuZ
January 26, 2019
Tweet
Share
More Decks by AnaTofuZ
See All by AnaTofuZ
OpenAPI Generator Perl Clientでも型チューニングしたい!!
anatofuz
0
33
perlimportsから探るPPIの世界
anatofuz
0
1.9k
GraphQLスキーマの設計で考えたこと
anatofuz
1
940
インターネットアイドル目指して
anatofuz
1
120
How to build traditional Perl interpreters.
anatofuz
0
570
レガシーPython散策
anatofuz
2
1.2k
レガシーPerlビルド ~現代に蘇るPerl[1-2].0とPerl6~
anatofuz
2
1.7k
NQPとMoarVMと私/nqp_moarvm_anatofuz
anatofuz
1
560
History from Perl 1.0 to Perl 6
anatofuz
0
1.8k
Other Decks in Technology
See All in Technology
ユーザーテストガイドライン VERSION 2.0
kouzoukaikaku
0
1.4k
01_ユーザーリサーチ実施の進め方
kouzoukaikaku
0
620
USB PD で迎える AC アダプター大統一時代
puhitaku
2
2k
開発者と協働できるメトリクスダッシュボードを作ろう!/SRE Lounge 2023
lmi
3
510
2年で10→70人へ! スタートアップの 情報セキュリティ課題と施策
miekobayashi
1
640
インフラ技術基礎勉強会 開催概要
toru_kubota
0
180
S3とCloudWatch Logsの見直しから始めるコスト削減 / Cost saving S3 and CloudWatch Logs
shonansurvivors
0
260
OpenShiftのリリースノートを整理してみた
loftkun
2
420
Exploring MapStore Release 2022.02: improved 3DTiles support and more
simboss
PRO
0
380
re:Inventで発表があったIoT事例の紹介と考察
kizawa2020
0
190
NGINXENG JP#2 - 4-NGINX-エンジニアリング勉強会
hiropo20
0
120
岐路に立つ若手がAmazonianの仕事術を学んできました / learning amazonian productivity hacks as a junior engineer
yayoi_dd
0
140
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
65
7.8k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
13
5.4k
Testing 201, or: Great Expectations
jmmastey
25
5.7k
Navigating Team Friction
lara
177
12k
A Tale of Four Properties
chriscoyier
149
21k
Six Lessons from altMBA
skipperchong
15
2.3k
Visualization
eitanlees
128
12k
YesSQL, Process and Tooling at Scale
rocio
159
12k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
270
12k
Design by the Numbers
sachag
271
18k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
152
13k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
38
3.6k
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