FORTH is a token-based programming language that involves explicit stack-based programming with (at least) two stacks; beyond that, arguments tend to break out concerning whether or not people should use:
Text files or 1K disk "blocks" to store programs;
An explicit "virtual machine definition" or make it entirely platform-independent;
Run FORTH on bare hardware, or atop a featureful OS;
Should there be "local variables"? Or should all words be defined to manipulate the stack directly?
It has been quite popular for use in real time applications, as many implementations provide tiny memory footprints and are well suited for burning ROMs. In addition, the programming model involves building up programs "bottom up" generally using an interactive interpreter, which eases debugging.
Amazon Thinking Forth; Leo Brodie; Paperback
This is Mitch Bradley's company that produces the likely most-used Open Firmware implementation.
A programming language vaguely based on Forth with a 1K long compiler on the 68K architecture.
A Public-domain portable ANSI Forth implemented in ANSI C .
RATFOR is preprocessor for FORTRAN that allows using C-like flow control, and which relaxes the strict indentation rules.
This language was promoted by IBM as a combined successor to both COBOL and FORTRAN . It parallels Ada , C++ , and Common Lisp in being a rather complex language the point of which people who truly understood it have been rare commodities. Like them, it offers a perhaps-too-rich set of data structures and control structures.
Note that the pared-down PL/M variant was used to implement the CP/M operating system. And much of Multics was implemented in PL/1.
The Multics PL/1 Compiler
REXX is an interpreted scripting language created at IBM based on PL/1.
An implementation of PL/I for OS/2 and Linux; closed source, but the beta is available as a free download.
A SNOBOL4 implemented using C , that should run on many Linux -like systems.
match - SNOBOL Style Pattern Matching for C
This is a library for use with C or C++ which takes a SNOBOL style pattern matching approach to parsing. The documentation for the library represents excellent documentation as to the "SNOBOL way" of things.
This is a high performance implementation of SPITBOL for x86_64 Unix-like systems
A discussion list on SNOBOL.
The developers of the long-popular SNOBOL text processing language created Icon . It seems to be a better language than SNOBOL; likely a lot better than a lot of string processing languages, and infinitely better suited to the purpose than either C or BASIC. It's quite portable, running under most flavors of Unix, M$-platforms, and relatively obsolescent platforms like the Atari ST, Amiga, and rather a lot of others.
It is almost certainly underused, as it's quite a nice language. While obscure in "commercial" circles, it has certainly been widely used from a "conceptual" perspective by those familiar with academic literature; the Common Lisp SERIES package implements something conspicuously similar to Icon generators, and the makers of Python have recently implemented generators as part of that language.
Here is a simple example of an Icon generator; watch
how i
iterates across individual values as well as
across sets that are generated. In effect, each component of the
expression is a generator that is put together into a "grand
generator" that the every control structure
requests to produce all of its values.
procedure main() every i := 1 | 2 | 3 | (5 to 15 by 3) | (20 to 100 by 5) | (7.5 to 47.4 by 11.35) do { write (i) } end
Generators may be combined with "goal directed evaluation," where what is generated is "eaten" by an expression that evaluates the generated result, typically eating generated elements until it actually succeeds. This provides similar functionality to the way Prolog programs bind database values to variables until the predicates succeed. The ideas are certainly not identical, but represent parallel ways to solve some of the same sorts of problems. The fact that Icon provides an imperative programming model that is more familiar to programmers may make it easier to work with than Prolog.
Noweb A Simple, Extensible Tool for Literate Programming
The newest version of Noweb is being implemented using Lua ; it was previously implemented using Icon.
The language designed to be Turing-complete but as fundamentally unlike any existing language as possible. Expressions that look like line noise. Control constracts that will make you gasp, make you laugh, and possibly make you hurl. Data structures? We don't need no steenking data structures!
INTERCAL CGI Script for "Mastermind"
See inscgi.i.txt for the gory truth...
An interpreted object oriented language, originally patterned after Eiffel. It also compiles into C, if you need it fast...
Tachyon 390 Cross Assembler So you want to do MVS Assembler work under Linux...
This language is billed as an artificial language that would be useful for humans to use; they have a grammar, spoken syntax, YACC parser, and dictionaries.
An ultimately macro-oriented programming language...
Not-necessarily-working code in "Java" at trac2001 at SourceForge.
The TXL programming language is a hybrid functional / rule-based language with unification, implied iteration and deep pattern match. In effect, it is something of a cross between Prolog , YACC , and ML .
Not available (yet) as free software, it seems most commonly used for transforming code from some computer language into forms amenable to software analysis, reengineering, code factoring, and other such things.
FlowDesigner is a free (GPL/LGPL) data flow oriented development environment. It can be used to build complex applications by combining small, reusable building blocks. In some ways, it is similar to both Simulink and LabView, but is hardly a clone of either.
FlowDesigner features a RAD GUI with a visual debugger. Although FlowDesigner can be used as a rapid prototyping tool, it can still be used for building real-time applications such as audio effects processing. Since FlowDesigner is not really an interpreted language, it can be quite fast.
Regular expressions are used to do 'pattern matching.' They are a less general form of "language" than any of the others here, not being able to express the full expressivity of looping, storage, and such, of 'real languages.'
They are fundamentally less powerful than typical languages that are "Turing equivalent;" regular expressions essentially describe (or are described by) finite state automata. They are nonetheless plenty useful, and are what is typically used in compiler tools like yacc to describe the "tokens" in computer languages.