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

Survey of programming languages for sound and music

Survey of programming languages for sound and music

2021/03/19 SIGPX #8

Tomoya Matsuura

March 19, 2021
Tweet

More Decks by Tomoya Matsuura

Other Decks in Programming

Transcript

  1. 2021-03-19 SIGPX #8 Tomoya Matsuura/দӜ஌໵ 

    https://matsuuratomoya.com [email protected]
    ԻͱԻָͷͨΊͷ

    ϓϩάϥϛϯάݴޠͷ

    αʔϕΠ
    1

    View Slide

  2. • ਆಸ઒ݝכϲ࡚ࢢग़਎(1994)

    • ਆಸ઒૯߹ߴߍଔ(2013)

    • ౦ژܳज़େֶԻָ؀ڥ૑଄Պଔ(2017)

    • ۝भେֶେֶӃܳज़޻ֶ෎ 

    म࢜/ത࢜ޙظ՝ఔ(2017,2019~)

    • ࿇পࣥଠϑϧϑΟϧ(2018~)

    • YCAM(Intern,2015),teamlab(2015~2017),

    School for Poetic Computation(2018)
    ࣗݾ঺հ
    2
    photo: Takehiro Goto

    View Slide

  3. 3
    minimal musical medium / a programming language as an Infrastructure for sound & music.
    https://github.com/mimium-org/mimium
    3

    View Slide

  4. • Իָϓϩάϥϛϯάݴޠͷ֓೦త੔ཧɺൺֱΛͨ͠ࢿྉ͕গͳ͍

    • ಛʹ࣮૷ऀ͔Βݟͨڞ௨ͷޠኮɺඞཁͳ஌͕ࣝڞ༗͞Ε͓ͯΒ
    ͣɺԻָͷͨΊͷݴޠΛ࡞Δϋʔυϧ͕ߴ͍ɺධՁ͢Δͷ͕೉͠
    ͍

    • ۩ମతࣄྫͷࡉ͔͍঺հ͸աڈͷαʔϕΠʹͳΔ΂͘೚ͤͯཧ࿦
    త੔ཧΛ͍ͨ͠

    • ࠓճ͸ಛʹϦΞϧλΠϜ৴߸ॲཧͰ͖ΔݴޠΛத৺ʹ࿩͠·͢
    ൃදࣗମͷ໨త
    4

    View Slide

  5. • ԻָϓϩάϥϛϯάݴޠΛ࡞Δ໨త

    • ԻָϓϩάϥϛϯάݴޠͷաڈͷαʔϕΠ

    • ୅දతͳ؀ڥͷ঺հ

    • 2000೥Ҏޙͷݴޠઃܭʹ͓͚Δओཁͳ՝୊
    • ݴޠͷ࣮૷ύλʔϯͱΞʔΩςΫνϟ
    • ݴޠΛಛ௃͚ͮΔཁૉͱಛ௃ͷ෼ྨ
    • ·ͱΊɺະདྷͷԻָݴޠͷ͋Γํ
    ߏ੒
    5

    View Slide

  6. ԻָʹίϯϐϡʔλʔΛ༻͍ΔϞνϕʔγϣϯ
    ԻָϓϩάϥϛϯάݴޠΛ࡞ΔϞνϕʔγϣϯ
    • ϋʔυ΢ΣΞૢ࡞ʢϝϞϦɺεϨουɺεέδϡʔϦϯάʣ

    ͷӅṭʢԻָՈ͸ϝϞϦͷ͜ͱΛؾʹͨ͘͠ͳ͍ʣ

    • ԋ૗/࡞ۂΠϯλʔϑΣʔεͱͯ͠ͷϓϩάϥϛϯάʢLive Codingʣ

    • ϝσΟ΢Ϝͱͯ͠ͷιʔείʔυʢ#SC140ɺMML΍ςΩετԻָαΫϥͳͲʣ

    • ϓϩάϥϛϯάڭҭͷπʔϧͱͯ͠(EarSketch,Sonic Pi)
    Իָϓϩάϥϛϯάݴޠͷ໨త
    6
    • ίϯϐϡʔλʔͰͳ͚Ε͹ෆՄೳͳදݱɺ৽͍͠දݱʢmicrosoundͳͲʣ

    • ݱ࣮ͷָثɺ؀ڥͷγϛϡϨʔτ(VSTɺ෺ཧϞσϦϯά߹੒)

    View Slide

  7. • "Languages for Computer Music”,Frontiers in Digital Humanities(2018), Roger
    B. Dannenberg

    • ԻָݴޠΛಛ௃͚ͮΔ6ཁૉͷఏҊɺԻָݴޠҰൠʹڞ௨͢Δ՝୊ͷ੔ཧ

    • “Computer Music Languages and Systems: The Synergy Between Technology
    and Creativity”,pp 1-49 in Handbook of Digital Games and Entertainment
    Technologies(2016),Hiroki Nishino and Ryohei Nakatsu

    • “The Development of Computer Music Programming Systems”, Journal of New
    Music research,42(1), pp97-100(2013) Victor Lazzrini

    • ↑2ͭ͸ओʹྺ࢙త؍఺ͷ੔ཧ

    • “Idiomatic Patterns and Aesthetic Influence in Computer Music Languages”,
    Organized Sound,25(1),pp53-63(2020),Andrew Mcpherson and Koray Tahlroǧlu

    • Իָϓϩάϥϛϯά؀ڥ͕ͲͷΑ͏ʹͦͷݴޠݻ༗ͷදݱΛੜΈग़͢ͷ͔ΛΠϯλϏϡʔ͔Β
    ԻָϓϩάϥϛϯάݴޠͷαʔϕΠ
    7

    View Slide

  8. ԻָϓϩάϥϛϯάݴޠҰཡ
    8
    l-BOHVBHFTGPS$PNQVUFS.VTJD 3PHFS#%BOOFOCFSHz 'SPOUJFSTJO%JHJUBM)VNBOJUJFT /PW Ճච͸দӜ

    View Slide

  9. ԻָϓϩάϥϛϯάݴޠҰཡ
    9
    l-BOHVBHFTGPS$PNQVUFS.VTJD 3PHFS#%BOOFOCFSHz 'SPOUJFSTJO%JHJUBM)VNBOJUJFT /PW Ճච͸দӜ

    Overtone
    Sam Aaron

    (2011?)
    Sonic PI
    Sam Aaron

    (2012)
    TidalCycles
    Alex Mclean

    (2006~)
    Chronic
    Eli Blandt

    (2002)
    Kronos
    Versa Norilo

    (2015)
    LC
    Hiroki Nishino

    (2013)
    ixi lang
    Thor Magnusson

    (2012)
    Gibber
    Charlie Roberts

    (2012)
    FoxDot
    Jean-François Parent

    (2015)
    Extempore
    Andrew Sorensen

    (2012)
    impromptu
    Andrew Sorensen

    (2010)
    Common Lisp Music
    Bill Schottstaedt

    (1989)
    SuperCollider-
    Clients
    SOUL
    ROLI

    (2018)
    Vult
    Leonardo
    Laguna Ruiz

    (2016)
    mimium
    Tomoya Matsuura

    (2020)
    Gwion
    Jérémie Astor

    (2017)
    ଞɺmidiϨϕϧΛϝΠϯͷର৅ʹͨ͠؀ڥʹAlda(2012)΍Takt(2014)ɺORCΛ(2017)ͳͲ

    View Slide

  10. 10
    ΦʔσΟΦϓϩάϥϛϯάݴޠAdvent Calender 2020 by aike͞Μ
    ͋ΒΏΔݴޠͰαΠϯ೾+σΟϨΠΛ࡞ͬͯΈΔ
    https://qiita.com/advent-calendar/2020/audiolang

    View Slide

  11. ྺུ࢙֓
    11
    50s~80s DSPϋʔυ΢ΣΞʹର͢Δ໋ྩ
    90s~ All CPUɺ൚༻OS্ͰͷϦΞϧλΠϜॲཧ(Max,Pd,SC,CSound)
    00s~ ৴߸ॲཧͷJITίϯύΠϧ/τϥϯεύΠϧ(Faust,Soul,Vult)
    ಛఆͷදݱʹಛԽͨ͠DSL in DSL(Sonic Pi,TidalCycles)
    Πϕϯτॲཧͷਖ਼֬ͳεέδϡʔϦϯά(ChucK,Extempore)

    View Slide

  12. Pd,SuperColliderҎޙͷओཁ՝୊
    12
    2.௿ϨΠϠͷ֦ுੑ
    ৴߸ॲཧͷϓϦϛςΟϒ(UGen)Λ૿΍ͨ͢ΊʹC΍C++Λॻ͔ͳ͖Ό͍͚ͳ͍
    ৴߸ॲཧͱΠϕϯτॲཧͰผͷܕͷಉ͡ॲཧ(+ͱ+~ͱ͔)Λ࢖͍෼͚ͳ͖Ό͍͚ͳ͍
    3.ߴϨΠϠͷ֦ுੑ

    ݴޠͦͷ΋ͷͷ֦ுੑɺࣗݾ൓өੑʹݶ౓͕͋Δ
    ಛఆͷԻָྖҬʹ͞ΒʹಛԽͨ͠ݴޠ/ϥΠϒϥϦΛ࡞Γ͍ͨ
    1.ਖ਼֬ͳΠϕϯτεέδϡʔϦϯά

    ϓϦΤϯϓςΟϒϚϧνλεΫʢϢʔβϓϩάϥϜ͕OSͷλεΫεέδϡʔϦϯάʹ
    ؔ༩Ͱ͖ͳ͍ʣ؀ڥԼͰͲ͏΍ͬͯαϯϓϧϨϕϧͰਖ਼֬ͳΠϕϯτॲཧΛ͢Δ͔ʁ

    View Slide

  13. 1.ΠϕϯτεέδϡʔϦϯά໰୊
    13
    ΦʔσΟΦόοϑΝʢྫ:256αϯϓϧʣຖʹΠϕϯτΩϡʔΛফԽ
    PuredataɺSuperColliderͳͲ
    ಉظ(Synchronous)
    ࿦ཧ࣌ؒʢLogical TimeʣͰॱংΛอূ
    ChucK,Gwion,mimiumͳͲ
    w ࣮૷͸ΘΓͱ؆୯ɺಈ࡞ܰྔ
    w .*%*΍6%1ͳͲ*0བྷΈͷ͕࣌ؒਖ਼֬Ͱ͸ͳ͍
    w $PODVSSFOUͳॲཧʹ࠷దԽ͠Α͏ͱࢥ͏ͱେม
    w *0ؔ࿈΋ൺֱతਖ਼֬ʹॲཧͰ͖Δ
    w εϨου҆શͳ࣮૷ͭΒ͍
    w ཁݸผ04ຖͷରԠɺ૊ΈࠐΈͱ͔ʹ͸Ҡ২ͮ͠Β͍
    ඇಉظ(Asynchronous)
    εϨου෼͚ͯϦΞϧλΠϜεέδϡʔϧ
    Max※,ExtemporeͳͲ
    ※ਖ਼֬ʹ͸Max͸ΦʔσΟΦͱεϨουΛ෼͚͍ͯΔ͕ΦʔσΟΦͱผϨʔτ(ඪ४
    20msຖ)ͰΠϕϯτΩϡʔΛpoll͍ͯ͠Δɻ

    Extempore͸λεΫ଴ͪ࣌ؒΛܭࢉͯ͠λεΫ͕͋Δ࣌ͷΈىಈ
    ϋΠϒϦου
    Ϣʔβʔ͕໌ࣔͯ͠ಉظ/ඇಉظΛ੾Γସ͑
    LC(Nishino2013)ͳͲ
    ྫɿͽͬͨΓαϯϓϧຖʹม਺Λมߋ͍ͨ͠ʜ
    ͚Ͳຖαϯϓϧॲཧ͢Δͷ͸ա৒
    ྫɿͽͬͨΓαϯϓϧຖʹม਺Λมߋ͍ͨ͠ʜ
    ͚Ͳຖαϯϓϧॲཧ͢Δͷ͸ա৒

    View Slide

  14. • Pd΍SCͰ͸༻ҙ͞ΕͨجຊϞδϡʔϧɿUnit GeneratorʢUGenɺΦγϨʔλ΍
    ϑΟϧλͷ͜ͱʣΛ૊Έ߹ΘͤΔ͜ͱͰ৴߸ॲཧΛهड़Ͱ͖Δ

    • ৽͍͠جຊϞδϡʔϧΛ࡞Γͨ͘ͳͬͨΒͲ͏͢Δʁ

    →C or C++ͰϓϥάΠϯ࡞ͬͯͶʢͭΒ͍ʣ

    • JITίϯύΠϧ͢Ε͹ύϑΥʔϚϯεΛଛͳΘͣ௚઀৴߸ॲཧΛهड़Ͱ͖ΔͷͰ͸ʁ

    • DSPܥݴޠɿFaust,Soul,Vult,Kronos

    • JITͷόοΫΤϯυ͸͍͍ͩͨLLVMɺC΍C++ίʔυͱͯ͠τϥϯεύΠϧͰ͖Δ
    ΋ͷ΋ଟ͍ɻWebAssemblyհͯ͠ϒϥ΢βͰಈ࡞͢Δ΋ͷ΋

    • ໰୊ɿDSPݴޠࣗମ͸εέδϡʔϦϯάͷSemanticsΛ࣋ͨͳ͍ͷ͕΄ͱΜͲ
    2.௿ϨΠϠͷ֦ுੑ
    14

    View Slide

  15. • ϦζϜύλʔϯ/Ի֊/࿨Իͱ͍ͬͨߴ࣍ͷύϥϝʔλΛϓϩάϥϜ͢Δʹ
    ͸ݴޠͷந৅Խೳྗʢಛʹܕ·ΘΓʣ͕଍Γͳ͍

    • ྫ͑͹PdͩͱϓϦϛςΟϒͱϓϦϛςΟϒ͔Β੒ΔϦετ͔͠ѻ͑ͳ͍

    • ϙϐϡϥʔͳղܾࡦɿSuperColliderΛωοτϫʔΫίϚϯυͰૢ࡞Ͱ͖Δ
    γϯηαΠβʔͱͯ͠࢖͍ɺ৽͍͠DSLΛ࡞Δ

    • SC͸v3ΑΓૄ݁߹ͳαʔόʔɾΫϥΠΞϯτϞσϧΛ࠾༻ɺ৽͍͠γϯηͷఆٛ(SynthDef)Ҏ֎
    ͸΄΅ͳΜͰ΋OSC(UDP্ͷ؆қϓϩτίϧ)Ͱૢ࡞Մೳ

    • Sonic Pi(Ruby+Erlang)ɺixi(Ruby)ɺFoxDot(Python)ɺTidalCycles(Haskell)ɺOvertone(Clojure)ͳͲ

    • ໰୊ɿωοτϫʔΫίϚϯυͷਖ਼֬ͳεέδϡʔϦϯάΛ…(σδϟϰ)
    3.ߴϨΠϠͷ֦ுੑ
    15
    DSL on DSLͷϗετͷબ୒ࢶ͸࣮࣭SuperColliderҰ୒ͳͷ͕ݱঢ়

    View Slide

  16. • ࣈ۟ղੳ

    • ݴޠ֦ு

    • ݴޠಛघԽ

    • ύΠϓϥΠϯ

    • ιʔεtoιʔεม׵
    SpinellisʹΑΔDSL࣮૷ͷσβΠϯύλʔϯΑΓൈਮ
    Ͳ͏΍࣮ͬͯ૷͢Δʁ
    16
    Diomidis Spinellis. Notable design patterns for domain specific languages. Journal of Systems and Software,
    56(1):91–99, February 2001. (doi:10.1016/S0164-1212(00)00089-3)
    Ұ൪ετϨʔτͳΞϓϩʔνɺࣗ༝౓ߴ͍͕࣮૷େม
    ԋࢉࢠΦʔόʔϩʔυ΍ϚΫϩͳͲɺࣗ༝౓͸ϗετݴޠ࣍ୈ
    ϘΠϥʔϓϨʔτͱ૊Έ߹ΘͤͨΓɺҰ෦ͷػೳ͚ͩ࢖͏
    Cͷιʔεʹม׵ͨ͠Γ͢Δ͜ͱͰόοΫΤϯυ؆ུԽ
    SuperColliderʹ৴߸ॲཧ෦෼͸͓೚ͤ

    View Slide

  17. SuperColliderʹΑΔه๏
    17
    {
    var noise = PinkNoise.ar(0.2);
    noise = Mix.new(Array.fill(10, {arg i;
    Resonz.ar(noise, i * 800 + 200, 0.05)}));
    noise = (noise * 0.2 + noise * Decay.kr(Dust.kr(0.5),10));
    noise = RHPF.ar(noise, LFNoise0.kr(0.5).range(220, 880), rq:0.001);
    CombL.ar(noise, delaytime:0.5, decaytime:25).dup() * 0.5
    }.play;
    (->
    noise = PinkNoise.ar(0.2)
    noise = Mix Array.fill 10, (i)->
    Resonz.ar(noise, i * 800 + 200, 0.05)
    noise = (noise * 0.2 + noise * Decay.kr(Dust.kr(0.5), 10))
    noise = RHPF.ar(noise, LFNoise0.kr(0.5).range(220, 880), rq:0.001)
    CombL.ar(noise, delaytime:0.5, decaytime:25).dup() * 0.5
    ).play()
    CoffeColliderʹΑΔه๏
    CoffeeScriptͷԋࢉࢠΦʔόʔϩʔυ͚ͩͰՄೳͳݶΓه๏Λࣅ͍ͤͯΔ
    http://mohayonao.github.io/CoffeeCollider/#noise.coffee

    View Slide

  18. • $΍#͸ϗετݴޠͰ͋ΔHaskellʹ͓͚Δதஔԋࢉࢠ(ݴޠ֦ு)

    • sound΍gainɺeveryͳͲ͸Haskell্ͰϥΠϒϥϦͱͯ͠ఆٛ͞Εͨؔ਺

    • “”Ͱғ·Εͨ෦෼͸Haskell্Ͱ͸ͨͩͷจࣈྻ

    • Parsecͱ͍͏Haskellͷࣈ۟ղੳϥΠϒϥϦͰ಺෦తʹύʔε͍ͯ͠Δ

    • Ϣʔβʔ͸Haskellͷؔ਺ఆٛ΍ܕએݴͳͲߴ౓ͳจ๏Λ஌Δඞཁ͸ͳ͍
    ʢݴޠಛघԽʣ

    • TidalCycles͸SuperColliderʹରͯ͠OSCΛૹΓԻΛग़͢(ύΠϓϥΠϯ)
    HybridͳྫɿTidalCycles
    18
    d1 $ sound "bd*4" # gain (every 3 (rev) $ "1 0.8 0.5 0.7")
    ಉ༷ͳྫͱͯ͠͸FoxDot(ϗετݴޠ:Python)ͳͲ

    View Slide

  19. ԻָݴޠͷΞʔΩςΫνϟ
    19
    ίϯύΠϥ/
    ΠϯλϓϦλ
    ϥϯλΠϜ
    ιʔείʔυ
    (ςΩετσʔλ)
    தؒදݱ
    UGenάϥϑߏ଄

    VM໋ྩྻ

    Ϛγϯίʔυ
    ϨΠϠʔ
    ߴ
    ௿
    ϥΠϒϥϦ
    ҙຯ֦ு
    • தؒදݱͷཻ౓ʹΑͬͯදݱͷ෯΍ಈతมߋͷ͠΍͕͢͞มΘͬͯ͘Δ
    50~80sɿ DSPϋʔυ΢ΣΞ

    00s: UGen

    View Slide

  20. ϏδϡΞϧݴޠͷ৔߹
    20
    ίϯύΠϥ/
    ΠϯλϓϦλ
    ϥϯλΠϜ
    ιʔείʔυ
    (ςΩετ/όΠφϦσʔλ)
    தؒදݱ
    UGenάϥϑߏ଄

    VM໋ྩྻ

    Ϛγϯίʔυ
    ϨΠϠʔ
    ߴ
    ௿
    ϏδϡΞϥΠβ
    ʢIDEʣ
    ஌֮/ฤू
    Մೳͳදݱ
    ϥΠϒϥϦ
    ҙຯ֦ு
    • ͋Δҙຯී௨ͷݴޠ΋UTF-8ͳͲܾ·ͬͨόΠφϦσʔλΛɺςΩετͱ͍͏ਓؒʹೝࣝՄ
    ೳͳදݱʹม׵͍ͯ͠ΔͷͰ͜ͷਤʹ౰ͯ͸ΊΔ͜ͱ΋Ͱ͖Δ

    View Slide

  21. தؒදݱ͸ͻͱͭͱ͸ݶΒͳ͍
    21
    ϥϯλΠϜ
    ιʔείʔυ
    (ςΩετ/όΠφϦσʔλ)
    ϏδϡΞϥΠβ
    ʢIDEʣ
    ஌֮/ฤू
    Մೳͳදݱ
    ίϯύΠϥ/
    ΠϯλϓϦλ
    தؒදݱ
    ϥΠϒϥϦ ίϯύΠϥ/
    ΠϯλϓϦλ
    தؒදݱ
    ϥΠϒϥϦ
    ίϯύΠϥ/
    ΠϯλϓϦλ
    தؒදݱ
    ϥΠϒϥϦ

    View Slide

  22. TidalCyclesͷྫ
    22
    HaskellΠϯλϓϦλ(GHCI)
    TidalCycles
    BP ύʔα
    ύλʔϯ

    ϥΠϒϥϦ
    ιʔείʔυ
    (ςΩετσʔλ)
    ҙຯ֦ு
    SC
    ΫϥΠΞϯτ
    OSC
    ϝοηʔδ SCSynth
    Pattern
    σʔλ
    • ʢ͍·͍ͪ͏·͘ਤࣔͰ͖ͳ͍ʣ

    View Slide

  23. • Syntax(౷ޠ࿦)

    • Semantics(ҙຯ࿦)

    • Runtime

    • Libraries

    • Programming Environments(IDE)

    • Community&Resources
    Dannenbergʢ2018ʣʹΑΔ
    ԻָݴޠΛಛ௃͚ͮΔཁૉ
    23

    View Slide

  24. • ͜͜ͰͷExpressivenessͱ͸“ಡΈ΍͘͢ॻ͖΍͍͢”ɺ

    Generalͱ͸“Մೳͳදݱͷൣғ͕޿͍”ͱ͍͏ҙຯ
    Expressive vs General
    24
    E. Brandt, “Temporal type constructors for computer music programming,” School of Computer Science, Carnegie Mellon University, 2002.
    ࣮ࡍʹ͸࣮ߦ࣌ύϑΥʔϚϯε͕
    ѱ͘ͳΔͱ͍͏৽ͨͳτϨʔυΦ
    ϑ͕ൃੜ͍ͯ͠Δ

    View Slide

  25. Իָϓϩάϥϛϯάʹ͓͍ͯଟݴޠΞϓϩʔνΛऔΔͱɺ
    Ϣʔβ͸൚༻ੑ (FOFSBMJUZ
    ͱޮ཰ੑ &GpDJFODZ
    ͷόϥϯεΛऔΓ΍͘͢ͳΔɻ
    λεΫʹԠͯ͡ϓϩάϥϚ͸ҟͳΔෳࡶ౓ͷΤϯτϦʔϙΠϯτΛબ୒͢Δ͜ͱ
    ͕ՄೳʹͳΔɻΑΓ௿͘൚༻తͳϨϕϧͰ͸ΑΓෳࡶͳίʔυͷઃܭ͕ඞཁ͕ͩ
    ෯޿͍݁ՌΛಘΒΕΔɻҰํɺΑΓߴ͍ɺಛघԽɺ۩ମԽ͞ΕͨϨϕϧͰ͸ϓϩ
    άϥϛϯάʹඞཁͳ࿑ྗͱ͍͏؍఺͔Βϓϩηε͸ΑΓޮ཰తʹͳΔͩΖ͏ɻ
    Lazzarini(2013)ΑΓ
    Efficient vs General
    25

    View Slide

  26. 3ͭͷہॴԽͱ3ͭͷޮ཰ੑ
    ཁૉ͕༩͑Δಛ௃ͷ෼ྨʢͷҊʣ
    26
    6ͭΛશ෦৳͹͢ͷ͸ݫ͘͠ɺτϨʔυΦϑ͕͋Δ
    Expression Generality
    දݱͷہॴੑ
    Platform Independency
    ؀ڥͷہॴੑ
    Dynamic Modification
    ܧଓత࣮ߦͷہॴੑ
    Runtime Efficiency
    ࣮ߦ࣌ͷܭࢉίετ
    Learning Efficiency
    Ϣʔβʔͷֶशίετ
    Development Efficiency
    ։ൃίετ
    গͳ͘ͱ΋ɺ“͋ΒΏΔ؀ڥͰ͋ΒΏΔදݱ͕Ͱ͖ɺಈతมߋ΋͠·͘Εͯ௚ײతʹ࢖͍΍͢
    ࣮͘ߦ଎౓΋ωΠςΟϒฒΈ”ͷݴޠΛ࡞Ζ͏ͱ͢Δͱ։ൃίετ͕ͱΜͰ΋ͳ͍͜ͱʹͳΔ

    View Slide

  27. 27
    Syntax
    Semantics
    Runtime
    Libraries
    Programming
    Environment
    Community
    Resources
    Development
    Efficiency
    Runtime
    Efficiency
    Learning
    Efficiency
    Expression
    Generality
    Dynamic
    Modification
    ֤ཁૉͱಛ௃ͷؔ܎
    Platform
    Independency
    …ຊ౰ʹ͜ΕΒͷཁૉ͚ͩͰݴޠΛධՁͰ͖ΔͷͩΖ͏͔ʁ

    View Slide

  28. Idiomaticity
    ྔతධՁͰ͖ͳ͍ಛ௃
    28
    • ཁ໿ɿݴޠʹ͓͚Δཧ࿦తʹՄೳͳදݱͰ͖Δൣғ͕ಉͩͬͨ͡
    ͱͯ͠΋ɺͦΕͧΕͷݴޠ͕༠ൃ͢Δදݱͷ࣭ɿIdiomacticity͸
    ҟͳΔ

    • ݴΘΕͯΈΔͱ͋ͨΓ·͑
    l*EJPNBUJD1BUUFSOTBOE"FTUIFUJD*OqVFODFJO$PNQVUFS.VTJD-BOHVBHFTz 0SHBOJ[FE
    4PVOE
    QQ
    "OESFX.DQIFSTPOBOE,PSBZ5BIMSPǧMV

    View Slide

  29. ϝλΫϦΤʔγϣϯͱͯ͠ͷݴޠઃܭ
    29
    զʑͷݚڀ݁Ռ͸ʢ༁஫ɿݴޠ͕༩͑ΔʣಛఆͷඒతӨڹͷূ໌Λҙਤͨ͠
    ΋ͷͰ͸ͳ͍͠ɺݸʑͷ࣮ફऀͷ૑଄ੑ͕ৗʹୈҰͰ͋Δ͜ͱʹมΘΓ͸ͳ
    ͍΋ͷͷɺσδλϧָثͷσβΠϯ͸ɺݴޠ࡞੒ऀͱָثσβΠφʔŠ࠷ऴ
    తʹͦͷݴޠͷϦιʔεʢͦͯͦ͠Εͱͱ΋ʹɺӅ͞ΕͨεΫϦϓτʣΛࣗ
    ਎ͷ૑଄త໨ඪʹ߹Θͤͯঌש͢ΔऀŠͱͷɺ࣌ؒͱڑ཭Λ௒͑ͨର࿩Ͱ͋
    Δͱݟͳ͢͜ͱ͕Ͱ͖ΔɺͱఏҊͰ͖Α͏ɻͦ͏ͯ͠ɺݴޠઃܭ͸Ұछͷϝ
    λΫϦΤʔγϣϯߦҝͱͳΓɺ࠷ऴతʹ͸Կे೥ʹ΋ΘͨͬͯඒతͳӨڹΛ
    ༩͑Δ͜ͱʹͳΔɻ
    l*EJPNBUJD1BUUFSOTBOE"FTUIFUJD*OqVFODFJO$PNQVUFS.VTJD-BOHVBHFTz 0SHBOJ[FE
    4PVOE
    QQ
    "OESFX.DQIFSTPOBOE,PSBZ5BIMSPǧMV චऀ༁ɺڧௐ͸චऀ

    View Slide

  30. • 2000೥Ҏޙͷओཁͳ3՝୊

    • ࣮૷ํ๏͔ΒݟΔԻָݴޠ

    • ཉ͍͠จ๏ͷࣗ༝౓ʹΑͬͯݴޠ֦ுͰରԠͨ͠Γߏจղੳͨ͠Γ

    • தؒදݱͷཻ౓ͱ࣮ߦ࣌ύϑΥʔϚϯεɺಈతมߋͷ͠΍͕͢͞มΘΔ

    • ԻָݴޠΛಛ௃͚ͮΔ6ཁૉʹରͯ͠ɺ࣮ࡍʹݱΕΔ3ͭͷہॴ
    ੑɺ3ͭͷޮ཰ੑͱ͍͏ࢦඪΛఏҊ
    ·ͱΊ
    30
    ௿ϨΠϠͷ֦ு(JIT DSP) ߴϨΠϠͷ֦ு (DSL in DSL)
    ਖ਼֬ͳεέδϡʔϦϯά

    View Slide

  31. • ԻϓϩάϥϛϯάʹඞཁͳυϝΠϯ஌ࣝͱݴޠॲཧܥʹඞཁͳυ
    ϝΠϯ஌͕ࣝ྆ํඞཁ͚ͩͲ྆ํϔϏʔ

    • DSPΛJITॲཧͰ͖ΔΑ͏ʹ͠Α͏ͱࢥ͏ͱ࣮૷ͷ95ˋ͸Իͱ͔
    ؔ܎ͳ͘ͳͬͯ͘Δ

    • ݴޠઃܭ͕Α͘Ͱ͖ͯΔ≠࢖ͬͯ΋Β͍΍͍͢ʢύοέʔδϯ
    άɺCIɺγϯλοΫεϋΠϥΠτɺυΩϡϝϯςʔγϣϯ…ʣ
    ࣮૷ऀͱͯ͠ײ͡Δࠔ೉
    31

    View Slide

  32. • ΠϕϯτεέδϡʔϧͱJIT DSP͕1ͭͷݴޠମܥͰ׬݁͢Δݴޠ

    • ࣗݾ൓өੑΛڧΊͨݴޠ಺DSLΛ࡞Γ΍͍͢ݴޠ

    • ςΩετɺඇςΩετΛ૊Έ߹Θͤ/૒ํ޲ධՁͰ͖Δݴޠ

    • ෳ਺ͷݴޠʹ·͕ͨͬͯ࢖͑ΔLanguage Server/IDEج൫
    ະདྷͷԻָϓϩάϥϛϯά
    32
    Language Oriented Programming(Racket)ͷΑ͏ͳੈք؍ʁ
    ↓↑DAWʢԻ੍ָ࡞ιϑτ΢ΣΞʣͱͷΑΓࠜຊతͳ࿈ܞʁ
    →mimiumͰϝΠϯͰ࣮ݱ͍ͨ͜͠ͱ
    ໺ྑϓϩάϥϛϯάݴޠͷϦϙδτϦ͕਺ඦݸGithubʹస͕ͬͯΔΑ͏ʹɺ਺ඦݸͷԻָݴޠ͔Β޷͖
    ͳͷΛϑϨΩγϒϧʹ૊Έ߹ΘͤΒΕΔΑ͏ͳੈք͕དྷͯཉ͍͠ʢເʣ

    View Slide