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/
* 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. |
||
---|---|---|
benchmark | ||
doc | ||
module | ||
src | ||
testsuite | ||
.cvsignore | ||
acinclude.m4 | ||
AUTHORS | ||
autogen.sh | ||
ChangeLog | ||
configure.in | ||
env | ||
guilec.mk | ||
Makefile.am | ||
NEWS | ||
README | ||
THANKS |
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