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
mv {C,Golang}- Perl1.0
Search
AnaTofuZ
January 26, 2019
Technology
0
730
mv {C,Golang}- Perl1.0
YAPC::Tokyo 2019のLTです
AnaTofuZ
January 26, 2019
Tweet
Share
More Decks by AnaTofuZ
See All by AnaTofuZ
令和最新版 Perlコーディングガイド
anatofuz
5
5.4k
rakulangで実装する! RubyVM
anatofuz
6
2.5k
沖縄の大学で育った学生がエンジニアになるまで
anatofuz
2
5.2k
OpenAPI Generator Perl Clientでも型チューニングしたい!!
anatofuz
0
300
perlimportsから探るPPIの世界
anatofuz
0
3.7k
GraphQLスキーマの設計で考えたこと
anatofuz
1
1.5k
インターネットアイドル目指して
anatofuz
1
190
How to build traditional Perl interpreters.
anatofuz
0
840
レガシーPython散策
anatofuz
2
1.8k
Other Decks in Technology
See All in Technology
CDKのコードレビューを楽にするパッケージcdk-mentorを作ってみた/cdk-mentor
tomoki10
0
130
完全自律型AIエージェントとAgentic Workflow〜ワークフロー構築という現実解
pharma_x_tech
0
250
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
120
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
4
490
信頼されるためにやったこと、 やらなかったこと。/What we did to be trusted, What we did not do.
bitkey
PRO
0
1.9k
ゼロからわかる!!AWSの構成図を書いてみようワークショップ 問題&解答解説 #デッカイギ #羽田デッカイギおつ
_mossann_t
0
1.3k
Godot Engineについて調べてみた
unsoluble_sugar
0
240
自社 200 記事を元に整理した読みやすいテックブログを書くための Tips 集
masakihirose
1
250
SpiderPlus & Co. エンジニア向け会社紹介資料
spiderplus_cb
0
700
Zero Data Loss Autonomous Recovery Service サービス概要
oracle4engineer
PRO
1
5k
When Windows Meets Kubernetes…
pichuang
0
280
チームが毎日小さな変化と適応を続けたら1年間でスケール可能なアジャイルチームができた話 / Building a Scalable Agile Team
kakehashi
1
190
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.8k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.5k
Building an army of robots
kneath
302
44k
Visualization
eitanlees
146
15k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
98
18k
BBQ
matthewcrist
85
9.4k
Adopting Sorbet at Scale
ufuk
74
9.2k
GitHub's CSS Performance
jonrohan
1030
460k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
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