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

ElixirによるBEAM言語の作り方とUiroのご紹介

 ElixirによるBEAM言語の作り方とUiroのご紹介

tokyo.ex #1でのLT資料

2b11579150bfe89bbe8aa83b0970b38c?s=128

Yasushi Itoh

April 19, 2016
Tweet

Transcript

  1. ElixirʹΑΔBEAMݴޠ ͷ࡞ΓํͱUiro(Ծ)ͷ ͝঺հ

  2. ࣗݾ঺հ i2yͱਃ͠·͢ɻ ੈؒͰ͸ෳ߹ػϝʔΧʔͱͯ͠ೝ஌͞Εͯ ͍Δձࣾͷιϑτ΢ΣΞΤϯδχΞͰ͢ɻ ࢓ࣄͰ͸ɺJava΍C#ɺJavaScriptΛओ ʹ࢖͍ͬͯ·͢ɻ ElixirɺErlangͱ΋ʹॳ৺ऀϨϕϧͰ ͢^^; ࠷ۙͷझຯ͸ΦϨΦϨݴޠ࡞ΓͰ͢ɻ PythonͰ࣮૷ͨ͠PythonʹࣅͨMochi

    ͱ͍͏ݴޠΛGitHubͰެ։͍ͯ͠·͢ɻ
  3. τʔΫ಺༰ ࠷ۙ࡞ͬͨUiro(Ծ)ΛྫʹBEAMݴޠͷ࡞ΓํΛ͓࿩͠͠·͢ɻ Uiro(Ծ)͸RubyΆ͍จ๏ͷBEAMݴޠͰ͢ɻ ※ ࠷ޙʹRubyΛ৮ͬͨͷ͸13೥͘Β͍લͰɺRubyʹৄ͍͠༁Ͱ ͸͋Γ·ͤΜɻɻ

  4. Uiro(Ծ)ͷ࡞੒εςοϓ ͬ͘͟Γɺ3εςοϓ 1.۩ମతͳจ๏ΛܾΊΔ ίϯύΠϥʢτϥϯεϨʔλʣΛ࣮૷͢Δ 2. ιʔείʔυΛߏจղੳͯ͠தؒܗࣜ(AST)ʹม׵͢Δ 3. தؒܗࣜ(AST)ΛBEAMͷόΠτίʔυʹม׵͢Δ

  5. ۩ମతͳจ๏ΛܾΊΔ Uiro(Ծ)ΛɺRubyʹࣅͨจ๏ͱ͠·ͨ͠ɻ • Rubyʹࣅͨߏจ • ཧ༝ɿErlangͱRubyʹ͸ࣅ͍ͯΔ఺͕͋ΓɺErlangͷػ ೳΛRubyʹϚοϐϯά͠қ͔͔ͬͨΒ ※ ڞʹؔ਺ͱม਺(ଋറʣͷ໊લۭؒΛ۠ผ͢ΔLisp-2ํࣜ ※

    ͞ΒʹErlangͷΞτϜΛRubyͷγϯϘϧ(:hoge)ͱಉ͡ هड़ͰදݱͰ͖ͦ͏
  6. ۩ମతͳจ๏ΛܾΊΔ • ΫϥεϕʔεͷΦϒδΣΫτࢦ޲ɺμοΫλΠϐϯά • ཧ༝ɿࣗ෼΍ଟ͘ͷਓʹೃછΈ͕͋Δ͔Βɻ • Πϯελϯεͷঢ়ଶ͸ෆม • ཧ༝ɿΦϒδΣΫτࢦ޲͔ͩΒͱ͍ͬͯɺՄม͕σϑΥϧτ Ͱͳͯ͘΋͍͍ͷͰ͸ɻ

  7. Uiro(Ծ)ίʔυ͸͜Μͳײ͡ # Ϋϥεఆٛʢ1ϑΝΠϧʹ1Ϋϥε΋͘͠͸1ϞδϡʔϧͰ͢ʣ class Person def initialize(name, age) {name: name,

    age: age} end def name() @name end end module Test_Person def test_name() hoge_san = new Person("hoge", 60) hoge_san.name # => "hoge" end end
  8. Uiro(Ծ)ίʔυ͸͜Μͳײ͡ # Ϟδϡʔϧఆٛ module Enumerable def select(func) self.reduce([]) {|item, acc|

    if func.(item) acc ++ [item] else acc end } end # ҎԼɺলུ end
  9. Uiro(Ծ)ίʔυ͸͜Μͳײ͡ # ϛοΫεΠϯ module uiro_list include Enumerable def reduce(acc, func)

    lists::foldl(func, acc, self) end # ҎԼɺলུ end module test_list def self.test_select() [1, 2, 2, 3].select {|item| item == 2 or item == 3) .unique # => [2, 3] end end
  10. ߏจղੳͯ͠தؒܗࣜʹ leexͱyeccͷೖྗϑΝΠϧΛsrcσΟϨΫτϦʹஔ͍͓͚ͯ͹ɺ MixͰϏϧυ࣌ʹࣗಈతʹleexͱyecc͕࣮ߦ͞Ε·͢ɻ

  11. தؒܗࣜΛBEAMͷόΠτίʔυʹ Erlangͷerl_syntaxϞδϡʔϧͱcompileϞδϡʔϧΛ࢖͑ ͹ɺBEAMͷόΠτίʔυΛੜ੒͸͔ΜͨΜͰ͢ɻ

  12. ࠷ޙʹ • BEAMݴޠ࡞Δͷ͸Χϯλϯ • Erlang΍Elixirͱࣅ͍ͯΔݴޠ΍ɺHTMLςϯϓϨʔτ΍ JSONͱ͍ͬͨΧϯλϯͳݴޠͳΒಛʹɻ • Elixir͸࢖͍΍͍͢ʂ • Mix͸ͱͯ΋ศར

  13. ࠷ޙʹ • Uiro(Ծ)΋ΑΖ͓͘͠ئ͍͠·͢ʂ • ϓϧϦΫͯ͠΋Β͑ͨΒخ͍͠Ͱ͢ʂUiro • ϩΰ΋΄͍͠Ͱ͢ɾɾ(Mochi΋ʣ • MixͱReber3༻ͷϓϥάΠϯΛ࡞੒༧ఆͰ͢ʂʢ࡞ͬͯ΋Β ͬͯ΋خ͍͠Ͱ͢ʂʣ

    • ࠷ऴతʹ͸ηϧϑϗεςΟϯά͍ͨ͠ɻ