mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-10 14:00:21 +02:00
100 lines
2.1 KiB
Text
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'.
|