mv 
{C,Golang}-

Perl1.0

Ffd3f0ebea474176dfbe876216a793f9?s=47 AnaTofuZ
January 26, 2019

mv 
{C,Golang}-

Perl1.0

YAPC::Tokyo 2019のLTです

Ffd3f0ebea474176dfbe876216a793f9?s=128

AnaTofuZ

January 26, 2019
Tweet

Transcript

  1. ΋͏ݟͨ!!! id:AnaTofuZ

  2. • 最近Perl1.0とPerl6の処理系を書きます • 「Perl1.0を触っている」と人々に言うと…

  3. Perl1.0 • 「古い」 • 「化石」 • 「それ使ってて何の意味あるのw」 • 「そんなことよりLisp」 •

    「いいから卒論」
  4. Ұपճͬͯ৽͍͠  ݹ͍ 

  5. Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)

  6. Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で)

  7. Perl1.0 • Perl1.0はemacsより新しいのに….(発表年的な意味で) •古めのCで書かれている
 から古いと思われるや!!!!

  8. ΑΖ͍͠ ͳΒ͹

  9. None
  10. mv 
 {C,Golang}-
 
 Perl1.0 八雲アナグラ @AnaTofuZ
 
 YAPC::Tokyo 2019

  11. Cで書かれたPerl1.0を golangで
 書き直していくぞ!!!!

  12. Perl1.0 C Yacc Configure
 Makefile 字句解析/
 おおよその処理 構文解析 ビルド周り オリジナル

  13. Perl1.0 C Yacc Configure
 Makefile 字句解析/
 おおよその処理 構文解析 ビルド周り オリジナル

    Go goyacc golang Go
  14. Ͱ͖ͦ͏ͳงғؾ

  15. rewriting Perl1.0 • Perl1.0そこそこ書かれている(まぁプログラミング言語だし…) • 全部書き直すのは可能であると思うが,いきなりは厳しい • 戦略として適当なサンプルプログラムを用意し,
 gdb/lldbで元のPerl1.0をトレースしつつ
 そのPerlプログラムの実行で


    使う関数と構造体をその都度実装していく
  16. • c2goとかいうCをgoに変換してくれるツールも ありますが… • 使ってみたらエラー吐いて変換できなかった

  17. Perl1.0 • golangでポインタ演算は厳しい(unsafeを使えば出来る?)が
 Perl1.0はポインタ演算や, アドレス参照をしまくっている • 単一の構造体のポインタを返しているだけかと思いきや,
 同じ関数で構造体のリストをポインタ演算して作っている • yaccのデバッグトレースに対する知見があまりない

  18. Perl1.0 • 無駄な処理がある 
 (初期値をいれて構造体を作った次の行で書き換えるなど) • 構造体の名前が良くわからない
 (なんでこんな名前にしたんだ……) • char型の下位ビットなどをフラグにしている


    (goへの移植時にいろいろと考える必要がある) • 実装の解説資料が無い • ラベルgoto多用
  19. Perl1.0 • 言うほどマクロ使ってない • 一人の人間が理解できそうな気がするコード量 • 気合いれれば結構読める処理が多い • ラリー・ウォールが書いたコードが読める!! •

    golangへの変換でCとgolangの勉強になる
  20. • 一週間でスカラ変数の代入と出力をしたかったが厳しかった • スカラ変数の代入と出力で利用するYACCの要素
 レキサーの中で使用する関数は実装した • 愚直に使うコードを移植していてPerl1の雰囲気がわかってきた • 年内には作れそう!!

  21. goPerl1.0 • これからのgoPerl1.0にご期待下さい!
 (進捗報告はOkinawa.pmで!!!) • https://github.com/AnaTofuZ/Go-Perl1