4. It's Groovy
● Groovy is object-oriented dynamic language by default, but…
… can be optionally typed;
… can be static type checking with @TypeChecked;
● dynamic != interpreted;
● static compilation with @CompileStatic;
● Groovy compiles down to JVM bytecode;
● Script vs Classes;
5. A little bit of history
2003 2007 2008
1.0
2011 2012
2.0
2014 20152005
6. Compilation phases
1. Initialization (read source files and config compiler)
2. Parsing (text → concrete syntax tree; Antlr2)
3. Conversion (CST → AST) @Grab
4. Semantic Analysis (resolve classes, consistency and grammar) @Lazy @Builder @Field @Log
5. Canonicalization (AST finalize and last chance to use AST) @Delegate @ToString @Immutable
6. Instruction Selection (instruction set for bytecode / type checking) @CompileStatic @TypeChecked
7. Class Generation (create bytecode in memory, AST → bytecode)
8. Output (binary output .class to file system)
9. Finalization (perform cleanup tasks, unused today!)
8. Groovy’s nature
programming language…
as type safe as you want it
static type checking
as fast as you need
static compilation
as functional as you make it
closures, immutable, etc…