1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 20:00:19 +02:00
Mirror of the upstream GNU Guile repository on Savannah. https://www.gnu.org/software/guile/
Find a file
2001-04-14 11:26:26 +00:00
doc ChangeLog 2000-09-22 17:38:49 +00:00
module SLIB init file for Guile. 2001-04-14 11:26:26 +00:00
src *** empty log message *** 2001-04-11 23:12:37 +00:00
.cvsignore New VM. 2001-04-01 05:03:41 +00:00
acconfig.h Initial revision 2000-08-22 15:54:19 +00:00
acinclude.m4 Initial revision 2000-08-22 15:54:19 +00:00
AUTHORS Initial revision 2000-08-22 15:54:19 +00:00
autogen.sh * autogen.sh: Run aclocal with check where guile.m4 is installed. 2000-09-11 09:18:49 +00:00
ChangeLog *** empty log message *** 2001-04-07 12:29:06 +00:00
configure.in *** empty log message *** 2001-04-07 12:29:06 +00:00
Makefile.am New VM. 2001-04-01 05:03:41 +00:00
NEWS Initial revision 2000-08-22 15:54:19 +00:00
README *** empty log message *** 2001-04-09 05:57:15 +00:00
THANKS *** empty log message *** 2001-04-07 12:29:06 +00:00

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'.