$30 off During Our Annual Pro Sale. View Details »

enlarged: extend your own programming language

enlarged: extend your own programming language

RubyKaigiから帰ってきてLT会のLT。RubyKaigi 2018のトークの増補版だよ!

seki at druby.org

June 14, 2018
Tweet

More Decks by seki at druby.org

Other Decks in Programming

Transcript

  1. Extend your own
    programming language
    [email protected]
    -5Ͱ૿ิ

    View Slide

  2. ͠͹Β͓͘଴͍ͪͩ͘͞
    ✓ ͝ཡͷεϙϯαʔͷఏڙ
    ʹΑΓ͓ૹΓ͠·͢

    View Slide

  3. slide sponsors
    " " !
    !!! @moro
    @ tricknotes
    dRuby Web ( ) https://t.co/fLhzWll5gY
    @hisashim
    Rails 700
    https://t.co/wAMLWDekJh?amp=1 @igaiga555
    https://lambdanote.com @golden_lucky
    @vestige_

    View Slide

  4. slide sponsors
    5 !! 6 2
    Scratch Day in !! @mame
    iSeq iSeq
    @youchan
    Speee Ruby
    @koichiroo
    RubyKaigi 2018 2 @ktou
    RubyWorld Conference 2018
    yancya @yancya

    View Slide

  5. slide sponsors
    seki
    @tsuboi
    @ogijun
    people.suzuri.jp hsbt tatsuosakurai
    kenchan june29 zaimy tnmt umazura
    4 -20
    pixiv FANBOX halfmoon_0419 usa shimashima35
    igaiga

    View Slide

  6. Extend your own
    programming language
    [email protected]
    -5Ͱ૿ิ

    View Slide

  7. RubyKaigi 2018
    Ruby Ruby MinRuby
    dRuby

    View Slide

  8. RubyKaigi 2018
    ...

    View Slide

  9. MinRuby
    Ruby Ruby
    MinRuby

    View Slide

  10. MinRubyͷίϯςΩετ
    AST -
    genv -
    lenv -
    Marshal.dump

    View Slide

  11. ঢ়ଶΛอଘʗ࠶ݱͰ͖Δ
    ...

    View Slide

  12. ετϨʔδʹอଘʗ࠶ݱ
    Ruby

    View Slide

  13. ωοτϫʔΫʹอଘʗ࠶ݱ
    HTTP
    dRuby
    TupleSpace
    / Linda

    View Slide

  14. TupleSpace
    Linda

    View Slide

  15. TupleSpaceαʔόΛ༻ҙ͢Δ
    drbunix:/tmp/my_ts
    URI

    View Slide

  16. ;ͭ͏͸ϑΝΠϧ͔Βىಈ
    parse AST
    genv, lenv
    evaluate

    View Slide

  17. TupleSpace͔Βͷىಈ
    TupleSpace AST, genv, lenv take
    evaluate

    View Slide

  18. ϓϩηεϚΠάϨʔγϣϯ
    TupleSpace

    View Slide

  19. ϫʔΧΛىಈ͢ΔτϦοΫ
    [:ts_eval, ...] take [:ts_call, ...] write
    [:ts_call, ...] AST, genv, lenv
    evaluate
    while true
    it = ts.take([:ts_eval, nil, nil, nil, nil])
    it[0] = :ts_call
    ts.write(it)
    spawn_worker
    end

    View Slide

  20. TupleSpaceΛಉظ͢Δ࢓૊Έ
    TupleSpace
    Linda
    write
    take/read TS
    ͍͔ͭ͜ͷ࿩Λ͍ͨ͠

    View Slide

  21. ͭ·Γ
    TS
    TS MinRuby

    View Slide

  22. Docker, Rinda, Ring, MinRuby
    ෳ਺ͷίϯςφʹ഑ஔ͞Εͨ3JOEBͷλϓϧεϖʔεΛ3JOHΛ࢖ͬͯΦʔέε
    τϨʔγϣϯ
    ΍ઃఆͳ͠Ͱಉظͤ͞Δͱ͜Ζ·Ͱ͸࡞ͬͨɻݱࡏ͸ϝογϡ
    ঢ়ʹ઀ଓ͠߹͍ͬͯΔͷͰɺ"HFOUΛ࢖ͬͯ௨৴ΛݮΒͯ͠Έ͍ͨɻ

    View Slide