summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
Diffstat (limited to 'README')
-rw-r--r--README235
1 files changed, 235 insertions, 0 deletions
diff --git a/README b/README
new file mode 100644
index 0000000..c3c386b
--- /dev/null
+++ b/README
@@ -0,0 +1,235 @@
+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 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
+
+