All Projects → msteveb → Jimtcl

msteveb / Jimtcl

Licence: other
Official repository of Jim Tcl, an open-source, small footprint implementation of Tcl

Programming Languages

c
50402 projects - #5 most used programming language
tcl
693 projects

Projects that are alternatives of or similar to Jimtcl

o1heap
Constant-complexity deterministic memory allocator (heap) for hard real-time high-integrity embedded systems
Stars: ✭ 119 (-56.25%)
Mutual labels:  embedded
littlefs2
Idiomatic Rust API for littlefs
Stars: ✭ 19 (-93.01%)
Mutual labels:  embedded
Atsamd
Target atsamd microcontrollers using Rust
Stars: ✭ 260 (-4.41%)
Mutual labels:  embedded
awesome-automotive-can-id
🚜 unpretentious attempt to collect CAN IDs and payloads for various car brands/models in one place.
Stars: ✭ 104 (-61.76%)
Mutual labels:  embedded
NMSIS
Nuclei Microcontroller Software Interface Standard Development Repo
Stars: ✭ 24 (-91.18%)
Mutual labels:  embedded
pigpiox
An Elixir wrapper around pigpiod for the Raspberry PI
Stars: ✭ 29 (-89.34%)
Mutual labels:  embedded
diy-linux-guide
An LFS like guide for cross-bootstrapping a small system for the Raspberry Pi
Stars: ✭ 26 (-90.44%)
Mutual labels:  embedded
Rusty Clock
An alarm clock with environment stats in pure bare metal embedded rust
Stars: ✭ 269 (-1.1%)
Mutual labels:  embedded
InfiniTime
Firmware for Pinetime smartwatch written in C/C++ and based on FreeRTOS
Stars: ✭ 1,303 (+379.04%)
Mutual labels:  embedded
Qmlcore
QML to Javascript/HTML5 translator, both for mobile and desktop targets
Stars: ✭ 258 (-5.15%)
Mutual labels:  embedded
STM32Keyboard
No description or website provided.
Stars: ✭ 15 (-94.49%)
Mutual labels:  embedded
micro-MVC
An agile, small, productive and robust MVC framework for PHP with high-quality JS extensions and integrated AJAX support.
Stars: ✭ 33 (-87.87%)
Mutual labels:  small
project-migration-tools
Project Migration tools to help you migrating to IAR Embedded Workbench more efficiently.
Stars: ✭ 36 (-86.76%)
Mutual labels:  embedded
esm
Lightweight communicating state machine framework for embedded systems
Stars: ✭ 21 (-92.28%)
Mutual labels:  embedded
Erpc
Embedded RPC
Stars: ✭ 262 (-3.68%)
Mutual labels:  embedded
core
🌈 light, fast, and easy to use, dependencies free javascript syntax highlighter, with automatic language detection
Stars: ✭ 40 (-85.29%)
Mutual labels:  small
async
🔀 Asynchronous framework in C.
Stars: ✭ 16 (-94.12%)
Mutual labels:  embedded
Lwext4
ext2/ext3/ext4 filesystem library for microcontrollers
Stars: ✭ 270 (-0.74%)
Mutual labels:  embedded
Drone Core
The core crate for Drone, an Embedded Operating System.
Stars: ✭ 263 (-3.31%)
Mutual labels:  embedded
Tock
A secure embedded operating system for microcontrollers
Stars: ✭ 3,258 (+1097.79%)
Mutual labels:  embedded

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 '[email protected]' or the current maintainer at '[email protected]'.

  1. The other "field" where Jim can be useful is obviously embedded systems.

  2. 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 [email protected]
  • Copyright 2005 Clemens Hintze [email protected]
  • Copyright 2005 patthoyts - Pat Thoyts [email protected]
  • Copyright 2008 oharboe - Øyvind Harboe - [email protected]
  • Copyright 2008 Andrew Lunn [email protected]
  • Copyright 2008 Duane Ellis [email protected]
  • Copyright 2008 Uwe Klein [email protected]
  • Copyright 2008 Steve Bennett [email protected]
  • Copyright 2009 Nico Coesel [email protected]
  • Copyright 2009 Zachary T Welch [email protected]
  • 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.
    1. 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 January 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].