https://opt.connpass.com/event/188521/
੩తܕ͚ϓϩάϥϛϯάݴޠShiika2020-10-09 ࣗ࡞ϓϩάϥϛϯάݴޠͷू͍@yhara (Yutaka HARA)
View Slide
@yhara• ౡࠜݝࡏॅ• ωοτϫʔΫԠ༻௨৴ݚڀॴ• झຯɿݴޠॲཧܥͷ։ൃ• BiwaScheme (R7RS Scheme in JS)• ॻ੶ʰRubyͰͭ͘Δحົͳϓϩάϥϛϯάݴޠʱ࠷ۙͷڵຯɿΫϥϑτϏʔϧࣗ࡞ΩʔϘʔυ0DVMVT2VFTU$MBTI3PZBMF4PVMPG&EFO$PPLJF$MJDLFS
• Brainf*ckͳͲͷ͍ΘΏΔesolangΛͭ͘Δຊ• খ͞ͳϓϩάϥϛϯάݴޠͰॲཧܥ࣮ΛֶͿ• RubyΒͳͯ͘OK
Shiika• github: yhara/shiika• Ruby෩ͷจ๏ʴ੩తܕ͚ݴޠ• 2017ʙ• ࣮ɿRust + LLVM
ඪ• ࣮༻ݴޠΛࢦ͢• ΧόʔൣғRubyͱ͍͍ͩͨಉ͡4IJJLB 3VCZ8FCΞϓϦ ˕ ˕εΫϦϓςΟϯά ˓ ˕ήʔϜ ˕ ˓ܭࢉ ˓ ˚ϫϯϥΠφɺίʔυΰϧϑ ˓
σϞ• examples/ray.sk
ಈػ• Ruby͕͖͚ͩͲ੩తܕཉ͍͠• έΞϨεϛεΛ࣮ߦલʹڭ͑ͯ΄͍͠• ܕ͕ॻ͍ͯ͋Δͱಡղʹཱͭ• ܕ͔Βઃܭ͢Δָ͠Έ• Rubyͷʮॻ͖ຯʯΛ࣋ͬͨ੩తܕݴޠΛ࡞Εͳ͍͔
ʮॻ͖ຯʯͱʁʁ• ͍ͪ͜͝• ;Θͬͱ͍ͯ͠Δ…
Rubyͷॻ͖ຯΛߏ͢Δͷ• ʮεΫϦϓτݴޠʯͰ͋Δ͜ͱ• ͘ॻ͚Δ• ֤छsyntax sugarɾ๛ͳΈࠐΈϝιου• ָ͞ʼੑೳ• Fixnum͔ΒBignumͷࣗಈঢ֨• େΫϥεओٛ(Hashͷॱং͕อ࣋͞ΕΔ)
Rubyͷॻ͖ຯΛߏ͢Δͷ• ౷Ұײ• શ͕ͯΦϒδΣΫτͰ͋Δ (1.timesͱ͔)• ifcase-whenΛͭ
ݴޠઃܭͷτϨʔυΦϑ• ੑೳ vs ָ͞• eg. Bignum• ಡΈ͢͞ vs ॻ͖͢͞• eg. syntax sugar
ݴޠઃܭ
จ๏• جຊRubyͱಉ͡• ྫɿϝιουݺͼग़͠ͷׅހলུՄ• EnumͳͲɺRubyʹͳ͍ͷ༷Λݕ౼
ܕγεςϜ• ͋·Γ͍͠ͷೖΕͨ͘ͳ͍(͕ಡΊͳ͘ͳΔͷͰ)• ͱ͍͑δΣωϦΫε(parametricଟ૬)͘Β͍ཁΔ• ͳ͍ͱArrayHash࡞Εͳ͍…
ΫϥεͱϝλΫϥε"abc""abc".class #=> StringString #=> StringString.name #=> "String"String.class #=> Meta:StringArray #=> ArrayArray.name #=> "Array"Array.new #=> []Array.class #=> Meta:Array
ͳͥClassͰͳ͍ͷ͔• Rubyͩͱ StringArrayClassΫϥε• ͔͠͠String.newͱArray.new(વͳ͕Β)γάωνϟ͕ҧ͏• => Class.newͷγάωνϟ͕ҰҙͰͳ͍• => ͦΕͧΕҧ͏Λͭ͜ͱʹͨ͠
༨ஊɿΫϥεͱܕͷؔ• Ϋϥε != ܕ• ྫɿfoo(x: Float)• xFloatͷଞʹIntͰΑ͍• ܕʹͷू߹(ͲͷΑ͏ͳΫϥεͷΠϯελϯεΛڐ͔͢)͜͜ΫϥεͰͳ͘ɺܕΛॻ͘ཝ
ޓੑʹ͍ͭͯ• Rubyͱͷޓੑॏࢹ͠ͳ͍ɻྫɿ• Ruby: "foo".start_with?("f")• Rust: "foo".starts_with("f")• startsʹ߹Θ͍ͤͨ
ࠓޙͷల
ೖΕ͍ͨͷ• Enum (Option͕΄͍͠)• ύλʔϯϚον
ݕ౼தͷͷ• RubyͷModuleతͳͷ• ྫ֎ʁ• async/await
ೖΕͳ͍ͷ• Ϣʔβఆٛԋࢉࢠ• ߏจϚΫϩ• ಡղ͕େมͳͷͰ• Rubyͷdefine_methodͷΑ͏ʹɺओͳ༻్ΛΧόʔ͢Δͷ(Ṗ)ΛΘΓʹೖΕ͍ͨ• ηϧϑϗετ͠ͳ͍• σόοά͕େม• ظతʹੑೳ͕ॏཁʹͳΔ
Δ͜ͱແݶʹ͋Δ• ...• ׂίϯύΠϧ• ඪ४ϥΠϒϥϦ• ύοέʔδγεςϜ• ...
ҰॹʹΓ·͠ΐ͏ʂʂ• ݴޠॲཧܥSlack• https://prog-lang-sys-ja-slack.github.io/wiki/• νϟϯωϧ #shiika• https://github.com/yhara/shiika