public
Description: The Cornerstone programming language.
Homepage:
Clone URL: git://github.com/RobertFischer/cornerstone.git
RobertFischer (author)
Fri Feb 27 18:50:19 -0800 2009
commit  c7b33a732d378115978424e4f243be61e1089b32
tree    35f80b70efdd4598b2e80134e3a8fe15ca630966
parent  157ee22f68c5dfaf9b0775eda992eff7fad671a5
README
The Cornerstone language provides an aggressively statically typed language with a Groovy/Ruby style scripting syntax.

To build it:
  0) If you have Perl installed, but not Gant, run "boostrap.pl" the first time.
  1) Run "gant" in the root directory.

Here are some notes:
* JVM-based concurrent-by-default functional language with Groovy/Ruby style syntax
* Rational as default numerical type.  Explicit trailing suffixes for others.
* Push implied static typing as hard as possible
* multiple dispatch (multimethods) with syntatic methods and syntatic exceptions
* let x = ... (impiled block) and let x = ... in {} (explicit block)
* Types are first-level objects (match on types)
* Method calls are microthreads unless explicitly specified
* Unify tuples and argument lists
* _ as missing arguments
* type? as "type option"
* ', and "
* int -> !! for "never returns"
* Properties / methods / functions 1st class objects.  Can do .name(), .caller(), etc.
* classes start with capital leters
* compile-time checked named arguments
* interpolated variables into Strings

Future extensions:
* :foo => :foo() => { x -> x.foo() }  (Note :foo(3) is {x->x.foo(3)}, not 3.foo())
* mmap files to Strings
* compile-time checked named arguments
* reference methods through :  (e.g. :foo[it] --> it.foo )
* easy compile-time augmentation through closures or AST modifications:
      @Generates(/findBy(\w+)/, { nameMatch, varargs ->  ... }
* LaTeX based documentation and literate programming
* Regex as value type
* GMP mpq as rational impl
* Other-lang blocks beyond Java (esp. Groovy, Scala, JRuby)
    let myVar = @@Java:MyVarType(arg1,arg2) { /* Java code using "arg1" and "arg2", returning MyVarType */ }
* Point-and-shoot concurrency over the network transparently leveraging RMI
* open classes:  "extend String { ... }"
* "open" to open categories  ("open com.smokejumperit.Category in { }")