1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-27 21:40:34 +02:00
Mirror of the upstream GNU Guile repository on Savannah. https://www.gnu.org/software/guile/
Find a file
Andy Wingo 22bcbe8cc9 enable inlining; speed!
* module/system/il/inline.scm: New module, implements generic inlining of
  scheme functions. It even does the right thing regarding (define
  arity:nopt caddr) and such. So now there are many more inlines: the
  arithmetics, `apply', the caddr family, etc. This makes the benchmarks
  *much* faster.

* module/language/scheme/translate.scm (trans): Remove the
  %scheme-primitives code in favor of the generic (scheme il inline)
  code. Adds inlining for +, -, =, etc.

* src/vm.c (vm_puts): Fix to work.

* module/system/base/compile.scm (system): Export load/compile also.

* module/system/il/compile.scm (optimize): Further debitrotting, but I
  haven't tried this function yet. It seems that <ghil-inst> was what
  <ghil-inline> is.

* module/system/il/ghil.scm (*core-primitives*, *macro-module*)
  (ghil-primitive-macro?, ghil-macro-expander, ghil-primitive?): Remove
  these unused things.

* module/system/il/macros.scm: Removed, replaced with inline.scm.

* module/system/vm/assemble.scm (stack->bytes): Before, the final
  serialization code did an (apply u8vector (apply append (map
  u8vector->list ...))). Aside from the misspelling of append-map, this
  ends up pushing all elements of the u8vector on the stack -- assuredly
  not what you want. But besides even that, I think that pushing more
  than 32k arguments on the stack brings out some other bug that I think
  was hidden before, because now we actually use the `apply' VM
  instruction. Further testing is needed here, I think. Fixed the code to
  be more efficient, which fixes the manifestation of this particular
  bug: a failure to self-compile after inlining was enabled.

* module/system/vm/bootstrap.scm: New module, serves to bootstrap
  boot-9's `load-compiled'. That way when we load (system vm core), we're
  loading compiled code already.

* module/system/vm/core.scm: Use (system vm bootstrap).

* src/guilec.in: Use the bootstrap code, so that we really are compiling
  with an entirely compiled compiler.

* module/system/repl/repl.scm (default-catch-handler): An attempt at
  making the repl print a backtrace; more work needed here.

* module/system/vm/frame.scm (make-frame-chain): Fix some misspellings --
  I think, anyway.
2008-05-25 13:13:15 +02:00
benchmark cleanups in syntax.scm 2008-05-02 17:35:25 +02:00
doc autotooling, version bump to 0.7 2008-05-20 12:10:18 +02:00
module enable inlining; speed! 2008-05-25 13:13:15 +02:00
src enable inlining; speed! 2008-05-25 13:13:15 +02:00
testsuite fix distcheck 2008-05-20 11:54:05 +02:00
.cvsignore *** empty log message *** 2001-04-22 02:13:48 +00:00
acinclude.m4 include local copy of guile.m4 2008-05-20 12:21:40 +02:00
AUTHORS Initial revision 2000-08-22 15:54:19 +00:00
autogen.sh include local copy of guile.m4 2008-05-20 12:21:40 +02:00
ChangeLog *** empty log message *** 2001-04-07 12:29:06 +00:00
configure.in autotooling, version bump to 0.7 2008-05-20 12:10:18 +02:00
env fix env script 2008-05-13 00:13:56 +02:00
guilec.mk distcheck works now 2008-05-20 12:54:14 +02:00
Makefile.am distcheck works now 2008-05-20 12:54:14 +02:00
NEWS update news 2008-05-20 13:30:21 +02:00
README Fixed a stack leak. Now observing actual performance. 2008-04-25 19:09:30 +02:00
THANKS *** empty log message *** 2001-04-07 12:29:06 +00:00

This is an attempt to revive the Guile-VM project by Keisuke Nishida
written back in the years 2000 and 2001.  Below are a few pointers to
relevant threads on Guile's development mailing list.

Enjoy!

Ludovic Courtès <ludovic.courtes@laas.fr>, Apr. 2005.


Pointers
--------

Status of the last release, 0.5
  http://lists.gnu.org/archive/html/guile-devel/2001-04/msg00266.html

The very first release, 0.0
  http://sources.redhat.com/ml/guile/2000-07/msg00418.html

Simple benchmark
  http://sources.redhat.com/ml/guile/2000-07/msg00425.html

Performance, portability, GNU Lightning
  http://lists.gnu.org/archive/html/guile-devel/2001-03/msg00132.html

Playing with GNU Lightning
  http://lists.gnu.org/archive/html/guile-devel/2001-03/msg00185.html

On things left to be done
  http://lists.gnu.org/archive/html/guile-devel/2001-03/msg00146.html


---8<---  Original README below.  -----------------------------------------

Installation
------------

1. Install the latest Guile from CVS.

2. Install Guile VM:

  % configure
  % make install
  % ln -s module/{guile,system,language} /usr/local/share/guile/

3. Add the following lines to your ~/.guile:

  (use-modules (system vm core)

  (cond ((string=? (car (command-line)) "guile-vm")
	 (use-modules (system repl repl))
	 (start-repl 'scheme)
	 (quit)))

Example Session
---------------

  % guile-vm
  Guile Scheme interpreter 0.5 on Guile 1.4.1
  Copyright (C) 2001 Free Software Foundation, Inc.

  Enter `,help' for help.
  scheme@guile-user> (+ 1 2)
  3
  scheme@guile-user> ,c -c (+ 1 2)	;; Compile into GLIL
  (@asm (0 1 0 0)
    (module-ref #f +)
    (const 1)
    (const 2)
    (tail-call 2))
  scheme@guile-user> ,c (+ 1 2)		;; Compile into object code
  Disassembly of #<objcode 403c5fb0>:

  nlocs = 0  nexts = 0

     0    link "+"                        ;; (+ . ???)
     3    variable-ref
     4    make-int8:1                     ;; 1
     5    make-int8 2                     ;; 2
     7    tail-call 2

  scheme@guile-user> (define (add x y) (+ x y))
  scheme@guile-user> (add 1 2)
  3
  scheme@guile-user> ,x add		;; Disassemble
  Disassembly of #<program add>:

  nargs = 2  nrest = 0  nlocs = 0  nexts = 0

  Bytecode:

     0    object-ref 0                    ;; (+ . #<primitive-procedure +>)
     2    variable-ref
     3    local-ref 0
     5    local-ref 1
     7    tail-call 2

  Objects:

     0    (+ . #<primitive-procedure +>)

  scheme@guile-user> 

Compile Modules
---------------

Use `guilec' to compile your modules:

  % cat fib.scm
  (define-module (fib) :export (fib))
  (define (fib n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2)))))

  % guilec fib.scm
  Wrote fib.go
  % guile
  guile> (use-modules (fib))
  guile> (fib 8)
  34