wisp
 
(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"))