Mais conteúdo relacionado Semelhante a SATySFi 最近の発展と目下実装中の変更 (20) SATySFi 最近の発展と目下実装中の変更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 Խ
• ·ͱΊ
9. ޠݴ DSLɿ จࣈྻΛड͚औͬͯύʔε͢ΔίϚϯυΛ
༻ҙ͢Δ
͓͞Β͍ɿ φΠʔϰͳճආࡦ
9
amidakuji(```
|X|-|=|/| |
| |-||-|X|
|=|X|-||=|
|-||-|=|-|
|X|=|-|| |
```);
amidakuji([
[Cross ; Line ; … ];
[Empty ; Line ; … ];
[Double; Cross; … ];
…
]);
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 Խ
• ·ͱΊ
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