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