public
Description: Pez is a Forth dialect based on Atlast, with expanded capabilities and more portability.
Homepage:
Clone URL: git://github.com/pete/pez.git
pez /
name age message
file .gitignore Thu Jul 23 23:06:19 -0700 2009 Autotools: nearly 75% of the project's LOC, an... [pete]
file INSTALL Thu Jul 16 11:46:51 -0700 2009 I suppose we need these. [pete]
file Makefile.am Sat Oct 31 23:55:43 -0700 2009 Version bump, doc update [pete]
file Makefile.in Sun Dec 20 22:23:53 -0800 2009 Man, autotools is noisy. [pete]
file README Sat Oct 31 23:55:43 -0700 2009 Version bump, doc update [pete]
file aclocal.m4 Sun Dec 20 22:23:53 -0800 2009 Man, autotools is noisy. [pete]
file autogen.sh Thu Jul 23 12:59:18 -0700 2009 Missing $. :( [pete]
file config.guess Tue Jul 21 17:18:07 -0700 2009 Some of these can be gotten rid of; I am sure o... [pete]
file config.h.in Sun Dec 20 22:23:53 -0800 2009 Man, autotools is noisy. [pete]
file config.sub Tue Jul 21 17:18:07 -0700 2009 Some of these can be gotten rid of; I am sure o... [pete]
file configure Sun Dec 20 22:23:53 -0800 2009 Man, autotools is noisy. [pete]
file configure.ac Sat Dec 12 18:17:06 -0800 2009 Use the included copy of lightning unless there... [pete]
file depcomp Tue Jul 21 17:18:07 -0700 2009 Some of these can be gotten rid of; I am sure o... [pete]
directory doc/ Sat Nov 21 15:45:15 -0800 2009 More TODO updates. [pete]
file doccer.rb Sun Dec 13 06:48:59 -0800 2009 rudimentary signature grabber in ruby [automatthew]
file install-sh Tue Jul 21 17:18:07 -0700 2009 Some of these can be gotten rid of; I am sure o... [pete]
directory lib/ Thu Jun 25 13:46:26 -0700 2009 Atlast -> Pez [pete]
directory lightning/ Thu Dec 10 15:04:55 -0800 2009 Adding lightning. [pete]
file ltmain.sh Thu Jul 23 13:50:05 -0700 2009 There are GNUitis infections creeping up the pr... [pete]
directory m4/ Wed Jul 22 10:37:56 -0700 2009 Keeping that stuff in. [pete]
file missing Tue Jul 21 17:18:07 -0700 2009 Some of these can be gotten rid of; I am sure o... [pete]
file pez.c Sun Dec 20 22:24:17 -0800 2009 I went a kinda crazy with this commit, way over... [pete]
file pez.h Sun Dec 20 22:24:17 -0800 2009 I went a kinda crazy with this commit, way over... [pete]
file pezdef.h Thu Dec 10 01:33:07 -0800 2009 Holy crap, it's full of TODOs and it's *still* ... [pete]
file pezmain.c Thu Dec 10 21:53:54 -0800 2009 Uh...helps if you do the memcopy *after* the ch... [pete]
file primdeftest.c Thu Jun 25 13:46:26 -0700 2009 Atlast -> Pez [pete]
file regress.pez Sun Dec 20 22:24:17 -0800 2009 I went a kinda crazy with this commit, way over... [pete]
directory test/ Sat Oct 31 16:47:33 -0700 2009 A little manual test if you want to see the GC ... [pete]
README
Pez is a small, lightweight, 100% C (for now), embeddable or standalone,
public domain, portable, highly nonstandard dialect of Forth.  It was
originally based on the Atlast system (see doc/CREDITS for more
information), but the feature set has been expanded significantly and
there are flagrant breaks with Forth compatibility.

The primary goal of the Pez project, much like the goal of the Atlast
project, is to bring dead-simple scriptability and dynamism to otherwise
static code, with a focus on user-level scripting of applications.
There are a number of compile-time options for trimming down and
limiting in the case of untrusted input, and also a large number of
OS-level facilities both added and planned.  Pez is also designed to
work well as a stand-alone language for general-purpose coding.  And
it's designed to be fun.

I highly recommend having a look at doc/historic/atlast.pdf, written by
Mr.  Walker in 1990, especially the introduction which is still
shockingly relevant now, about 20 years later.

There are a number of benefits to adding user-level scripting to an
application.  You get a free doman-specific language to expose to users
however you see fit.  You get a free configuration file parser in the
same language as your application's DSL.  You get a dynamic internal
scripting language a la LUA.  You get a safe, plain-text, cross-platform
language for communicating between your applications.  It can even be
used as a complete, full-featured standalone language.  And it's
lightweight to boot:  running on a 64-bit Linux, I'm looking at about 568k
of memory for the REPL for a full system.

Pez has added to the Atlast system a number of features:
* Portability to 64-bit platforms
* A Foreign Function Interface, for dynamically loading libraries to
  interface with system libraries.
* More complete access to standard system calls, such as fork(), exec(),
  etc.
* Regular expression support.
* Garbage collection.
* Numerous small improvements, and more large improvements on the way.  See
  doc/TODO.

I certainly hope that you find this codebase to be as useful and as much
fun as I have.

If you're a Ruby fanatic, by the way, there is also Rupez, which lets
you talk to libpez by means of the fantastic RubyFFI.  See
http://github.com/automatthew/rupez for the code.

Pete Elmore