Thursday, 09 June 2011
Bootstrap jimsh
The Jim interpreter is small, portable and full-featured. This makes
jimsh
an ideal tool to bootstrap a development system that
requires an interpreter.
Consider the case of a development configuration system such as
GNU autotools. Here it
is necessary to run fairly complex scripts that invoke external
programs (such as the compiler) and perform intensive string
processing. The autotools solution uses a combination of Bourne
Shell, the m4 Macro
Processor and various external
tools such as sed
. Since this needs to work across a wide range
of systems, even those with buggy shells or external tools, many
contortions are required. The resulting system is
slow, cumbersome and complex.
Now consider the different approach taken by autosetup. Here a scripting language is used that has excellent support for string processing, data structures (arrays/dicts and lists) and running external programs — Tcl. The only problem is bootstrap. What if the target system doesn’t have a suitable Tcl interpreter available? The solution is a bootstrap version of Jim Tcl is included in the distribution as a single source file and simply requires a C compiler to create the interpreter. In fact, autosetup automatically determines if no suitable and interpreter is available and seamlessly builds and runs the bootstrap interpreter.
$ ./configure No installed jimsh or tclsh, building local bootstrap jimsh0 Host System...x86_64-apple-darwin10.7.0 Build System...x86_64-apple-darwin10.7.0 C compiler...ccache cc -g -O2 C++ compiler...ccache c++ -g -O2 Checking for stdlib.h...ok ...
A script to create the bootstrap interpreter source is included in the jimtcl git repository
$ sh make-bootstrap-jim >jimsh0.c $ time cc -o jimsh0 jimsh0.c real 0m1.339s user 0m1.121s sys 0m0.109s $ ./jimsh0 Welcome to Jim version 0.71 .
Steve Bennett (steveb@workware.net.au)
comments powered by Disqus