summaryrefslogtreecommitdiff
path: root/doc/0_00_welcome.adoc
diff options
context:
space:
mode:
authorPeter Reijnders <peter.reijnders@verpeteren.nl>2016-11-02 11:24:42 +0100
committerAdrian Thurston <thurston@colm.net>2016-12-19 10:25:04 -0500
commit16099cad79e0099f5e70218cca52fac0f0eb2485 (patch)
treeda66d91b2ac57498cb1028f298a4262f83b653ca /doc/0_00_welcome.adoc
parent091030d692c6ce9c72639b9f954d883a6482d4ad (diff)
downloadcolm-16099cad79e0099f5e70218cca52fac0f0eb2485.tar.gz
rough documentation outline
Diffstat (limited to 'doc/0_00_welcome.adoc')
-rw-r--r--doc/0_00_welcome.adoc46
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'.
+