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

静的型付けプログラミング言語Shiika

yhara
October 09, 2020

 静的型付けプログラミング言語Shiika

yhara

October 09, 2020
Tweet

More Decks by yhara

Other Decks in Programming

Transcript

  1. ੩తܕ෇͚ϓϩάϥϛ
    ϯάݴޠShiika
    2020-10-09 ࣗ࡞ϓϩάϥϛϯάݴޠͷू͍
    @yhara (Yutaka HARA)

    View Slide

  2. @yhara
    • ౡࠜݝࡏॅ
    • ωοτϫʔΫԠ༻௨৴ݚڀॴ
    • झຯɿݴޠॲཧܥͷ։ൃ
    • BiwaScheme (R7RS Scheme in JS)
    • ॻ੶ʰRubyͰͭ͘Δحົͳϓϩάϥϛϯάݴޠʱ
    ࠷ۙͷڵຯɿΫϥϑτ
    Ϗʔϧࣗ࡞ΩʔϘʔ
    υ0DVMVT2VFTU
    $MBTI3PZBMF4PVM
    PG&EFO$PPLJF
    $MJDLFS

    View Slide

  3. • Brainf*ckͳͲͷ͍ΘΏΔesolangΛͭ͘Δຊ
    • খ͞ͳϓϩάϥϛϯάݴޠͰॲཧܥ࣮૷Λֶ
    Ϳ
    • Ruby஌Βͳͯ͘΋OK

    View Slide

  4. Shiika
    • github: yhara/shiika
    • Ruby෩ͷจ๏ʴ੩తܕ෇͚ݴޠ
    • 2017ʙ
    • ࣮૷ɿRust + LLVM

    View Slide

  5. ໨ඪ
    • ࣮༻ݴޠΛ໨ࢦ͢
    • Χόʔൣғ͸Rubyͱ͍͍ͩͨಉ͡
    4IJJLB 3VCZ
    8FCΞϓϦ ˕ ˕
    εΫϦϓςΟϯά ˓ ˕
    ήʔϜ ˕ ˓
    ਺஋ܭࢉ ˓ ˚
    ϫϯϥΠφɺίʔυΰϧϑ ˓

    View Slide

  6. σϞ
    • examples/ray.sk

    View Slide

  7. ಈػ
    • Ruby͕޷͖͚ͩͲ੩తܕ΋ཉ͍͠
    • έΞϨεϛεΛ࣮ߦલʹڭ͑ͯ΄͍͠
    • ܕ͕ॻ͍ͯ͋Δͱಡղʹ໾ཱͭ
    • ܕ͔Βઃܭ͢Δָ͠Έ
    • Rubyͷʮॻ͖ຯʯΛ࣋ͬͨ੩తܕݴޠΛ࡞Εͳ͍͔

    View Slide

  8. ʮॻ͖ຯʯͱ͸ʁʁ
    • ࢖͍ͪ͜͝
    • ;Θͬͱ͍ͯ͠Δ…

    View Slide

  9. Rubyͷॻ͖ຯΛߏ੒͢Δ΋ͷ
    • ʮεΫϦϓτݴޠʯͰ͋Δ͜ͱ
    • ୹͘ॻ͚Δ
    • ֤छsyntax sugarɾ๛෋ͳ૊ΈࠐΈϝιου
    • ָ͞ʼੑೳ
    • Fixnum͔ΒBignum΁ͷࣗಈঢ֨
    • େΫϥεओٛ(Hashͷॱং͕อ࣋͞ΕΔ౳)

    View Slide

  10. Rubyͷॻ͖ຯΛߏ੒͢Δ΋ͷ
    • ౷Ұײ
    • શ͕ͯΦϒδΣΫτͰ͋Δ (1.timesͱ͔)
    • if΍case-when΋஋Λ΋ͭ

    View Slide

  11. ݴޠઃܭͷτϨʔυΦϑ
    • ੑೳ vs ָ͞
    • eg. Bignum
    • ಡΈ΍͢͞ vs ॻ͖΍͢͞
    • eg. syntax sugar

    View Slide

  12. ݴޠઃܭ

    View Slide

  13. จ๏
    • جຊRubyͱಉ͡
    • ྫɿϝιουݺͼग़͠ͷׅހ͸লུՄ
    • EnumͳͲɺRubyʹͳ͍΋ͷ͸࢓༷Λݕ౼

    View Slide

  14. ܕγεςϜ
    • ͋·Γ೉͍͠΋ͷ͸ೖΕͨ͘ͳ͍(๻͕ಡΊͳ
    ͘ͳΔͷͰ)
    • ͱ͸͍͑δΣωϦΫε(parametricଟ૬)͘Β͍
    ͸ཁΔ
    • ͳ͍ͱArray΋Hash΋࡞Εͳ͍…

    View Slide

  15. ΫϥεͱϝλΫϥε
    "abc"
    "abc".class #=> String
    String #=> String
    String.name #=> "String"
    String.class #=> Meta:String
    Array #=> Array
    Array.name #=> "Array"
    Array.new #=> []
    Array.class #=> Meta:Array

    View Slide

  16. ͳͥClassͰ͸ͳ͍ͷ͔
    • Rubyͩͱ String΋Array΋਌͸ClassΫϥε
    • ͔͠͠String.newͱArray.new͸(౰વͳ͕Β)γ
    άωνϟ͕ҧ͏
    • => Class.newͷγάωνϟ͕ҰҙͰͳ͍
    • => ͦΕͧΕҧ͏਌Λ΋ͭ͜ͱʹͨ͠

    View Slide

  17. ༨ஊɿΫϥεͱܕͷؔ܎
    • Ϋϥε != ܕ
    • ྫɿfoo(x: Float)
    • x͸FloatͷଞʹIntͰ΋Α͍
    • ܕʹ஋ͷू߹(ͲͷΑ͏ͳΫϥεͷΠϯελϯ
    εΛڐ͔͢)
    ͜͜͸ΫϥεͰ͸ͳ͘ɺ
    ܕΛॻ͘ཝ

    View Slide

  18. ޓ׵ੑʹ͍ͭͯ
    • Rubyͱͷޓ׵ੑ͸ॏࢹ͠ͳ͍ɻྫɿ
    • Ruby: "foo".start_with?("f")
    • Rust: "foo".starts_with("f")
    • startsʹ߹Θ͍ͤͨ

    View Slide

  19. ࠓޙͷల๬

    View Slide

  20. ೖΕ͍ͨ΋ͷ
    • Enum (Option͕΄͍͠)
    • ύλʔϯϚον

    View Slide

  21. ݕ౼தͷ΋ͷ
    • RubyͷModuleతͳ΋ͷ
    • ྫ֎ʁ
    • async/await

    View Slide

  22. ೖΕͳ͍΋ͷ
    • Ϣʔβఆٛԋࢉࢠ
    • ߏจ໦ϚΫϩ
    • ಡղ͕େมͳͷͰ
    • Rubyͷdefine_methodͷΑ͏ʹɺओͳ༻్ΛΧόʔ͢Δ΋ͷ(Ṗ)Λ୅Θ
    ΓʹೖΕ͍ͨ
    • ηϧϑϗετ͸͠ͳ͍
    • σόοά͕େม
    • ௒௕ظతʹ͸ੑೳ͕ॏཁʹͳΔ

    View Slide

  23. ΍Δ͜ͱ͸ແݶʹ͋Δ
    • ...
    • ෼ׂίϯύΠϧ
    • ඪ४ϥΠϒϥϦ
    • ύοέʔδγεςϜ
    • ...

    View Slide

  24. Ұॹʹ΍Γ·͠ΐ͏ʂʂ
    • ݴޠॲཧܥSlack
    • https://prog-lang-sys-ja-slack.github.io/
    wiki/
    • νϟϯωϧ #shiika
    • https://github.com/yhara/shiika

    View Slide