This is the mail archive of the guile@sourceware.cygnus.com mailing list for the Guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

guile-hobbit-1.3.4 compiler released



Hello!

The distribution can be found at ftp.red-bean.com as:
pub/guile/contrib/misc/guile-hobbit-1.3.4.tar.gz, 
as well as a graphical (Tk based) application of the compiler called:
pub/guile/contrib/misc/guile-stklos-1.3.3.tar.gz.

It has been tested with guile-1.3.4-pre.

From the NEWS and README file of the distribution:

Changes between version 1.3.4 and 1.3.3 of the hobbit compiler for Guile:

- libtool-1.3.3 is used
- you can now use configure with --prefix and install hobbit at
  another place than guile
- pass SCM_UNDEFINED to make-string for recent guile-1.3.2 betas.
- added target 'check' for self-compiling 
- hob now is a wrapper which calls a dumped executable when possible
- some other bug-fixes (related to different order of evaluation
  between Scheme and C)
- cleaning of link.scm and moving some global variables from
  defs.scm to the pass?i.scm files

Changes between version 1.3.3 and 1.3.2 of the hobbit compiler for Guile:

- keyword support added
- option -m is suppressed (it is now the default)
- every pass of the compiler is now a module 
- self-compiling of all 6 passes
- several bug-fixes (mostly related to different order of evaluation
  between Scheme and C)
- scm_variable_{get,set_x} are used for global variables


This is version 1.3.4 of the hobbit compiler for Guile.


What is hobbit ?
================
Hobbit is a Scheme to C compiler, originally written for SCM by  
Tanel Tammet (tammet@cs.chalmers.se). It compiles all R4RS (with the
exception of mutual tail recursion and hygienic macros).
Defmacros are supported. The Guile module system can be used
with some caution, see section about modules.


Requirements for out-of-the-box installation
=================================================
BEWARE !!! You NEED libtool-1.3.3 and at least guile-1.3.
You are likeky to have problems with other versions, as several users
have reported. 

The platforms where I tested hobbit are Fujitsu VPP700,
HP-UX 10.20, SunOS, Solaris-2.6, Irix 6.5 and Linux-Elf. 
They provide dynamic linking, which is the most convenient,
as you can dynload in the guile interpreter the shared objects
which are always build in that case.

For HP-UX 10.20, I used the HP Ansi-C compiler instead of gcc-2.7.2.
This because of some problems with this last one. But this gcc was 
compiled under HP-UX 9.05, and perhaps this caused the trouble ?
Feel free to try out gcc on HP, and mail me success or disaster.

On SunOS, trouble with dynamic linking
has been reported using GNU ld.

On Irix, the vendor make seems broken, so please use GNU make.


Compilation of modules
======================
For compiling a module, the code should be split in 2 parts: 
1) a tiny part which remains interpreted and where all uses of
define-module, use-modules, define-public, export, etc... are
centralized.
2) a larger part having only R4RS code in it.

In directory hobbit4d, you should study in the
file lib-hobbit how the compiled util.scm is loaded as a module.

The above recommended process makes also your code more portable to
other R4RS Schemes, as only part 1) is to be adapted.


Other limitations
=================
This release of hobbit uses scm_variable_ref and scm_variable_set_x
to access global variables defined elsewhere. This is a
much simpler method, which correct some bugs. But the module 
system MUST be present when you use such a compiled file. So you 
can no longer compile boot-9.scm, as this is the place 
where the module system is built. Other files in ice-9 are still safe.

As error catching is near from inexistant in hobbit, only code thoroughly
tested interactively should be compiled. 

The R4RS compliance test from Aubrey Jaffer (file ice-9/test.scm
in guile distribution) can be compiled and executed correctly,
except at the end about force/delay, where an error occurs.

Name clashes may occur between some argument name of internal defines of
lambda and the same name used elsewhere. 
If you compile with ANSI C, do not use symbols which may be
interpreted as the beginning of trigraphs.

You will not be able to build a dumped executable if you use 
readline, as that library must be linked statically, and I cannot
figure simply where it could be located. You may encounter problems also
if you use threads with dumping.


Problem report, suggestions, etc...
===================================
Mail to Bernard.URBAN@meteo.fr

-- 

B. Urban

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]