The Nickle System

What is Nickle?

Nickle is a programming language based prototyping environment with powerful programming and scripting capabilities. Nickle supports a variety of datatypes, especially arbitrary precision numbers. The programming language vaguely resembles C. Some things in C which do not translate easily are different, some design choices have been made differently, and a very few features are simply missing.

Nickle provides the functionality of UNIX bc, dc and expr in much-improved form. It is also an ideal environment for prototyping complex algorithms. Nickle's scripting capabilities make it a nice replacement for spreadsheets in some applications, and its numeric features nicely complement the limited numeric functionality of text-oriented languages such as AWK and PERL.

Nickle Features

Nickle encourages (but does not require) the developer to use type declarations in programming and on the command line, to allow static type checking. Nickle backs this up with full run-time type checking.

The numeric datatypes within Nickle make it a good choice for the design and implementation of numeric algorithms. Nickle provides three numeric data types: arbitrary precision integers, arbitrary-precision rationals and unbounded floating-point "reals" with specifiable precision. These datatypes permit computations which would be difficult or impossible using fixed format numeric datatypes.

Along with the basic numeric datatypes, Nickle includes multi-dimensional arrays, strings, structures, tagged unions and pointers.

Nickle provides support for parallel computation via a simple thread model, along with ancilary datatypes like semaphores and mutexes. These provide an excellent environment for parallel algorithm development.

Nickle also has features inspired by modern languages like Modula 3, ML and Java, such as typed exceptions, first class functions and aggregate values, tagged unions and continuations. In particular, functional programming is reasonably well supported by the language. Still to be implemented is parametric polymorphism and more ADT support.

Getting Nickle

Nightly snapshots are available. A new snapshot is created early each morning if any changes have been committed to git since the last snapshot was created.

The current version is normally available as a part of the Debian unstable archive. Just 'apt-get update' and 'apt-get install nickle'. Recent releases may also be available from the release directory in .deb, .rpm as well as .tar.gz form. The git master is canonical, though.

There are also stale versions available, although you don't want to use them.

The latest development code is also available through git. Instructions on using the git archive are also provided.


MINT is a lexer and parser generator written by James LaMar and Emma Kuo with assistance and advice by Keith Packard and Bart Massey. It has a number of nice properties, described in a paper available on request. You can grab the MINT source code from CVS if you want to learn more.


Keith Packard has written some nice FFI support for Nickle, and demonstrated it in the form of a binding to Cairo that is referred to as cairo-5c or cairo-nickle. A bit of information on cairo-5c is available at bartforge.

More information about Nickle

Copyright © 2001, 2002 Keith Packard and Bart Massey

SourceForge Logo Coin images Copyright © 2001 CoinFacts.Com, Inc., used by permission.
Last update 2005/04/02 by