Upgrade to Pro — share decks privately, control downloads, hide ads and more …

mv 
{C,Golang}-

Perl1.0

AnaTofuZ
January 26, 2019

mv 
{C,Golang}-

Perl1.0

YAPC::Tokyo 2019のLTです

AnaTofuZ

January 26, 2019
Tweet

More Decks by AnaTofuZ

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. Ұपճͬͯ৽͍͠

    ݹ͍

    View Slide

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

    View Slide

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

    View Slide

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

    から古いと思われるや!!!!

    View Slide

  8. ΑΖ͍͠
    ͳΒ͹

    View Slide

  9. View Slide

  10. mv 

    {C,Golang}-


    Perl1.0
    八雲アナグラ @AnaTofuZ


    YAPC::Tokyo 2019

    View Slide

  11. Cで書かれたPerl1.0を
    golangで

    書き直していくぞ!!!!

    View Slide

  12. Perl1.0
    C
    Yacc
    Configure

    Makefile
    字句解析/

    おおよその処理
    構文解析
    ビルド周り
    オリジナル

    View Slide

  13. Perl1.0
    C
    Yacc
    Configure

    Makefile
    字句解析/

    おおよその処理
    構文解析
    ビルド周り
    オリジナル
    Go
    goyacc
    golang
    Go

    View Slide

  14. Ͱ͖ͦ͏ͳงғؾ

    View Slide

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

    gdb/lldbで元のPerl1.0をトレースしつつ

    そのPerlプログラムの実行で

    使う関数と構造体をその都度実装していく

    View Slide

  16. • c2goとかいうCをgoに変換してくれるツールも
    ありますが…
    • 使ってみたらエラー吐いて変換できなかった

    View Slide

  17. Perl1.0
    • golangでポインタ演算は厳しい(unsafeを使えば出来る?)が

    Perl1.0はポインタ演算や, アドレス参照をしまくっている
    • 単一の構造体のポインタを返しているだけかと思いきや,

    同じ関数で構造体のリストをポインタ演算して作っている
    • yaccのデバッグトレースに対する知見があまりない

    View Slide

  18. Perl1.0
    • 無駄な処理がある 

    (初期値をいれて構造体を作った次の行で書き換えるなど)
    • 構造体の名前が良くわからない

    (なんでこんな名前にしたんだ……)
    • char型の下位ビットなどをフラグにしている

    (goへの移植時にいろいろと考える必要がある)
    • 実装の解説資料が無い
    • ラベルgoto多用

    View Slide

  19. Perl1.0
    • 言うほどマクロ使ってない
    • 一人の人間が理解できそうな気がするコード量
    • 気合いれれば結構読める処理が多い
    • ラリー・ウォールが書いたコードが読める!!
    • golangへの変換でCとgolangの勉強になる

    View Slide

  20. • 一週間でスカラ変数の代入と出力をしたかったが厳しかった
    • スカラ変数の代入と出力で利用するYACCの要素

    レキサーの中で使用する関数は実装した
    • 愚直に使うコードを移植していてPerl1の雰囲気がわかってきた
    • 年内には作れそう!!

    View Slide

  21. goPerl1.0
    • これからのgoPerl1.0にご期待下さい!

    (進捗報告はOkinawa.pmで!!!)
    • https://github.com/AnaTofuZ/Go-Perl1

    View Slide