diff options
author | Peter Reijnders <peter.reijnders@verpeteren.nl> | 2016-11-02 11:24:42 +0100 |
---|---|---|
committer | Adrian Thurston <thurston@colm.net> | 2016-12-19 10:25:04 -0500 |
commit | 16099cad79e0099f5e70218cca52fac0f0eb2485 (patch) | |
tree | da66d91b2ac57498cb1028f298a4262f83b653ca /doc/0_00_welcome.adoc | |
parent | 091030d692c6ce9c72639b9f954d883a6482d4ad (diff) | |
download | colm-16099cad79e0099f5e70218cca52fac0f0eb2485.tar.gz |
rough documentation outline
Diffstat (limited to 'doc/0_00_welcome.adoc')
-rw-r--r-- | doc/0_00_welcome.adoc | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/doc/0_00_welcome.adoc b/doc/0_00_welcome.adoc new file mode 100644 index 00000000..70bdc90d --- /dev/null +++ b/doc/0_00_welcome.adoc @@ -0,0 +1,46 @@ +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'. + |