Installation ------------ % ./autogen.sh % configure % make % su # make install # ln -s module/{system,language} /usr/local/share/guile/site/ Add the following lines to your ~/.guile: (if (string=? (car (command-line)) "guile-vm") (begin (use-modules (system repl repl)) (start-repl 'r5rs) (quit))) Example Session --------------- % guile-vm Standard Scheme (R5RS + syntax-case) interpreter 0.3 on Guile 1.4.1 Copyright (C) 2001 Free Software Foundation, Inc. Enter `,help' for help. r5rs@guile> (+ 1 2) $1 = 3 r5rs@guile> ,c -c (+ 1 2) ;; Compile into GLIL (@asm (0 0 0 0) (const 1) (const 2) (add) (return)) r5rs@guile> ,c -l (+ 1 2) ;; Compile into loadable code 0 make-int8:0 ;; 0 1 load-program #0 8 return Bytecode #0: 0 make-int8:1 ;; 1 1 make-int8 2 ;; 2 3 add 4 return r5rs@guile> ,c (+ 1 2) ;; Compile and disassemble Disassembly of #: args = 0 rest = 0 locals = 0 Bytecode: 0 make-int8:1 ;; 1 1 make-int8 2 ;; 2 3 add 4 return r5rs@guile> (define (add x y) (+ x y)) r5rs@guile> (add 1 2) $2 = 3 r5rs@guile> ,x add ;; Disassemble Disassembly of #: args = 2 rest = 0 locals = 0 Bytecode: 0 local-ref 1 2 local-ref:0 3 add 4 return r5rs@guile> Write Modules ------------- ---- fib.scm --------------------------- (define-module (fib) :use-module (system vm load) :export (fib)) (load/compile "fib.gsm") ---------------------------------------- ---- fib.gsm --------------------------- (define (fib n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) ---------------------------------------- Now, expressions in fib.gsm are automatically compiled and executed by the Guile VM: % guile guile> (use-modules (fib)) guile> (time (fib 30)) clock utime stime cutime cstime gctime 2.89 2.88 0.00 0.00 0.00 0.00 $1 = 1346269 guile> (define (fib n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) guile> (time (fib 30)) clock utime stime cutime cstime gctime 26.05 25.01 0.17 0.00 0.00 14.33 $2 = 1346269 If you don't want to compile your code (e.g., for debugging purpose), just change `load/compile' to `load'.