(Arne Babenhauserheide)
2016-01-27: wisp for fosdem wisp for fosdem
diff --git a/docs/fosdem2016.org b/docs/fosdem2016.org --- a/docs/fosdem2016.org +++ b/docs/fosdem2016.org @@ -7,7 +7,7 @@ #+BEAMER_THEME: Boadilla #+options: toc:nil -* Wisp +* Wisp - SRFI-119 #+latex: \vspace{1.3cm} @@ -40,7 +40,7 @@ but crave the simplicity and power of Li \end{center} -* Why wisp? +* Why Wisp? @@ -80,15 +80,17 @@ Hello World! :BEAMER_env: quote :END: -- The first and last letter are important for word recognition¹ +- The first and last letter are important for word recognition.¹ -- 70% of the lines in the Guile scheme source start with a paren \Rightarrow noise +- Over 70% of the codelines in the Guile scheme source start with a paren \Rightarrow ceremony. + +- Many people avoid Lisp-like languages because of the parens. \footnotesize ¹: Though not all-important. See \\ [[http://www.mrc-cbu.cam.ac.uk/people/matt.davis/cmabridge/][www.mrc-cbu.cam.ac.uk/people/matt.davis/cmabridge/]] -* The most common letters: a strength of Lisp and Scheme +* The most common letters: Lisp and Scheme are awesome ** @@ -132,7 +134,7 @@ Hello World! \footnotesize ¹: From letter distributions in newspapers, see: \\ [[https://bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/1-gramme.arne.txt][bitbucket.org/ArneBab/evolve-keyboard-layout/src/tip/1-gramme.arne.txt]] -* Wisp +* Wisp in a nutshell ** :B_columns: :PROPERTIES: :BEAMER_env: columns @@ -176,30 +178,132 @@ define : factorial n \footnotesize -- Wisp uses the minimal syntax required to represent arbitrary structures: \\ Syntax justification: [[http://draketo.de/english/wisp#sec-4][draketo.de/english/wisp#sec-4]] +- indent as with parens, dot-prefix, inline-:, and use SRFI-105. -- Many more examples in “From Python to Guile Scheme”: \\ [[http://draketo.de/py2guile][draketo.de/py2guile]] \rightarrow [[http://draketo.de/proj/py2guile/py2guile.pdf][draketo.de/proj/py2guile/py2guile.pdf]] +- Wisp uses the minimal syntax required to represent arbitrary structure: \\ Syntax justification: [[http://draketo.de/english/wisp#sec-4][draketo.de/english/wisp#sec-4]] + +- Many more examples in “From Python to Guile Scheme”: \\ info: [[http://draketo.de/py2guile][draketo.de/py2guile]] \\ download: [[http://draketo.de/proj/py2guile/py2guile.pdf][draketo.de/proj/py2guile/py2guile.pdf]] + +* Implementation + +** REPL and reader (language wisp spec) :B_block:BMCOL: + :PROPERTIES: + :BEAMER_col: 0.57 + :BEAMER_env: block + :END: + +#+BEGIN_SRC wisp + define-language wisp + . #:title "Wisp Scheme Syntax.." + . #:reader read-one-wisp-sexp + . #:compilers `( + (tree-il . ,compile-tree-il)) + . #:decompilers `( + (tree-il . ,decompile-tree-il)) + . #:evaluator (lambda (x module) + primitive-eval x) + . #:printer write + . #:make-default-environment + lambda : + let : : m : make-fresh-user-module + module-define! m 'current-reader + make-fluid + module-set! m 'format simple-format + . m +#+END_SRC + +** Preprocessor (wisp.scm) :B_block:BMCOL: + :PROPERTIES: + :BEAMER_col: 0.39 + :BEAMER_env: block + :END: + +#+BEGIN_SRC sh +guile wisp.scm tests/hello.w +#+END_SRC + +#+BEGIN_SRC scheme +(define (hello who) + (format #t "~A ~A!\n" + "Hello" who)) +(hello "Wisp") +#+END_SRC + +\footnotesize +(Plan B: You can always go back) + * Applications? +** :BMCOL: + :PROPERTIES: + :BEAMER_col: 0.50 + :END: -* Why try wisp? +*** Example: User Scripts -- Plan B: +#+BEGIN_SRC wisp +Enter : First_Witch + Second_Witch + Third_Witch -* Thank you +First_Witch + When shall we three meet again + In thunder, lightning, or in rain? +#+END_SRC -** Thank you! +*** :B_ignoreheading: + :PROPERTIES: + :BEAMER_env: ignoreheading + :END: + +This prints + +*** :B_block: + :PROPERTIES: + :BEAMER_env: block + :END: +\footnotesize +#+BEGIN_EXAMPLE +First Witch + When shall we three meet again + In thunder, lightning, or in rain? +#+END_EXAMPLE + +*** :B_ignoreheading: + :PROPERTIES: + :BEAMER_env: ignoreheading + :END: + +\footnotesize +- [[http://draketo.de/english/wisp/shakespeare][draketo.de/english/wisp/shakespeare]] +- Templates, executable pseudocode, REPL-interaction, ... + +* Thank you! ** :B_quote: :PROPERTIES: :BEAMER_env: quote :END: -»ArneBab's alternate sexp syntax is best I've seen; pythonesque, hides parens but keeps power« — Christopher Webber +»ArneBab's alternate sexp syntax is best I've seen; pythonesque, hides parens but keeps power« — Christopher Webber \\ \rightarrow [[http://dustycloud.org/blog/wisp-lisp-alternative/][dustycloud.org/blog/wisp-lisp-alternative/]] -** Try wisp +\vspace{0.35cm} -[[http://draketo.de/english/wisp][draketo.de/english/wisp]] +** Try Wisp + +#+BEGIN_SRC sh +guix package -i guile guile-wisp +guile --language=wisp +#+END_SRC + +#+BEGIN_SRC sh +wget https://bitbucket.org/ArneBab/wisp/downloads/wisp-0.9.0.tar.gz; +tar xf wisp-0.9.0.tar.gz ; cd wisp-0.9.0/; +./configure; make check; +examples/newbase60.w 123 +#+END_SRC + +- [[http://draketo.de/english/wisp][http://draketo.de/english/wisp]] # Local Variables: # org-latex-minted-options: (("linenos" "false") ("frame" "lines") ("framesep" "6pt") ("fontsize" "\\footnotesize"))