Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
͏ݟͨ!!! id:AnaTofuZ
Slide 2
Slide 2 text
• 最近Perl1.0とPerl6の処理系を書きます • 「Perl1.0を触っている」と人々に言うと…
Slide 3
Slide 3 text
Perl1.0 • 「古い」 • 「化石」 • 「それ使ってて何の意味あるのw」 • 「そんなことよりLisp」 • 「いいから卒論」
Slide 4
Slide 4 text
Ұपճͬͯ৽͍͠ ݹ͍
Slide 5
Slide 5 text
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)
Slide 6
Slide 6 text
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)
Slide 7
Slide 7 text
Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で) •古めのCで書かれている から古いと思われるや!!!!
Slide 8
Slide 8 text
ΑΖ͍͠ ͳΒ
Slide 9
Slide 9 text
No content
Slide 10
Slide 10 text
mv {C,Golang}- Perl1.0 八雲アナグラ @AnaTofuZ YAPC::Tokyo 2019
Slide 11
Slide 11 text
Cで書かれたPerl1.0を golangで 書き直していくぞ!!!!
Slide 12
Slide 12 text
Perl1.0 C Yacc Configure Makefile 字句解析/ おおよその処理 構文解析 ビルド周り オリジナル
Slide 13
Slide 13 text
Perl1.0 C Yacc Configure Makefile 字句解析/ おおよその処理 構文解析 ビルド周り オリジナル Go goyacc golang Go
Slide 14
Slide 14 text
Ͱ͖ͦ͏ͳงғؾ
Slide 15
Slide 15 text
rewriting Perl1.0 • Perl1.0そこそこ書かれている(まぁプログラミング言語だし…) • 全部書き直すのは可能であると思うが,いきなりは厳しい • 戦略として適当なサンプルプログラムを用意し, gdb/lldbで元のPerl1.0をトレースしつつ そのPerlプログラムの実行で 使う関数と構造体をその都度実装していく
Slide 16
Slide 16 text
• c2goとかいうCをgoに変換してくれるツールも ありますが… • 使ってみたらエラー吐いて変換できなかった
Slide 17
Slide 17 text
Perl1.0 • golangでポインタ演算は厳しい(unsafeを使えば出来る?)が Perl1.0はポインタ演算や, アドレス参照をしまくっている • 単一の構造体のポインタを返しているだけかと思いきや, 同じ関数で構造体のリストをポインタ演算して作っている • yaccのデバッグトレースに対する知見があまりない
Slide 18
Slide 18 text
Perl1.0 • 無駄な処理がある (初期値をいれて構造体を作った次の行で書き換えるなど) • 構造体の名前が良くわからない (なんでこんな名前にしたんだ……) • char型の下位ビットなどをフラグにしている (goへの移植時にいろいろと考える必要がある) • 実装の解説資料が無い • ラベルgoto多用
Slide 19
Slide 19 text
Perl1.0 • 言うほどマクロ使ってない • 一人の人間が理解できそうな気がするコード量 • 気合いれれば結構読める処理が多い • ラリー・ウォールが書いたコードが読める!! • golangへの変換でCとgolangの勉強になる
Slide 20
Slide 20 text
• 一週間でスカラ変数の代入と出力をしたかったが厳しかった • スカラ変数の代入と出力で利用するYACCの要素 レキサーの中で使用する関数は実装した • 愚直に使うコードを移植していてPerl1の雰囲気がわかってきた • 年内には作れそう!!
Slide 21
Slide 21 text
goPerl1.0 • これからのgoPerl1.0にご期待下さい! (進捗報告はOkinawa.pmで!!!) • https://github.com/AnaTofuZ/Go-Perl1