SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
࠷ۙͷൃలͱ
໨Լ࣮૷தͷมߋ
@ SATYSFI Conf 2021
2021 ೥ 6 ݄ 26 ೔
( @bd_gfngfn)
࠷΋؆ܿʹ‫ͱ͏ݴ‬
• օ͞Μͷ੒Ռɿ ຊ౰ʹૉ੖Β͍͠
• Θͨ͠ͷਐḿɿ μϝͰ͢!
֓ཁ
2
࠷΋؆ܿʹ‫ͱ͏ݴ‬
• օ͞Μͷ੒Ռɿ ຊ౰ʹૉ੖Β͍͠
• Θͨ͠ͷਐḿɿ μϝͰ͢!
※΋ͪΖΜԿ΋΍ͬͯͳ͍Θ͚Ͱ͸ͳ͍ɿ
• SATYSFI ຊମͷ։ൃ΋ਐߦத
– ϚΫϩల։࣌ͷΤϥʔҐஔใࠂ‫ػ‬ೳΛ v0.0.6 ͰϦϦʔε
• ͜ΕͰϚΫϩ‫ػ‬ೳ͕࠷௿‫༻࣮ݶ‬తʹͳͬͨ
– ϞδϡʔϧγεςϜͷ F-ing modules ԽʴͦΕʹ൐͏มߋʢ్தʣ
– OpenType ϥΠϒϥϦͷ࠶࣮૷ʴЋɿ otfm → otfed
• Sesterl ͱ͍͏ผͷ੩త‫ޠݴ͖ͭܕ‬Λ৽ͨʹ࣮૷͍ͯͨ͠
– ಘΒΕͨ‫ޠݴ‬ઃ‫ܭ‬ͷ஌‫͕ݟ‬ SATYSFI ʹ΋ϑΟʔυόοΫͰ͖ͦ͏
ࠓճ͸͜ΕΒͷࡶવͱͨ͠঺հͰ͢
֓ཁ
3
• ௚ۙͷ౤ೖ͞Εͨมߋ
• ௖͍ͨ PR ౳
• ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ
• ໨Լ࣮૷தͷมߋ
• ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
• ϞδϡʔϧγεςϜͷ F-ing modules Խ
• ·ͱΊ
• v0.0.6 (2021-02-06)
– ઢ‫ܕ‬ม‫׵‬ linear-transform-graphics [@monaqa]
– ଟஈ૊Έ page-break-multicolumn
– overfull/underfull ՄࢹԽΦϓγϣϯ —-debug-show-overfull
– ͦͷଞ༗ࢤͷํʑʹΑΔଟ͘ͷमਖ਼ʢCHANGELOG ࢀরʣ
௚ۙͷओͳมߋ
5
• v0.0.6 (2021-02-06)
– ઢ‫ܕ‬ม‫׵‬ linear-transform-graphics [@monaqa]
– ଟஈ૊Έ page-break-multicolumn
– overfull/underfull ՄࢹԽΦϓγϣϯ —-debug-show-overfull
– ͦͷଞ༗ࢤͷํʑʹΑΔଟ͘ͷमਖ਼ʢCHANGELOG ࢀরʣ
• v0.0.7 ༧ఆ
– ֎෦ϑΝΠϧಡΈࠐΈ read-file [@puripuri2100]
– document information dictionary ग़ྗ [@puripuri2100]
– ॲཧ‫ܥ‬Ϗϧυ࣌ͷ Ruby ඇґଘԽ [@leque]
• vminstdef.yaml ͷ಺༰͸ vminst.ml ʹҠߦ
– ਺ࣜதͷʢҰ෦‫߸ه‬আ͘ʣ೚ҙ Unicode ίʔυϙΠϯτ‫ڐ‬༰
• set-math-charͰ Roman, Italic ౳ͷελΠϧʹԠͯ͡ม‫׵‬΋Մೳ
௚ۙͷओͳมߋ
6
• ௚ۙͷ౤ೖ͞Εͨมߋ
• ௖͍ͨ PR ౳
• ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ
• ໨Լ࣮૷தͷมߋ
• ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
• ϞδϡʔϧγεςϜͷ F-ing modules Խ
• ·ͱΊ
😄 ‫ܕ‬ͷ͓͔͛Ͱਝ଎Ͱ਌੾ͳΤϥʔใࠂ͕खʹೖͬͨ
😩 ҰํͰɼͲ͏ͯ͠΋‫ߘݪ‬ͷ‫ه‬ड़͕
൥ࡶʹͳͬͯ͠·͏৔໘͕ग़ͯ͘Δ
• ಛʹυΩϡϝϯτ༻్Ͱ͸‫ܕ‬ͷ‫Ͱ఺؍‬ෳࡶͳσʔλ΋
؆ܿʹॻ͚Δ͜ͱ͕๬·Ε͕ͪ
͓͞Β͍ɿ ௨ৗͷ‫͋͑͞ܕ‬Ε͹ສࣄղܾ͔ʁˠ൱
8
‫಺ޠݴ‬ DSLɿ จࣈྻΛड͚औͬͯύʔε͢ΔίϚϯυΛ
༻ҙ͢Δ
͓͞Β͍ɿ φΠʔϰͳճආࡦ
9
amidakuji(```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
amidakuji([
[Cross ; Line ; … ];
[Empty ; Line ; … ];
[Double; Cross; … ];
…
]);
ίϚϯυͷධՁ͸ಈతʹʢʹ૊൛ॲཧ։࢝‫ʹޙ‬ʣߦͳΘΕΔͷͰ
DSL ͷߏจղੳ΋ಈతʹߦͳΘΕɼߏจΤϥʔͷൃ‫͕ݟ‬஗͍
• Τϥʔ͕ಈతʹग़Δੈքʹ‫ٯ‬໭Γ
‫಺ޠݴ‬ DSL ͚ͩલॲཧͰ͖Ε͹Α͍ͷͰ
ϚΫϩ‫ߏػ‬Λಋೖͯ͠લॲཧͰ͖ΔΑ͏ʹ͠Α͏
ϚΫϩ‫ʹߏػ‬΋༷ʑͳ࣮‫ํݱ‬๏͕͋Δ͕ɼͦͷ͏ͪͰ΋
ଟஈ֊‫ࢉܭ‬ [Davies 1996] [Taha  Sheard 2000] ʹ‫͠ݱ࣮͍ͯͮج‬Α͏
͓͞Β͍ɿ φΠʔϰͳճආࡦͷ໰୊఺ͱͦͷղܾࡦ
10
• ‫͕ࢉܭ‬ෳ਺ͷεςʔδʹ෼͔Εͨҙຯ࿦Λ΋ͭମ‫ܥ‬
ʴͦΕΛ҆શʹߦͳ͏ͨΊͷ‫ܕ‬γεςϜ
– stage 0, 1, 2, … Ͱɼ֤εςʔδ͸࣍ͷεςʔδͷίʔυΛੜ੒
• ͜͜Ͱ͸ stage 0ʢϚΫϩల։ʣͱ stage 1ʢ௨ৗͷධՁʣͷΈ࢖༻
– Lisp ͷ quasiquote ʹࣅΔ
– ྫɿ MetaML [Taha  Sheard 2000]ɼMetaOCaml [Kiselyov 2014]
Կ͕‫͔͍͠خ‬ʁ
• ‫҆ܕ‬શͳಈతίʔυੜ੒ʹ࢖͑Δ
– ʮϚΫϩఆٛʹ‫͚͕ͭܕ‬͹ɼల։‫ޙ‬ͷϓϩάϥϜ΋‫͕ͭ͘ܕ‬ʯ
͓͞Β͍ɿ ଟஈ֊‫ͱࢉܭ‬͸
11
• ϚΫϩ͸ྫ͑͹ҎԼͷΑ͏ͳ‫͏࢖Ͱܗ‬
– ~(…) ͸ϚΫϩల։Ͱ࢖ΘΕΔ stage 0 ͷ஋ͷҾ਺
– ~ ͷ͔ͭͳ͍Ҿ਺͸ίʔυஅยͱͯ͠ల։݁Ռʹ࢖ΘΕΔ stage 1 ͷҾ਺
• ϚΫϩͷఆ͓ٛΑͼద༻ͦΕࣗମ͕ల։ΑΓલʹ‫ࠪ͞ݕܕ‬ΕΔ
• య‫ܕ‬తʹ͸ϚΫϩల։ʢʹίʔυੜ੒ʣ͸
ҰॠͰऴΘΔͷͰɼϚΫϩల։ʹࣦഊ͢Ε͹
“࣮࣭੩తʹ” ΤϥʔใࠂՄೳ
• MacroML [Ganz, Sabry  Taha 2001]
ͱ͍͏ମ‫͍ۙʹܥ‬ఆࣜԽ
‫ޠݴ‬ઃ‫ܭ‬ͷ֓ཁ
12
repeat@~(3){foo}
% ௨ৗͷධՁͷλΠϛϯάͰ͸
% ࠷ॳ͔Β foofoofoo ͱॻ͍ͯ͋ͬͨͷͱಉ͡ʹͳΔ
amidakuji@~(```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
• ࠓճͷมߋɿ ϚΫϩల։Ͱࣦഊͨ࣌͠ʹதஅͯ͠
ΤϥʔͷՕॴΛใࠂ͢ΔͨΊͷ‫ػ‬ೳΛ৽ͨʹ௥Ճ
– DSL จࣈྻͷߏจղੳʹࣦഊͨ͠৔߹ʹ΋
Կߦ໨ͷԿจࣈ໨Ͱࣦഊ͔ͨ͠ϥΠϒϥϦͷਫ४Ͱग़ͤΔ
– @`…` ͰίʔυதͷҐஔ͕औΓग़ͤΔจࣈྻϦςϥϧ͕ॻ͚Δ
– @`…` : string * input-position
– get-input-position : input-position - string * int * int
‫ޠݴ‬ઃ‫ܭ‬ͷ֓ཁ
13
amidakuji@~(@```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
໭Γ஋͸
(ϑΝΠϧ໊, ߦ਺, จࣈ਺)
14
σϞɿ ϚΫϩ͕ਖ਼ৗʹॲཧ͞ΕΔ৔߹
https://drive.google.com/file/d/1l9HeT6Hn_lNn0ptVobVDYwW6T9A8xKvZ/view?usp=sharing
15
σϞɿ DSL ίʔυதʹߏจΤϥʔ͕͋Δ৔߹
https://drive.google.com/file/d/1pbTOSWiflEkTghS3TzlerG5NCcb2iIoI/view?usp=sharing
• ௚ۙͷ౤ೖ͞Εͨมߋ
• ௖͍ͨ PR ౳
• ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ
• ໨Լ࣮૷தͷมߋ
• ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
• ϞδϡʔϧγεςϜͷ F-ing modules Խ
• ·ͱΊ
• σίʔμ/ΤϯίʔμʹखΛՃ͑Δಈ‫ػ‬ɿ
– ϑΥϯτ৘ใΛ SATYSFI ͷਫ४Ͱॊೈʹѻ͑ΔΑ͏ʹ͍ͨ͠
• ߹ࣈɼΧʔχϯάɼࣈ‫੾ܗ‬ସ͑ͱ͍ͬͨ feature ͷ on/off ‫ػ‬ೳ
• άϥϑΟοΫεͷύεͱͯ͠࢖͑ΔΑ͏ʹ͢Δ etc.
– ҟମࣈηϨΫλରԠ
– ͦ΋ͦ΋ OCaml ͰϑΥϯτ৘ใΛ͍͡Γ͍ͨਓ͸
ଟ෼͜ͷੈքʹ 10 ਓ͘Β͍͔͍͠ͳ͍ͷͰࣗ෼Ͱ΍Δ͔͠ͳ͍💪
• ैདྷɿ ‫ط‬ଘϥΠϒϥϦ otfm ΛࣗલͰେ෯֦ு͠࢖༻
– github.com/dbuenzli/otfm → github.com/gfngfn/otfm
– Ұຕ‫Ͱؠ‬εςʔτϑϧͳ࣮૷ɼςετͳ͠
– ‫͜ʹط‬ΕҎ্։ൃΛ‫ܧ‬ଓͨ͘͠ͳ͍ঢ়ଶ
ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
17
• ৽ͨʹθϩ͔Β otfed ͱ͍͏ϥΠϒϥϦΛ࣮૷ͨ͠
– github.com/gfngfn/otfed
– ‫ैʹط‬དྷͷେ෯֦ு൛ otfm ͷαϙʔτൣғΛ໢ཏʢͨ͠͸ͣʣ
• PDF ΁ͷ෦෼ຒΊࠐΈͷ࣮૷΋ OK
– εςʔτϨεɼ҃Δఔ౓͸ςετॻ͍ͯΔ
– OCaml ੡Ͱ͸࠷΋ॆ࣮ͨ͠ OpenType ϥΠϒϥϦʹͳ͔ͬͨ΋
– Ϟδϡʔϧߏ଄Λ੔಴ͯۙ͠ʑ OPAM ʹެ։͍ͨ͠
ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
18
ͱ͍͏Θ͚Ͱ
• ௚ۙͷ౤ೖ͞Εͨมߋ
• ௖͍ͨ PR ౳
• ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ
• ໨Լ࣮૷தͷมߋ
• ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
• ϞδϡʔϧγεςϜͷ F-ing modules Խ
• ·ͱΊ
• ύοέʔδಡࠐΈͷ࢓૊Έ͸΋ͱ΋ͱະ౿ͷ੒Ռใࠂձͷ
਺೔લʹಥ؏޻ࣄͰ࣮૷ͨ͠΋ͷͰɼ͔ͳΓΞυϗοΫ
– ֤ύοέʔδϑΝΠϧؒͷґଘؔ܎Λ΋ͱʹ
τϙϩδΧϧιʔτ͠ɼ1ͭͣͭಉ໊͡લۭؒʹಡΈࠐΉ
• ෳ਺ͷύοέʔδͰఆ໊ٛͨ͠લ͕ͨ·ͨ·ॏෳ͠͏Δ
• ؒ઀తʹ͔͠ґଘ͠ͳ͍ύοέʔδͰఆٛ͞Εͨ΋ͷ΋શͯείʔϓʹೖΔ
– Ϟδϡʔϧ໊͕લۭؒͷ෼཭ʹҰԠ࢖͑Δ͕ɼ
άϩʔόϧʹ΋വ਺΍‫͕ܕ‬ఆٛͰ͖ͯ͠·͏
• ఆ਺ΛϞδϡʔϧ֎͔Βࢦఆ͢Δ‫ه‬ड़͕ࣗવʹ͸Ͱ͖ͣɼ
ϑΥϯτઃఆͳͲ͕ύοέʔδ͝ͱʹܾΊଧͪʹͳΓ΍͍͢
ύοέʔδͱϞδϡʔϧͷ՝୊
20
% ϑΝΠϧઌ಄ʹґଘύοέʔδΛॻ͘
@require: stdjareport
@require: code
⋮
• ϞδϡʔϧγεςϜͷମ‫ͯ͠ͱܥ‬
F-ing modules [Rossberg, Russo  Dreyer 2014] Λ࠾༻͠ҎԼΛαϙʔτ
– ೖΕࢠͷϞδϡʔϧ
– ϑΝϯΫλʢʹ“ϞδϡʔϧΛϞδϡʔϧʹࣸ͢େ͖͍വ਺”ɼ‫ޙ‬ड़ʣ
• 1 ύοέʔδશମ͕ 1 Ϟδϡʔϧʹͳ͍ͬͯΔ΋ͷͷΈೝΊΔ
– ඞཁͳΒͦͷதͰϞδϡʔϧΛೖΕࢠʹ͢Ε͹Α͍
– ෳ਺ϑΝΠϧʹ෼ׂͰ͖Δ‫ߏػ‬͸ద੾ʹ༻ҙ͢Δ
• @require ͳͲͰཅʹґଘͨ͠ύοέʔδ͔͠είʔϓʹೖΕͳ͍
– ൺֱత৽͍͠ଟ͘ͷ‫Ͱޠݴ‬͸͜͏ͳ͍ͬͯΔ͸ͣ
SATYSFI ͱ͸ผʹ։ൃ͍ͯͨ͠‫ޠݴ‬ Sesterl Ͱ͜ΕΒͷ࢓૊ΈΛ
ઌΜͯ͡ಋೖ͠ɼ؆ܿͰ‫ے‬ͷྑ͍ఆࣜԽͩΖ͏ͱ‫͡ײ‬औΕͨ
վળҊ
21
͓͞Β͍ɿ ϑΝϯΫλ͕͋ΔͱͲ͏‫͔͍͠خ‬
22
@require code
module PyCode =
Code.Make(struct
val base-font = (`Menlo`, 1., 0.)
val highlight = Code.Syntax.python3
end)
⋮
{… PyCode.show(`print(“Hi!”)`); …}
• ‫ݱ‬ঢ়ɿ
– code ίϚϯυʹΑͬͯදࣔ͞ΕΔϑΥϯτ͸ܾΊଧͪ
– શମΛมߋ͢Δ API ͷఏ‫ڙ‬΋ՄೳͰ͸͋Δ͕͗ͪ͜ͳ͍
• ͜͏͍ͨ͠ɿ
@require code
⋮
{… code(`print(“Hi!”)`); …}
ϑΝϯΫλCode.Makeʹ
ελΠϧઃఆͷϞδϡʔϧΛ౉͠ɼ
ઃఆ͕൓ө͞Εͨ݁ՌΛ
PyCodeͱ͍͏Ϟδϡʔϧͱͯ͠࢖͏
• ‫ثࠪݕܕ‬͸ͦΕͳΓʹ࣮૷͕ਐߦ
– refactor-internal ͱ͍͏branchͰ࡞‫ۀ‬தʢϦϑΝΫλͰ͸ͳ͍ʣ
– ‫ࡏݱ‬ ʴ3600ߦɼ−1900ߦ ఔ౓ɼମ‫Ͱײ‬͸·࢛ͩ߹໨͘Β͍ʁ
• ‫ޠݴ‬ઃ‫ͯ͠ͱܭ‬ϞδϡʔϧγεςϜͱͷ‫ڞ‬ଘ͕ඇࣗ໌ͳͱ͜Ζɿ
– mutable reference
• relaxed value restriction [Garrigue 2004] ͷ࠶੔උͳͲͷ޻෉͕ཁΔ
• Ͱ͖Ε͹͜ͷࡍ monadic ͳఆࣜԽʹ͍͔ͨ͠΋ʁ
– ଟஈ֊‫ࢉܭ‬
• ௨ৗͷଋറ͸େৎ෉ͦ͏͕ͩɼϚΫϩఆٛ͸‫ڞ‬ଘ͕೉͍͠
– Satyrographos [@na4zagin3] ͱͷ࿈‫͕ܞ‬ඞཁ͔΋
• ‫ݱ‬ঢ়ͷ SATYSFI ͸ OPAM ύοέʔδʹ૬౰͢Δ୯ҐΛ΋ͨͳ͍
ઃ‫ܭ‬ɾ࣮૷ͷਐలͱ༧૝͞ΕΔ೉ॴ
23
• ௚ۙͷ౤ೖ͞Εͨมߋ
• ௖͍ͨ PR ౳
• ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ
• ໨Լ࣮૷தͷมߋ
• ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ
• ϞδϡʔϧγεςϜͷ F-ing modules Խ
• ·ͱΊ
• ࠷ۙಋೖͨ͠ɿ
– ଟஈ૊Έ
– ϚΫϩల։தͷΤϥʔͰҐஔΛใࠂ͢ΔͨΊͷ‫ػ‬ೳ
– ਺ࣜதͰ೚ҙίʔυϙΠϯτ࢖༻Մ
– ௖͍ͨछʑͷ PRɿ
• άϥϑΟοΫεͷઢ‫ܕ‬ม‫׵‬ɼ֎෦ϑΝΠϧಡΈࠐΈɼ
Ruby ґଘআ‫ڈ‬ɼetc.
• ‫ࡏݱ‬ਐߦதɿ
– ϑΥϯτσίʔμ/Τϯίʔμͷ࠶࣮૷ͱ֦ு
– F-ing modules ʹ‫ͮ͘ج‬ϞδϡʔϧγεςϜͷ࣮૷
·ͱΊ
25
• Rowan Davies. A temporal-logic approach to binding-time analysis. In Proc. of LICS’96, pages
184–195, 1996.
• Martin Elsman, Troels Henriksen, Danil Annenkov, and Cosmin E. Oancea. Static interpretation
of higher-order modules in Futhark: functional GPU programming in the large. In Proc. of
ICFP’18, Article 97, 2018.
• Steve Ganz, Amr Sabry, and Walid Taha. Macros as multi-stage computations: type-safe,
generative, binding macros in MacroML. In Proc. of ICFP’01, pages 74–85, 2001.
• Jacques Garrigue. Relaxing the Value Restriction. In Functional and Logic Programming.
FLOPS 2004. Lecture Notes in Computer Science, vol 2998, 2004.
• Oleg Kiselyov. The design and implementation of BER MetaOCaml. In Functional and Logic
Programming. FLOPS 2014. Lecture Notes in Computer Science, vol 8475, 2014.
• Andreas Rossberg, Claudio Russo, and Derek Dreyer. F-ing modules. Journal of Functional
Programming, 24(5), pp. 529–607, 2014.
• Walid Taha and Tim Sheard. Multi-stage programming with explicit annotations. Theoretical
Computer Science, 248 (1-2), pages 211–242, 2000.
ࢀߟจ‫ݙ‬
26

Mais conteúdo relacionado

Mais procurados

Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
 

Mais procurados (20)

SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
Marp入門
Marp入門Marp入門
Marp入門
 
最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く最小カットを使って「燃やす埋める問題」を解く
最小カットを使って「燃やす埋める問題」を解く
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
Ormとの付き合い方
Ormとの付き合い方Ormとの付き合い方
Ormとの付き合い方
 
充足可能性問題のいろいろ
充足可能性問題のいろいろ充足可能性問題のいろいろ
充足可能性問題のいろいろ
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
AVX2時代の正規表現マッチング 〜半群でぐんぐん!〜
 
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 

Semelhante a SATySFi 最近の発展と目下実装中の変更

Parallelization of Graceful Labeling Using Open MP
Parallelization of Graceful Labeling Using Open MPParallelization of Graceful Labeling Using Open MP
Parallelization of Graceful Labeling Using Open MP
IJSRED
 
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
lauratoni4
 
Machine Learning @NECST
Machine Learning @NECSTMachine Learning @NECST
Machine Learning @NECST
NECST Lab @ Politecnico di Milano
 

Semelhante a SATySFi 最近の発展と目下実装中の変更 (20)

Parallelization of Graceful Labeling Using Open MP
Parallelization of Graceful Labeling Using Open MPParallelization of Graceful Labeling Using Open MP
Parallelization of Graceful Labeling Using Open MP
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?
 
What’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributorWhat’s new in 9.6, by PostgreSQL contributor
What’s new in 9.6, by PostgreSQL contributor
 
Bioinformatica p4-io
Bioinformatica p4-ioBioinformatica p4-io
Bioinformatica p4-io
 
Hadoop con 2016_9_10_王經篤(Jing-Doo Wang)
Hadoop con 2016_9_10_王經篤(Jing-Doo Wang)Hadoop con 2016_9_10_王經篤(Jing-Doo Wang)
Hadoop con 2016_9_10_王經篤(Jing-Doo Wang)
 
MateriApps LIVE! の設定
MateriApps LIVE! の設定MateriApps LIVE! の設定
MateriApps LIVE! の設定
 
PGQL: A Language for Graphs
PGQL: A Language for GraphsPGQL: A Language for Graphs
PGQL: A Language for Graphs
 
Future features for openCypher: Schema, Constraints, Subqueries, Configurable...
Future features for openCypher: Schema, Constraints, Subqueries, Configurable...Future features for openCypher: Schema, Constraints, Subqueries, Configurable...
Future features for openCypher: Schema, Constraints, Subqueries, Configurable...
 
Cisco Connect Japan 2014:安定した無線 LAN 上でビジネス クリティカルなアプリケーションを利用するには?
Cisco Connect Japan 2014:安定した無線 LAN 上でビジネス クリティカルなアプリケーションを利用するには?Cisco Connect Japan 2014:安定した無線 LAN 上でビジネス クリティカルなアプリケーションを利用するには?
Cisco Connect Japan 2014:安定した無線 LAN 上でビジネス クリティカルなアプリケーションを利用するには?
 
Scala / Technology evolution
Scala  / Technology evolutionScala  / Technology evolution
Scala / Technology evolution
 
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
Graph Signal Processing for Machine Learning A Review and New Perspectives - ...
 
Pregel - Ezequiel Aguilar
Pregel - Ezequiel AguilarPregel - Ezequiel Aguilar
Pregel - Ezequiel Aguilar
 
Angular js活用事例:filydoc
Angular js活用事例:filydocAngular js活用事例:filydoc
Angular js活用事例:filydoc
 
Clickstream data with spark
Clickstream data with sparkClickstream data with spark
Clickstream data with spark
 
An online semantic enhanced dirichlet model for short text
An online semantic enhanced dirichlet model for short textAn online semantic enhanced dirichlet model for short text
An online semantic enhanced dirichlet model for short text
 
Machine Learning @NECST
Machine Learning @NECSTMachine Learning @NECST
Machine Learning @NECST
 
Leveraging Multiple GPUs and CPUs for Graphlet Counting in Large Networks
Leveraging Multiple GPUs and CPUs for  Graphlet Counting in Large Networks Leveraging Multiple GPUs and CPUs for  Graphlet Counting in Large Networks
Leveraging Multiple GPUs and CPUs for Graphlet Counting in Large Networks
 
cikm14
cikm14cikm14
cikm14
 
PHM 2013
PHM 2013PHM 2013
PHM 2013
 
Workshop NGS data analysis - 2
Workshop NGS data analysis - 2Workshop NGS data analysis - 2
Workshop NGS data analysis - 2
 

Mais de T. Suwa

Mais de T. Suwa (7)

静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi: その後の発展と今後の課題 @第62回プログラミング・シンポジウム
 
SATySFiのこれからの課題たち
SATySFiのこれからの課題たちSATySFiのこれからの課題たち
SATySFiのこれからの課題たち
 
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
静的型つき組版処理システムSATySFi @第61回プログラミング・シンポジウム
 
ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論ラベルなしオプション引数の型システムと型推論
ラベルなしオプション引数の型システムと型推論
 
レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論レコード計算の多相型システムと型推論
レコード計算の多相型システムと型推論
 
Macrodown -MLが使えるML-
Macrodown -MLが使えるML-Macrodown -MLが使えるML-
Macrodown -MLが使えるML-
 
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
TeX言語の展開制御による文書の構造化(TeXユーザの集い2014)
 

Último

Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak HamilCara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Kandungan 087776558899
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
Epec Engineered Technologies
 
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
HenryBriggs2
 
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments""Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
mphochane1998
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
MsecMca
 

Último (20)

Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak HamilCara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
Cara Menggugurkan Sperma Yang Masuk Rahim Biyar Tidak Hamil
 
A Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna MunicipalityA Study of Urban Area Plan for Pabna Municipality
A Study of Urban Area Plan for Pabna Municipality
 
Bridge Jacking Design Sample Calculation.pptx
Bridge Jacking Design Sample Calculation.pptxBridge Jacking Design Sample Calculation.pptx
Bridge Jacking Design Sample Calculation.pptx
 
A CASE STUDY ON CERAMIC INDUSTRY OF BANGLADESH.pptx
A CASE STUDY ON CERAMIC INDUSTRY OF BANGLADESH.pptxA CASE STUDY ON CERAMIC INDUSTRY OF BANGLADESH.pptx
A CASE STUDY ON CERAMIC INDUSTRY OF BANGLADESH.pptx
 
Standard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power PlayStandard vs Custom Battery Packs - Decoding the Power Play
Standard vs Custom Battery Packs - Decoding the Power Play
 
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced LoadsFEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
FEA Based Level 3 Assessment of Deformed Tanks with Fluid Induced Loads
 
Thermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.pptThermal Engineering -unit - III & IV.ppt
Thermal Engineering -unit - III & IV.ppt
 
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
scipt v1.pptxcxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...
 
Design For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the startDesign For Accessibility: Getting it right from the start
Design For Accessibility: Getting it right from the start
 
School management system project Report.pdf
School management system project Report.pdfSchool management system project Report.pdf
School management system project Report.pdf
 
2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects2016EF22_0 solar project report rooftop projects
2016EF22_0 solar project report rooftop projects
 
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments""Lesotho Leaps Forward: A Chronicle of Transformative Developments"
"Lesotho Leaps Forward: A Chronicle of Transformative Developments"
 
Thermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - VThermal Engineering-R & A / C - unit - V
Thermal Engineering-R & A / C - unit - V
 
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
Navigating Complexity: The Role of Trusted Partners and VIAS3D in Dassault Sy...
 
Online food ordering system project report.pdf
Online food ordering system project report.pdfOnline food ordering system project report.pdf
Online food ordering system project report.pdf
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
 
Introduction to Serverless with AWS Lambda
Introduction to Serverless with AWS LambdaIntroduction to Serverless with AWS Lambda
Introduction to Serverless with AWS Lambda
 
DC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equationDC MACHINE-Motoring and generation, Armature circuit equation
DC MACHINE-Motoring and generation, Armature circuit equation
 
Rums floating Omkareshwar FSPV IM_16112021.pdf
Rums floating Omkareshwar FSPV IM_16112021.pdfRums floating Omkareshwar FSPV IM_16112021.pdf
Rums floating Omkareshwar FSPV IM_16112021.pdf
 

SATySFi 最近の発展と目下実装中の変更

  • 1. ࠷ۙͷൃలͱ ໨Լ࣮૷தͷมߋ @ SATYSFI Conf 2021 2021 ೥ 6 ݄ 26 ೔ ( @bd_gfngfn)
  • 3. ࠷΋؆ܿʹ‫ͱ͏ݴ‬ • օ͞Μͷ੒Ռɿ ຊ౰ʹૉ੖Β͍͠ • Θͨ͠ͷਐḿɿ μϝͰ͢! ※΋ͪΖΜԿ΋΍ͬͯͳ͍Θ͚Ͱ͸ͳ͍ɿ • SATYSFI ຊମͷ։ൃ΋ਐߦத – ϚΫϩల։࣌ͷΤϥʔҐஔใࠂ‫ػ‬ೳΛ v0.0.6 ͰϦϦʔε • ͜ΕͰϚΫϩ‫ػ‬ೳ͕࠷௿‫༻࣮ݶ‬తʹͳͬͨ – ϞδϡʔϧγεςϜͷ F-ing modules ԽʴͦΕʹ൐͏มߋʢ్தʣ – OpenType ϥΠϒϥϦͷ࠶࣮૷ʴЋɿ otfm → otfed • Sesterl ͱ͍͏ผͷ੩త‫ޠݴ͖ͭܕ‬Λ৽ͨʹ࣮૷͍ͯͨ͠ – ಘΒΕͨ‫ޠݴ‬ઃ‫ܭ‬ͷ஌‫͕ݟ‬ SATYSFI ʹ΋ϑΟʔυόοΫͰ͖ͦ͏ ࠓճ͸͜ΕΒͷࡶવͱͨ͠঺հͰ͢ ֓ཁ 3
  • 4. • ௚ۙͷ౤ೖ͞Εͨมߋ • ௖͍ͨ PR ౳ • ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ • ໨Լ࣮૷தͷมߋ • ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ • ϞδϡʔϧγεςϜͷ F-ing modules Խ • ·ͱΊ
  • 5. • v0.0.6 (2021-02-06) – ઢ‫ܕ‬ม‫׵‬ linear-transform-graphics [@monaqa] – ଟஈ૊Έ page-break-multicolumn – overfull/underfull ՄࢹԽΦϓγϣϯ —-debug-show-overfull – ͦͷଞ༗ࢤͷํʑʹΑΔଟ͘ͷमਖ਼ʢCHANGELOG ࢀরʣ ௚ۙͷओͳมߋ 5
  • 6. • v0.0.6 (2021-02-06) – ઢ‫ܕ‬ม‫׵‬ linear-transform-graphics [@monaqa] – ଟஈ૊Έ page-break-multicolumn – overfull/underfull ՄࢹԽΦϓγϣϯ —-debug-show-overfull – ͦͷଞ༗ࢤͷํʑʹΑΔଟ͘ͷमਖ਼ʢCHANGELOG ࢀরʣ • v0.0.7 ༧ఆ – ֎෦ϑΝΠϧಡΈࠐΈ read-file [@puripuri2100] – document information dictionary ग़ྗ [@puripuri2100] – ॲཧ‫ܥ‬Ϗϧυ࣌ͷ Ruby ඇґଘԽ [@leque] • vminstdef.yaml ͷ಺༰͸ vminst.ml ʹҠߦ – ਺ࣜதͷʢҰ෦‫߸ه‬আ͘ʣ೚ҙ Unicode ίʔυϙΠϯτ‫ڐ‬༰ • set-math-charͰ Roman, Italic ౳ͷελΠϧʹԠͯ͡ม‫׵‬΋Մೳ ௚ۙͷओͳมߋ 6
  • 7. • ௚ۙͷ౤ೖ͞Εͨมߋ • ௖͍ͨ PR ౳ • ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ • ໨Լ࣮૷தͷมߋ • ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ • ϞδϡʔϧγεςϜͷ F-ing modules Խ • ·ͱΊ
  • 8. 😄 ‫ܕ‬ͷ͓͔͛Ͱਝ଎Ͱ਌੾ͳΤϥʔใࠂ͕खʹೖͬͨ 😩 ҰํͰɼͲ͏ͯ͠΋‫ߘݪ‬ͷ‫ه‬ड़͕ ൥ࡶʹͳͬͯ͠·͏৔໘͕ग़ͯ͘Δ • ಛʹυΩϡϝϯτ༻్Ͱ͸‫ܕ‬ͷ‫Ͱ఺؍‬ෳࡶͳσʔλ΋ ؆ܿʹॻ͚Δ͜ͱ͕๬·Ε͕ͪ ͓͞Β͍ɿ ௨ৗͷ‫͋͑͞ܕ‬Ε͹ສࣄղܾ͔ʁˠ൱ 8
  • 9. ‫಺ޠݴ‬ DSLɿ จࣈྻΛड͚औͬͯύʔε͢ΔίϚϯυΛ ༻ҙ͢Δ ͓͞Β͍ɿ φΠʔϰͳճආࡦ 9 amidakuji(``` |X|-|=|/| | | |-||-|X| |=|X|-||=| |-||-|=|-| |X|=|-|| | ```); amidakuji([ [Cross ; Line ; … ]; [Empty ; Line ; … ]; [Double; Cross; … ]; … ]);
  • 10. ίϚϯυͷධՁ͸ಈతʹʢʹ૊൛ॲཧ։࢝‫ʹޙ‬ʣߦͳΘΕΔͷͰ DSL ͷߏจղੳ΋ಈతʹߦͳΘΕɼߏจΤϥʔͷൃ‫͕ݟ‬஗͍ • Τϥʔ͕ಈతʹग़Δੈքʹ‫ٯ‬໭Γ ‫಺ޠݴ‬ DSL ͚ͩલॲཧͰ͖Ε͹Α͍ͷͰ ϚΫϩ‫ߏػ‬Λಋೖͯ͠લॲཧͰ͖ΔΑ͏ʹ͠Α͏ ϚΫϩ‫ʹߏػ‬΋༷ʑͳ࣮‫ํݱ‬๏͕͋Δ͕ɼͦͷ͏ͪͰ΋ ଟஈ֊‫ࢉܭ‬ [Davies 1996] [Taha Sheard 2000] ʹ‫͠ݱ࣮͍ͯͮج‬Α͏ ͓͞Β͍ɿ φΠʔϰͳճආࡦͷ໰୊఺ͱͦͷղܾࡦ 10
  • 11. • ‫͕ࢉܭ‬ෳ਺ͷεςʔδʹ෼͔Εͨҙຯ࿦Λ΋ͭମ‫ܥ‬ ʴͦΕΛ҆શʹߦͳ͏ͨΊͷ‫ܕ‬γεςϜ – stage 0, 1, 2, … Ͱɼ֤εςʔδ͸࣍ͷεςʔδͷίʔυΛੜ੒ • ͜͜Ͱ͸ stage 0ʢϚΫϩల։ʣͱ stage 1ʢ௨ৗͷධՁʣͷΈ࢖༻ – Lisp ͷ quasiquote ʹࣅΔ – ྫɿ MetaML [Taha Sheard 2000]ɼMetaOCaml [Kiselyov 2014] Կ͕‫͔͍͠خ‬ʁ • ‫҆ܕ‬શͳಈతίʔυੜ੒ʹ࢖͑Δ – ʮϚΫϩఆٛʹ‫͚͕ͭܕ‬͹ɼల։‫ޙ‬ͷϓϩάϥϜ΋‫͕ͭ͘ܕ‬ʯ ͓͞Β͍ɿ ଟஈ֊‫ͱࢉܭ‬͸ 11
  • 12. • ϚΫϩ͸ྫ͑͹ҎԼͷΑ͏ͳ‫͏࢖Ͱܗ‬ – ~(…) ͸ϚΫϩల։Ͱ࢖ΘΕΔ stage 0 ͷ஋ͷҾ਺ – ~ ͷ͔ͭͳ͍Ҿ਺͸ίʔυஅยͱͯ͠ల։݁Ռʹ࢖ΘΕΔ stage 1 ͷҾ਺ • ϚΫϩͷఆ͓ٛΑͼద༻ͦΕࣗମ͕ల։ΑΓલʹ‫ࠪ͞ݕܕ‬ΕΔ • య‫ܕ‬తʹ͸ϚΫϩల։ʢʹίʔυੜ੒ʣ͸ ҰॠͰऴΘΔͷͰɼϚΫϩల։ʹࣦഊ͢Ε͹ “࣮࣭੩తʹ” ΤϥʔใࠂՄೳ • MacroML [Ganz, Sabry Taha 2001] ͱ͍͏ମ‫͍ۙʹܥ‬ఆࣜԽ ‫ޠݴ‬ઃ‫ܭ‬ͷ֓ཁ 12 repeat@~(3){foo} % ௨ৗͷධՁͷλΠϛϯάͰ͸ % ࠷ॳ͔Β foofoofoo ͱॻ͍ͯ͋ͬͨͷͱಉ͡ʹͳΔ amidakuji@~(``` |X|-|=|/| | | |-||-|X| |=|X|-||=| |-||-|=|-| |X|=|-|| | ```);
  • 13. • ࠓճͷมߋɿ ϚΫϩల։Ͱࣦഊͨ࣌͠ʹதஅͯ͠ ΤϥʔͷՕॴΛใࠂ͢ΔͨΊͷ‫ػ‬ೳΛ৽ͨʹ௥Ճ – DSL จࣈྻͷߏจղੳʹࣦഊͨ͠৔߹ʹ΋ Կߦ໨ͷԿจࣈ໨Ͱࣦഊ͔ͨ͠ϥΠϒϥϦͷਫ४Ͱग़ͤΔ – @`…` ͰίʔυதͷҐஔ͕औΓग़ͤΔจࣈྻϦςϥϧ͕ॻ͚Δ – @`…` : string * input-position – get-input-position : input-position - string * int * int ‫ޠݴ‬ઃ‫ܭ‬ͷ֓ཁ 13 amidakuji@~(@``` |X|-|=|/| | | |-||-|X| |=|X|-||=| |-||-|=|-| |X|=|-|| | ```); ໭Γ஋͸ (ϑΝΠϧ໊, ߦ਺, จࣈ਺)
  • 16. • ௚ۙͷ౤ೖ͞Εͨมߋ • ௖͍ͨ PR ౳ • ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ • ໨Լ࣮૷தͷมߋ • ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ • ϞδϡʔϧγεςϜͷ F-ing modules Խ • ·ͱΊ
  • 17. • σίʔμ/ΤϯίʔμʹखΛՃ͑Δಈ‫ػ‬ɿ – ϑΥϯτ৘ใΛ SATYSFI ͷਫ४Ͱॊೈʹѻ͑ΔΑ͏ʹ͍ͨ͠ • ߹ࣈɼΧʔχϯάɼࣈ‫੾ܗ‬ସ͑ͱ͍ͬͨ feature ͷ on/off ‫ػ‬ೳ • άϥϑΟοΫεͷύεͱͯ͠࢖͑ΔΑ͏ʹ͢Δ etc. – ҟମࣈηϨΫλରԠ – ͦ΋ͦ΋ OCaml ͰϑΥϯτ৘ใΛ͍͡Γ͍ͨਓ͸ ଟ෼͜ͷੈքʹ 10 ਓ͘Β͍͔͍͠ͳ͍ͷͰࣗ෼Ͱ΍Δ͔͠ͳ͍💪 • ैདྷɿ ‫ط‬ଘϥΠϒϥϦ otfm ΛࣗલͰେ෯֦ு͠࢖༻ – github.com/dbuenzli/otfm → github.com/gfngfn/otfm – Ұຕ‫Ͱؠ‬εςʔτϑϧͳ࣮૷ɼςετͳ͠ – ‫͜ʹط‬ΕҎ্։ൃΛ‫ܧ‬ଓͨ͘͠ͳ͍ঢ়ଶ ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ 17
  • 18. • ৽ͨʹθϩ͔Β otfed ͱ͍͏ϥΠϒϥϦΛ࣮૷ͨ͠ – github.com/gfngfn/otfed – ‫ैʹط‬དྷͷେ෯֦ு൛ otfm ͷαϙʔτൣғΛ໢ཏʢͨ͠͸ͣʣ • PDF ΁ͷ෦෼ຒΊࠐΈͷ࣮૷΋ OK – εςʔτϨεɼ҃Δఔ౓͸ςετॻ͍ͯΔ – OCaml ੡Ͱ͸࠷΋ॆ࣮ͨ͠ OpenType ϥΠϒϥϦʹͳ͔ͬͨ΋ – Ϟδϡʔϧߏ଄Λ੔಴ͯۙ͠ʑ OPAM ʹެ։͍ͨ͠ ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ 18 ͱ͍͏Θ͚Ͱ
  • 19. • ௚ۙͷ౤ೖ͞Εͨมߋ • ௖͍ͨ PR ౳ • ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ • ໨Լ࣮૷தͷมߋ • ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ • ϞδϡʔϧγεςϜͷ F-ing modules Խ • ·ͱΊ
  • 20. • ύοέʔδಡࠐΈͷ࢓૊Έ͸΋ͱ΋ͱະ౿ͷ੒Ռใࠂձͷ ਺೔લʹಥ؏޻ࣄͰ࣮૷ͨ͠΋ͷͰɼ͔ͳΓΞυϗοΫ – ֤ύοέʔδϑΝΠϧؒͷґଘؔ܎Λ΋ͱʹ τϙϩδΧϧιʔτ͠ɼ1ͭͣͭಉ໊͡લۭؒʹಡΈࠐΉ • ෳ਺ͷύοέʔδͰఆ໊ٛͨ͠લ͕ͨ·ͨ·ॏෳ͠͏Δ • ؒ઀తʹ͔͠ґଘ͠ͳ͍ύοέʔδͰఆٛ͞Εͨ΋ͷ΋શͯείʔϓʹೖΔ – Ϟδϡʔϧ໊͕લۭؒͷ෼཭ʹҰԠ࢖͑Δ͕ɼ άϩʔόϧʹ΋വ਺΍‫͕ܕ‬ఆٛͰ͖ͯ͠·͏ • ఆ਺ΛϞδϡʔϧ֎͔Βࢦఆ͢Δ‫ه‬ड़͕ࣗવʹ͸Ͱ͖ͣɼ ϑΥϯτઃఆͳͲ͕ύοέʔδ͝ͱʹܾΊଧͪʹͳΓ΍͍͢ ύοέʔδͱϞδϡʔϧͷ՝୊ 20 % ϑΝΠϧઌ಄ʹґଘύοέʔδΛॻ͘ @require: stdjareport @require: code ⋮
  • 21. • ϞδϡʔϧγεςϜͷମ‫ͯ͠ͱܥ‬ F-ing modules [Rossberg, Russo Dreyer 2014] Λ࠾༻͠ҎԼΛαϙʔτ – ೖΕࢠͷϞδϡʔϧ – ϑΝϯΫλʢʹ“ϞδϡʔϧΛϞδϡʔϧʹࣸ͢େ͖͍വ਺”ɼ‫ޙ‬ड़ʣ • 1 ύοέʔδશମ͕ 1 Ϟδϡʔϧʹͳ͍ͬͯΔ΋ͷͷΈೝΊΔ – ඞཁͳΒͦͷதͰϞδϡʔϧΛೖΕࢠʹ͢Ε͹Α͍ – ෳ਺ϑΝΠϧʹ෼ׂͰ͖Δ‫ߏػ‬͸ద੾ʹ༻ҙ͢Δ • @require ͳͲͰཅʹґଘͨ͠ύοέʔδ͔͠είʔϓʹೖΕͳ͍ – ൺֱత৽͍͠ଟ͘ͷ‫Ͱޠݴ‬͸͜͏ͳ͍ͬͯΔ͸ͣ SATYSFI ͱ͸ผʹ։ൃ͍ͯͨ͠‫ޠݴ‬ Sesterl Ͱ͜ΕΒͷ࢓૊ΈΛ ઌΜͯ͡ಋೖ͠ɼ؆ܿͰ‫ے‬ͷྑ͍ఆࣜԽͩΖ͏ͱ‫͡ײ‬औΕͨ վળҊ 21
  • 22. ͓͞Β͍ɿ ϑΝϯΫλ͕͋ΔͱͲ͏‫͔͍͠خ‬ 22 @require code module PyCode = Code.Make(struct val base-font = (`Menlo`, 1., 0.) val highlight = Code.Syntax.python3 end) ⋮ {… PyCode.show(`print(“Hi!”)`); …} • ‫ݱ‬ঢ়ɿ – code ίϚϯυʹΑͬͯදࣔ͞ΕΔϑΥϯτ͸ܾΊଧͪ – શମΛมߋ͢Δ API ͷఏ‫ڙ‬΋ՄೳͰ͸͋Δ͕͗ͪ͜ͳ͍ • ͜͏͍ͨ͠ɿ @require code ⋮ {… code(`print(“Hi!”)`); …} ϑΝϯΫλCode.Makeʹ ελΠϧઃఆͷϞδϡʔϧΛ౉͠ɼ ઃఆ͕൓ө͞Εͨ݁ՌΛ PyCodeͱ͍͏Ϟδϡʔϧͱͯ͠࢖͏
  • 23. • ‫ثࠪݕܕ‬͸ͦΕͳΓʹ࣮૷͕ਐߦ – refactor-internal ͱ͍͏branchͰ࡞‫ۀ‬தʢϦϑΝΫλͰ͸ͳ͍ʣ – ‫ࡏݱ‬ ʴ3600ߦɼ−1900ߦ ఔ౓ɼମ‫Ͱײ‬͸·࢛ͩ߹໨͘Β͍ʁ • ‫ޠݴ‬ઃ‫ͯ͠ͱܭ‬ϞδϡʔϧγεςϜͱͷ‫ڞ‬ଘ͕ඇࣗ໌ͳͱ͜Ζɿ – mutable reference • relaxed value restriction [Garrigue 2004] ͷ࠶੔උͳͲͷ޻෉͕ཁΔ • Ͱ͖Ε͹͜ͷࡍ monadic ͳఆࣜԽʹ͍͔ͨ͠΋ʁ – ଟஈ֊‫ࢉܭ‬ • ௨ৗͷଋറ͸େৎ෉ͦ͏͕ͩɼϚΫϩఆٛ͸‫ڞ‬ଘ͕೉͍͠ – Satyrographos [@na4zagin3] ͱͷ࿈‫͕ܞ‬ඞཁ͔΋ • ‫ݱ‬ঢ়ͷ SATYSFI ͸ OPAM ύοέʔδʹ૬౰͢Δ୯ҐΛ΋ͨͳ͍ ઃ‫ܭ‬ɾ࣮૷ͷਐలͱ༧૝͞ΕΔ೉ॴ 23
  • 24. • ௚ۙͷ౤ೖ͞Εͨมߋ • ௖͍ͨ PR ౳ • ϚΫϩల։தͷΤϥʔใࠂ‫ػ‬ೳ • ໨Լ࣮૷தͷมߋ • ϑΥϯτσίʔμ/ΤϯίʔμͷҠߦ • ϞδϡʔϧγεςϜͷ F-ing modules Խ • ·ͱΊ
  • 25. • ࠷ۙಋೖͨ͠ɿ – ଟஈ૊Έ – ϚΫϩల։தͷΤϥʔͰҐஔΛใࠂ͢ΔͨΊͷ‫ػ‬ೳ – ਺ࣜதͰ೚ҙίʔυϙΠϯτ࢖༻Մ – ௖͍ͨछʑͷ PRɿ • άϥϑΟοΫεͷઢ‫ܕ‬ม‫׵‬ɼ֎෦ϑΝΠϧಡΈࠐΈɼ Ruby ґଘআ‫ڈ‬ɼetc. • ‫ࡏݱ‬ਐߦதɿ – ϑΥϯτσίʔμ/Τϯίʔμͷ࠶࣮૷ͱ֦ு – F-ing modules ʹ‫ͮ͘ج‬ϞδϡʔϧγεςϜͷ࣮૷ ·ͱΊ 25
  • 26. • Rowan Davies. A temporal-logic approach to binding-time analysis. In Proc. of LICS’96, pages 184–195, 1996. • Martin Elsman, Troels Henriksen, Danil Annenkov, and Cosmin E. Oancea. Static interpretation of higher-order modules in Futhark: functional GPU programming in the large. In Proc. of ICFP’18, Article 97, 2018. • Steve Ganz, Amr Sabry, and Walid Taha. Macros as multi-stage computations: type-safe, generative, binding macros in MacroML. In Proc. of ICFP’01, pages 74–85, 2001. • Jacques Garrigue. Relaxing the Value Restriction. In Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998, 2004. • Oleg Kiselyov. The design and implementation of BER MetaOCaml. In Functional and Logic Programming. FLOPS 2014. Lecture Notes in Computer Science, vol 8475, 2014. • Andreas Rossberg, Claudio Russo, and Derek Dreyer. F-ing modules. Journal of Functional Programming, 24(5), pp. 529–607, 2014. • Walid Taha and Tim Sheard. Multi-stage programming with explicit annotations. Theoretical Computer Science, 248 (1-2), pages 211–242, 2000. ࢀߟจ‫ݙ‬ 26