[icfp] other macro systems, in conclusion

This commit is contained in:
ben 2016-03-14 19:58:15 -04:00
parent cfedb7ed4f
commit b14dcef86c
2 changed files with 40 additions and 20 deletions

View File

@ -30,6 +30,7 @@
(define/short icfp "ICFP" (string-append ACM International Conference "on Functional Programming")) (define/short icfp "ICFP" (string-append ACM International Conference "on Functional Programming"))
(define/short pldi "PLDI" (string-append ACM Conference "on Programming Language Design and Implementation")) (define/short pldi "PLDI" (string-append ACM Conference "on Programming Language Design and Implementation"))
(define/short popl "POPL" (string-append ACM Symposium "on Principles of Programming Languages")) (define/short popl "POPL" (string-append ACM Symposium "on Principles of Programming Languages"))
(define/short plpv "PLPV" (string-append ACM Workshop "Programming Languages meets Program Verification"))
(define/short icse "ICSE" "International Conference on Software Engineering") (define/short icse "ICSE" "International Conference on Software Engineering")
(define/short lncs "LNCS" "Lecture Notes in Computer Science") (define/short lncs "LNCS" "Lecture Notes in Computer Science")
(define/short sigmod "SIGMOD" (string-append ACM "SIGMOD " International Conference "on Management of Data")) (define/short sigmod "SIGMOD" (string-append ACM "SIGMOD " International Conference "on Management of Data"))
@ -57,6 +58,7 @@
(define/short tlca "TLCA" (string-append International Conference "Typed Lambda Calculi and Applications")) (define/short tlca "TLCA" (string-append International Conference "Typed Lambda Calculi and Applications"))
(define/short i&c "Info. & Comp." "Information and Computation") (define/short i&c "Info. & Comp." "Information and Computation")
(define/short haskell "Haskell Workshop") (define/short haskell "Haskell Workshop")
(define/short scala "SCALA" (string-append "Workshop on Scala"))
(define/short tcs "Theoretical Computer Science") (define/short tcs "Theoretical Computer Science")
(define/short tacs (string-append International Symposium "Theoretical Aspects of Computer Science")) (define/short tacs (string-append International Symposium "Theoretical Aspects of Computer Science"))
(define/short ml-workshop "ML Workshop") (define/short ml-workshop "ML Workshop")
@ -1144,3 +1146,25 @@
#:author "Richard A. Eisenberg and Stephanie Weirich" #:author "Richard A. Eisenberg and Stephanie Weirich"
#:location (proceedings-location haskell #:pages '(117 130)) #:location (proceedings-location haskell #:pages '(117 130))
#:date 2012)) #:date 2012))
(define ks-plpv-2006
(make-bib
#:title "Lightweight static capabilities"
#:author "Oleg Kiselyov and Chung-chieh Shan"
#:location (proceedings-location plpv)
#:date 2006))
(define b-scala-2013
(make-bib
#:title "Scala Macros: Let our Powers Combine!"
#:author "Eugene Burmako"
#:location (proceedings-location scala)
#:date 2013))
(define ro-gpce-2010
(make-bib
#:title "Lightweight Modular Staging: A Pragmatic Approach to Runtime Code Generation and Compiled DSLs"
#:author (authors "Tiark Rompf" "Martin Odersky")
#:location (proceedings-location gpce)
#:date 2010))

View File

@ -18,39 +18,35 @@ Each application in @Secref{sec:usage} is a way that constant data
A key thesis behind this work is that the analysis can be implemented A key thesis behind this work is that the analysis can be implemented
in a variety of languages using their existing type and syntax extension in a variety of languages using their existing type and syntax extension
systems. Indeed: systems.
Indeed:
@; TODO shorten this
@parag{Typed Clojure} has a flexible macro system derived from Common Lisp. @parag{Typed Clojure} has a flexible macro system derived from Common Lisp.
Built-in functions @tt{macroexpand} and @tt{with-meta} correspond to Racket's Built-in functions @tt{macroexpand} and @tt{with-meta} correspond to Racket's
@racket[local-expand] and @racket[syntax-property]; with help from a library @racket[local-expand] and @racket[syntax-property]; with help from a library
implementing identifier macros,@note{@url["https://github.com/clojure/tools.macro"]} implementing identifier macros,@note{@url["https://github.com/clojure/tools.macro"]}
we were able to implement a basic prototype in untyped Clojure. we were able to implement a basic prototype untyped Clojure.
@todo{does TC have macros? can I use macros from untyped code if I type them?}
@parag{Haskell} Template Haskell @parag{Template Haskell} could reproduce all the examples in @Secref{sec:usage}
as they are written, with constants in-line at each call site.
We are less sure how to associate and retrieve data regarding bound variables
at compile-time, idiomatically.
@parag{OCaml} ppx @parag{OCaml} ppx
@parag{Rust} has a stable, pattern-based macro system which unfortunately @parag{Rust} has a stable, pattern-based macro system and a powerful API
seems too weak to reimplement our analysis. for writing compiler plugins.
As of Rust 1.7,@note{@url["https://doc.rust-lang.org/reference.html"]} The macro system appears too weak to reimplement our analyses,
the basic macros can only specify input/output pairs. but it would be interesting to explore the plugin API and try reimplementing
There is no way to do complex branching within a condition, ideas like syntax classes and rename transformers.
such as throwing an exception if a format string is given too many arguments.
Just parsing the format string would be challenging.
However Rust also has an interface for writing arbitrarily powerful compiler
plugins.
It would be interesting to reproduce our results as a plugin.
@parag{Scala} users have a few macro systems to choose from. @parag{Scala} users have at least two macro systems to choose from.
@; We investigated Scala Macros and TODO. Both Scala Macros@~cite[b-scala-2013] and Lightweight Modular Staging@~cite[ro-gpce-2010]
@; https://doc.rust-lang.org/book/compiler-plugins.html
With out last words, we look to the future. With out last words, we look to the future.