236 lines
10 KiB
Plaintext
Executable File
236 lines
10 KiB
Plaintext
Executable File
The Jim Interpreter
|
|
|
|
A small-footprint implementation of the Tcl programming language.
|
|
|
|
--------------------------------------------------------------------------------
|
|
WHAT IS JIM?
|
|
--------------------------------------------------------------------------------
|
|
|
|
Jim is a small footprint implementation of the Tcl programming language
|
|
written from scratch. Currently Jim Tcl is very feature complete with
|
|
an extensive test suite (see the tests directory).
|
|
There are some Tcl commands and features which are not implemented
|
|
(and likely never will be), including namespaces, traces and Tk. However
|
|
Jim Tcl offers a number of both Tcl8.5 and Tcl8.6 features ({*}, dict, lassign,
|
|
tailcall and optional UTF-8 support) and some unique features.
|
|
These unique features include [lambda] with garbage collection, a general GC/references
|
|
system, arrays as syntax sugar for [dict]tionaries, object-based I/O and more.
|
|
|
|
Other common features of the Tcl programming language are present, like
|
|
the "everything is a string" behaviour, implemented internally as
|
|
dual ported objects to ensure that the execution time does not reflect
|
|
the semantic of the language :)
|
|
|
|
--------------------------------------------------------------------------------
|
|
WHEN JIM CAN BE USEFUL?
|
|
--------------------------------------------------------------------------------
|
|
|
|
1) If you are writing an application, and want to make it scriptable, with
|
|
Jim you have a way to do it that does not require to link your application
|
|
with a big system. You can include the Jim source directly in your project
|
|
and use the Jim API to write the glue code that makes your application
|
|
scriptable in Jim, with the following advantages:
|
|
|
|
- Jim is not the next "little language", but it's a Tcl implementation.
|
|
You can reuse your knowledge if you already Tcl skills, or enjoy
|
|
the availability of documentation, books, web resources, ...
|
|
(for example check my online Tcl book at http://www.invece.org/tclwise)
|
|
|
|
- Jim is simple, 14k lines of core code. If you want to adapt it you can hack
|
|
the source code to meet the needs of your application. It makes you
|
|
able to have scripting for default, and avoid external dependences.
|
|
|
|
Having scripting support *inside*, and in a way that a given version
|
|
of your program always gets shipped a given version of Jim, you can
|
|
write part of your application in Jim itself. Like it happens for
|
|
Emacs/Elisp, or Gimp/Scheme, both this applications have the interpreter
|
|
inside.
|
|
|
|
- Jim is Tcl, and Tcl looks like a configuration file if you want. So
|
|
if you use Jim you have also a flexible syntax for your config file.
|
|
This is a valid Tcl script:
|
|
|
|
set MyFeature on
|
|
ifssl {
|
|
set SslPort 45000
|
|
use compression
|
|
}
|
|
|
|
It looks like a configuration file, but if you implement the [ifssl]
|
|
and [use] commands, it's a valid Tcl script.
|
|
|
|
- Tcl scales with the user. Not all know it, but Tcl is so powerful that
|
|
you can reprogram the language in itself. Jim support this features
|
|
of the Tcl programming language. You can write new control structures,
|
|
use the flexible data types it offers (Lists are a central data structure,
|
|
with Dictionaries that are also lists). Still Tcl is simpler for the
|
|
casual programmer, especially if compared to other languages offering
|
|
small footprint implementations (like Scheme and FORTH).
|
|
|
|
- Because of the Tcl semantic (pass by value, everything is a command
|
|
since there are no reserved words), there is a nice API to glue
|
|
your application with Jim. See under the Jim Tcl manual for more detail.
|
|
|
|
- Jim is supported. If you need commercial software, contact the original author
|
|
at 'antirez@gmail.com' or the current maintainer at 'steveb@workware.net.au'.
|
|
|
|
2) The other "field" where Jim can be useful is obviously embedded systems.
|
|
|
|
3) We are working to make Jim as feature-complete as possible, thanks to
|
|
dynamically loaded extensions it may stay as little as it is today
|
|
but able to do interesting things for you. So it's not excluded that
|
|
in the future Jim will be an option as general purpose language.
|
|
But don't mind, for this there is already the mainstream Tcl
|
|
implementation ;).
|
|
|
|
--------------------------------------------------------------------------------
|
|
HOW BIG IS IT?
|
|
--------------------------------------------------------------------------------
|
|
|
|
Jim with the default extensions configured and compiled with -Os is about 130k.
|
|
Without any extensions, it is about 85k.
|
|
|
|
--------------------------------------------------------------------------------
|
|
HOW FAST IS IT?
|
|
--------------------------------------------------------------------------------
|
|
|
|
Jim is in most code faster than Tcl7.6p2 (latest 7.x version),
|
|
and slower than Tcl 8.4.x. You can expect pretty decent performance
|
|
for such a little interpreter.
|
|
|
|
If you want a more precise measure, there is 'bench.tcl' inside this
|
|
distribution that will run both under Jim and Tcl, so just execute
|
|
it with both the interpreters and see what you get :)
|
|
|
|
--------------------------------------------------------------------------------
|
|
HOW TO COMPILE
|
|
--------------------------------------------------------------------------------
|
|
|
|
Jim was tested under Linux, FreeBSD, MacosX, eCos, QNX, Windows XP (mingw, MVC).
|
|
|
|
To compile jim itself try:
|
|
|
|
./configure
|
|
make
|
|
|
|
--------------------------------------------------------------------------------
|
|
EXTENSIONS
|
|
--------------------------------------------------------------------------------
|
|
|
|
Many optional extensions are included. Some are C extensions and others are pure Tcl.
|
|
Form more information, try:
|
|
|
|
./configure --help
|
|
|
|
--------------------------------------------------------------------------------
|
|
HOW TO EMBED JIM INTO APPLICATIONS
|
|
--------------------------------------------------------------------------------
|
|
|
|
See the "examples.api" directory
|
|
|
|
--------------------------------------------------------------------------------
|
|
HOW TO WRITE EXTENSIONS FOR JIM
|
|
--------------------------------------------------------------------------------
|
|
|
|
See the extensions shipped with Jim, jim-readline.c, jim-clock.c, glob.tcl and oo.tcl
|
|
|
|
--------------------------------------------------------------------------------
|
|
COPYRIGHT and LICENSE
|
|
--------------------------------------------------------------------------------
|
|
|
|
Unless explicitly stated, all files within Jim repository are released
|
|
under following license:
|
|
|
|
/* Jim - A small embeddable Tcl interpreter
|
|
*
|
|
* Copyright 2005 Salvatore Sanfilippo <antirez@invece.org>
|
|
* Copyright 2005 Clemens Hintze <c.hintze@gmx.net>
|
|
* Copyright 2005 patthoyts - Pat Thoyts <patthoyts@users.sf.net>
|
|
* Copyright 2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
|
|
* Copyright 2008 Andrew Lunn <andrew@lunn.ch>
|
|
* Copyright 2008 Duane Ellis <openocd@duaneellis.com>
|
|
* Copyright 2008 Uwe Klein <uklein@klein-messgeraete.de>
|
|
* Copyright 2008 Steve Bennett <steveb@workware.net.au>
|
|
* Copyright 2009 Nico Coesel <ncoesel@dealogic.nl>
|
|
* Copyright 2009 Zachary T Welch zw@superlucidity.net
|
|
* Copyright 2009 David Brownell
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials
|
|
* provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE JIM TCL PROJECT ``AS IS'' AND ANY
|
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
|
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
* JIM TCL PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
|
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
|
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* The views and conclusions contained in the software and documentation
|
|
* are those of the authors and should not be interpreted as representing
|
|
* official policies, either expressed or implied, of the Jim Tcl Project.
|
|
*/
|
|
--------------------------------------------------------------------------------
|
|
HISTORY
|
|
--------------------------------------------------------------------------------
|
|
|
|
"first Jim goal: to vent my need to hack on Tcl."
|
|
|
|
And actually this is exactly why I started Jim, in the first days
|
|
of Jenuary 2005. After a month of hacking Jim was able to run
|
|
simple scripts, now, after two months it started to be clear to
|
|
me that it was not just the next toy to throw away but something
|
|
that may evolve into a real interpreter. In the same time
|
|
Pat Thoyts and Clemens Hintze started to contribute code, so that
|
|
the development of new core commands was faster, and also more
|
|
people hacking on the same code had as result fixes in the API,
|
|
C macros, and so on.
|
|
|
|
Currently we are at the point that the core interpreter is almost finished
|
|
and it is entering the Beta stage. There is to add some other core command,
|
|
to do a code review to ensure quality of all the parts and to write
|
|
documentation.
|
|
|
|
We already started to work on extensions like OOP, event loop,
|
|
I/O, networking, regexp. Some extensions are already ready for
|
|
prime time, like the Sqlite extension and the ANSI I/O.
|
|
|
|
------------------------------------------------------------------------------
|
|
Thanks to...
|
|
------------------------------------------------------------------------------
|
|
|
|
- First of all, thanks to every guy that are listed in the AUTHORS file,
|
|
that directly helped with code and ideas. Also check the ChangeLog
|
|
file for additional credits about patches or bug reports.
|
|
- Elisa Manara that helped me to select this ill conceived name for
|
|
an interpreter.
|
|
- Many people on the Tclers Chat that helped me to explore issues
|
|
about the use and the implementation of the Tcl programming language.
|
|
- David Welton for the tech info sharing and our chats about
|
|
programming languages design and the ability of software to "scale down".
|
|
- Martin S. Weber for the great help with Solaris issues, debugging of
|
|
problems with [load] on this arch, 64bit tests.
|
|
- The authors of "valgrind", for this wonderful tool, that helped me a
|
|
lot to fix bugs in minutes instead of hours.
|
|
|
|
|
|
----
|
|
Enjoy!
|
|
Salvatore Sanfilippo
|
|
10 Mar 2005
|
|
|
|
|