1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00
guile/README
2001-04-09 05:57:15 +00:00

100 lines
2.1 KiB
Text

Installation
------------
1. Install the latest Guile from CVS.
2. Install slib.
3. Install Guile VM:
% configure
% make install
% ln -s module/{system,language} /usr/local/share/guile/site/
4. Add the following lines to your ~/.guile:
(cond ((string=? (car (command-line)) "guile-vm")
(use-modules (system repl repl))
(start-repl 'gscheme)
(quit)))
Example Session
---------------
% guile-vm
Guile Scheme interpreter 0.4 on Guile 1.4.1
Copyright (C) 2001 Free Software Foundation, Inc.
Enter `,help' for help.
gscheme@guile> (+ 1 2)
$1 = 3
gscheme@guile> ,c -c (+ 1 2) ;; Compile into GLIL
(@asm (0 0 0 0)
(const 1)
(const 2)
(add 2)
(return 0))
gscheme@guile> ,c (+ 1 2) ;; Compile into bootcode
Disassembly of bootcode:
Compiled for Guile VM 0.4
nlocs = 0 nexts = 0
0 make-int8:1 ;; 1
1 make-int8 2 ;; 2
3 add
4 return
gscheme@guile> (define (add x y) (+ x y))
gscheme@guile> (add 1 2)
$2 = 3
gscheme@guile> ,x add ;; Disassemble
Disassembly of #<program add>:
nargs = 2 nrest = 0 nlocs = 0 nexts = 0
Bytecode:
0 local-ref 0
2 local-ref 1
4 add
5 return
gscheme@guile>
Write Modules
-------------
---- fib.scm ---------------------------
(define-module (fib)
:use-module (system vm load)
:export (fib))
(load/compile "fib.gs")
----------------------------------------
---- fib.gs ----------------------------
(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.80 2.79 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'.