Welcome
=======

== Colm = COmputer Language Machinery

Colm is a programming language designed for the analysis and http://www.program-transformation.org/Transform/TransformationSystems[transformation of computer languages].
Colm is influenced primarily by http://www.txl.ca/[TXL].

=== What is a transformation language?

A transformation language has a type system based on formal languages. 
Rather than define classes or data structures, one defines grammars. 
A parser is constructed automatically from the grammar, and the parser is used for two purposes: 
* to parse the input language,
* and to parse the structural patterns in the program that performs the analysis. 

In this setting, grammar-based parsing is critical because it guarantees that both the input and the structural patterns are parsed into trees from the same set of types, allowing comparison.

=== Colm's features

Colm is not-your-typical-scripting-language (TM):
* Colm's main contribution lies in the parsing method.
  Colm's parsing engine is generalized, but it also allows for the construction of arbitrary global data structures that can be queried during parsing.
  In other generalized methods, construction of global data requires some very careful consideration because of inherent concurrency in the parsing method.
  It is such a tricky task that it is often avoided altogether and the problem is deferred to a post-parse disambiguation of the parse forest.
* By default Colm will create an elf exectuable that be used standalone for that actual transformations.
* Colm is a static and strong typed scripting language.
* Colms' is very tiny and fast and can easily be embedded/linked with c/cpp programs.
* Colm's runtime is a stackbased VM that starts with the bare minium of the language and bootstraps itself.
* creates aVM is very tycan be embedded in C as it It runs in a embeddable vm, the language is bootstrapped.

=== Where is colm used?

Colm is developed and used intensively by http://www.colm.net/[Colm Networks] to develop fast network traffic automata and systems for traffic identification, decoding, pattern matching, and extraction of security events. 
But colm is also the driving force in http://www.colm.net/open-source/ragel/[the Ragel State Machine Compiler]

=== What is colm's history?

Colm's development started by https://twitter.com/ehdtee[Adrian Thurston] during his http://www.colm.net/files/colm/thurston-phdthesis.pdf[Ph.D. thesis] period after intensive study of http://research.cs.queensu.ca/~cordy/Papers/TC_SCAM06_ETXL.pdf[TXL].

=== When not to use Colm

Colm is meant to create executables or object files that can be linked in other programs. 
This make is ideal for tasks like high performance transformations, but not very convienient for throwaway-oneliners that are common with tools like 'sed' or 'awk'.

