gambit repl - dirogambit/gambit-repl.pdf · overview scheme gambit gambit repl app user interface...
TRANSCRIPT
![Page 1: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/1.jpg)
Gambit REPLMarc Feeley
November 24, 2011
1Thursday, November 24, 2011
![Page 2: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/2.jpg)
Overview
Scheme
Gambit
Gambit REPL app
User interface
Development
Implementation2
Thursday, November 24, 2011
![Page 3: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/3.jpg)
Scheme
3Thursday, November 24, 2011
![Page 4: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/4.jpg)
Scheme1975: Sussman & Steele design Scheme at MIT
Few but powerful building blocks
simple uniform syntax (parenthesized prefix)
dynamically typed
functional and imperative programming
macros, closures, first-class continuations, tail-calls, garbage collection, ...
Used by many institutions to teach CS4
Thursday, November 24, 2011
![Page 5: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/5.jpg)
Scheme Example(define (join words separator) (apply string-append (map (lambda (str) ;; a closure (string-append separator str)) words)))
(define (path . parts) ;; a variadic function (join parts "/"))
(path "usr" "local" "bin") ⇒ "/usr/local/bin"
(define-macro (push val var) ;; a procedural macro `(set! ,var (cons ,val ,var)))
(define stack '())
(push 11 stack) (push 22 stack)
stack ⇒ (22 11)
5Thursday, November 24, 2011
![Page 6: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/6.jpg)
Evolution of Standards“Academic era”: concerns for purity
Evolution by unanimous consent: R1RS (1978), R2RS (1985), R3RS (1986), R4RS (1991), R5RS (1998) => 50 page spec
“Real-world era”: practical concerns
Scheme Request for Implementation (SRFI), over 100 documents, ongoing since 1998
Evolution by revolution: R6RS (2007) => 160 page spec, controversial, R7RS (soon!)
6Thursday, November 24, 2011
![Page 7: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/7.jpg)
Scheme Systems
Over 50 implementations of Scheme, many toys and over 15 mature systems!
Diverse implementation approaches:
Interpreters and VMs – Guile, Kawa, ...
JIT compilers – Racket, Larceny, Chez, ...
Compilers to C – Gambit, Bigloo, Chicken, ...
7Thursday, November 24, 2011
![Page 8: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/8.jpg)
Gambit
8Thursday, November 24, 2011
![Page 9: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/9.jpg)
Gambit System Evolution
1989: Compiler to M68K, no interpreter, no GC
1991: MacGambit – compiler/interpreter/IDE
1993: Message passing implementation of futures on 90 processor BBN Butterfly
1994: C back-end, first commercial use
2004: Gambit v4, threads, I/O, LGPL/Apache
2011: Gambit REPL - interpreter for iOS9
Thursday, November 24, 2011
![Page 10: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/10.jpg)
Gambit GoalsA Scheme system that is
conformant to R5RS and robust (no bugs)portableefficient (i.e. fast)embeddable
Provide simple building blocks fordeveloping practical applicationsbuilding more complex languages
Avoid “being in the programmer’s way”10
Thursday, November 24, 2011
![Page 11: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/11.jpg)
GSI and GSCOn workstations, Gambit has 2 main programs:gsi: interpreter (best for debugging but not fast)gsc: compiler (which includes interpreter)
Interpreted and compiled code can be freely mixed
Gambit v4.6.0% gsi
> (load "fib")55"/Users/feeley/fib.scm"> (fib 20)6765> (exit)
% gsi fib.scm55% gsc fib.scm% gsi fib.o155% gsc -exe fib.scm% ./fib55% gsc -c fib.scm11
Thursday, November 24, 2011
![Page 12: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/12.jpg)
Portability
gsc generates C code that is independent of the target processor, C compiler and OS
Compilable by any C, C++, or ObjC compiler, on 32/64 bit processors, any endianness
Trampolines are used for supporting tail calls(Scheme stack managed separately from C’s)
gsc CScheme
12Thursday, November 24, 2011
![Page 13: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/13.jpg)
Gambit Virtual MachineGVM is the compiler’s intermediate language
Register based VM (nb of regs depends on BE)
First few parameters in registers, rest on stack
Stack is allocated implicitly (no push/pop)
No call instruction, only jump
jump/poll instruction indicates safe points where interrupts are allowed and where stack and heap overflows are checked
13Thursday, November 24, 2011
![Page 14: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/14.jpg)
C Back-End
(print (max 11 22))
mod1.scm
#1 fs=0 entry-point 0 () STK1 = R0 R2 = ’22 R1 = ’11 R0 = #2 jump/poll fs=4 max 2
#2 fs=4 return-point R0 = STK1 jump/poll fs=0 print 1
mod1.gvm
gsc
C back-endFront-end GVM CScheme
#include "gambit.h"
BEGIN_SWDEF_SLBL(0,L0_mod1) SET_STK(1,R0) SET_R2(FIX(22L)) SET_R1(FIX(11L)) SET_R0(LBL(2)) ADJFP(4) POLL(1)DEF_SLBL(1,L1_mod1) JUMPGLO(NARGS(2), 1,G_max)DEF_SLBL(2,L2_mod1) SET_R0(STK(-3)) ...
mod1.c
non-tail-call
tail-call
Note: GVM and C codemodified for readability
14Thursday, November 24, 2011
![Page 15: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/15.jpg)
System Portabilitygambit.h allows late binding of GVM implem.
a configure script tunes the gambit.h macro definitions to take into account:
target OS, C compiler, pointer width, etc
E.g. trampoline operation BEGIN_SW becomes
“switch (pc-start) ...” by default
“goto *(pc->lbl);” if using gcc (faster!)15
Thursday, November 24, 2011
![Page 16: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/16.jpg)
System PortabilityGambit adopts a Scheme-in-Scheme approach
primitives, interpreter, debugger, bignums, ...
Non-Scheme code (~ 30%) is mainly for OS interface and is in portable C (no asm code!)
Runtime relies only on standard C libraries
Compiled application can be distributed as the set of generated “.c” files (Gambit not needed on the target system, great for embedded sys)
16Thursday, November 24, 2011
![Page 17: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/17.jpg)
System Portability
main.cos.c
mem.c
...
_kernel.scm
_io.scm
_num.scm...
app.scm
_kernel.c
_io.c
_num.c...
app.capp_.c
config.h
gambit.hconfigure
gsc
cc app.exe
link file
runtime library
application17
Thursday, November 24, 2011
![Page 18: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/18.jpg)
System PortabilityCompiles “out-of-the box” for Intel, SPARC, PPC, MIPS, ARM, etc
Porting to a new processor: 0 to 60 minutes
Unusual porting examples:Nintendo DS (ARM, 4 MB RAM)Linksys WRT54GL (MIPS, 16 MB RAM)iPhone/iPad (ARM, 128 MB RAM)Xilinx FPGA (PPC, few MB RAM, no OS)
18Thursday, November 24, 2011
![Page 19: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/19.jpg)
Main Extensions
Declarations (to deviate from std semantics)
Namespaces
Green threads, mutex/cond.var., mailbox
I/O – TCP, subprocesses, serialization, ...
Hash tables and wills
Foreign Function Interface (FFI)19
Thursday, November 24, 2011
![Page 20: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/20.jpg)
Gambit REPL app
20Thursday, November 24, 2011
![Page 21: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/21.jpg)
Overview
User interface
Development
Implementation
21Thursday, November 24, 2011
![Page 22: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/22.jpg)
User Interface
22Thursday, November 24, 2011
![Page 23: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/23.jpg)
Splash ScreenFour views:
REPLWikiHelpEdit
23Thursday, November 24, 2011
![Page 24: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/24.jpg)
REPL ViewInteractive evaluationExtended keyboardCommand history
24Thursday, November 24, 2011
![Page 25: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/25.jpg)
Wiki & HelpAccess to Gambit WikiR5RS documentGambit User Manual
25Thursday, November 24, 2011
![Page 26: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/26.jpg)
Edit ViewScript editorAdd/Run/Save/DeleteEach script has a name
“main” run at startup“F1” run on F1 key, ...
Save goes to “Documents”
26Thursday, November 24, 2011
![Page 27: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/27.jpg)
iPad VersionLarger area is good enough for useful workProgrammable function keys (F1 .. F12)
27Thursday, November 24, 2011
![Page 28: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/28.jpg)
REPL ServerAllows remote debuggingTelnet to port 7000Multiple concurrent REPLs
28Thursday, November 24, 2011
![Page 29: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/29.jpg)
Implementation
34Thursday, November 24, 2011
![Page 30: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/30.jpg)
Highlightsgsc + XCode 4Code is Scheme (5 KLOC) and ObjC (1 KLOC)Main app is in ObjC which calls into compiled Scheme code for processing UI “events”Most views are webViews
Dynamic generation of content as HTMLIntercept user “events” using shouldStartLoadWithRequest
REPL view is a textView35
Thursday, November 24, 2011
![Page 31: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/31.jpg)
Hardest PartsSupporting Gambit’s green threads
Main app periodically calls Scheme heartbeat function to let the Scheme thread scheduler execute some threadsThe heartbeat function returns the amount of time before the main app needs to call it again (it depends on the presence of runnable threads, the next sleep timeout, etc)
Implementation of wiki API to access the script repository (dealing with response parsing, timeouts, etc)
36Thursday, November 24, 2011
![Page 32: Gambit REPL - DIROgambit/Gambit-REPL.pdf · Overview Scheme Gambit Gambit REPL app User interface Development Implementation 2 Thursday, November 24, 2011](https://reader036.vdocuments.mx/reader036/viewer/2022081415/5b00c03a7f8b9af1148d1776/html5/thumbnails/32.jpg)
Related AppsiOS:
Pixie Scheme (iPad only, interpreter in C++)iScheme (buggy, interpreter in JavaScript)Apps for other languages: Lua (Codify, iLuaBox), Python (Python Math), Basic (iBasic, HotPaw Basic), JavaScript (ExecScript, JSInt)
Android:Gambit for Android (port of Gambit REPL v1)Scheme Droid, Clojure REPL, Ruboto IRB, ...
37Thursday, November 24, 2011