Games Factory/MultiMedia Fusion ➔ C++/OpenGL/SDL ➔ Java/Xith3D/JOODE • Back to the real world ➔ A C school project ➔ Deadline: 6 months ➔ No object-orientation in sight ooc-lang.org I. The origins
➔ Java-derived syntax ➔ No structure ➔ ...instead of working on the actual project • MOD (Miracle-Oriented Development) ➔ Naive « translator » ➔ No error checking ➔ Bug-ridden ooc-lang.org I. The origins
SLOC ➔ Generates C code ➔ Handed in along with the real project ➔ « Real » project developed in a few days ➔ Success! « Version 1.0 sucks, but ship it anyway » Jeff Atwood (CodingHorror) ooc-lang.org I. The origins
evolved ➔ Still written in Java ➔ Type inference ➔ Generics (horribly implemented) • Meanwhile, on #ooc-lang/Freenode ➔ A self-hosting effort is started ooc-lang.org I. The origins
➔ rock = ooc port of the j/ooc compiler ➔ first real community effort ➔ serious cleanups • A few more weeks, and ➔ rock compiled itself! ➔ again... ➔ and again... ➔ (with a spoon) ooc-lang.org I. The origins
« Lightweight » • Fuckload of libraries • « Object-oriented » • « Safe » • « Modular » • Garbage-collected Can't we have both? ooc-lang.org II. The best of both worlds
➔ use = Libraries • Types ➔ cover = base types from C ➔ class = simple inheritance, interface, enum • Functions ➔ name: func (…) -> Type { … } ➔ first-class, overload, defaults, varargs ooc-lang.org II. The best of both worlds
<T> (t: T) T { t } → • try, catch = Exceptions ➔ Exception new("You dun goofed!") println() • version = Platform-specific blocks ➔ version(trial) { Time sleepSec(5) } • operator = Operator overload ➔ operator + (a, b: Int) { a - b } // huhu. ooc-lang.org II. The best of both worlds
left } else if(i instanceOf?(RightBound)) { e as RightBound right } • After match o { case lb: LeftBound => lf left case rb: RightBound => rb right } ooc-lang.org III. Syntactic sweets
Boehm GC - conservative & fast (si si.) ➔ -gc=off • But since new is a method like any other... ➔ pool := static Pool<This> new() ➔ new: static func -> This { pool acquire() } ➔ destroy: func { pool release(this) } ➔ v := Vector3 new() // sha-zam. ooc-lang.org III. Syntactic sweets
132 modules ➔ 1900 commits – Amos Wenger – Friedrich Weber – Rofl0r – Yannic Ahrens – Joshua Rösslein – Scott Olson – Michael Tremel – Anthony Roja Buck – Noel Cower – Mark Fayngersh – Peter Lichard – Patrice Ferlet – Nick Markwell – Daniel Danopia – Michael Kedzierski – Tim Howard – Mickael9 – Viraptor – ... ooc-lang.org IV. Rocking out
Legacy • sequence (default) ➔ One by one, lib cache ➔ Partial recompilation • make ➔ Generates a Makefile with the C code ➔ Ideal for distribution ooc-lang.org IV. Rocking out
structs, io, math, os...) ➔ ...but a bit large for some • There's no such thing as « The SDK » ➔ -sdk=, $OOC_SDK ➔ Bare minimum – Object – Class – a few base types ooc-lang.org IV. Rocking out
real hw, custom sdk, bits of asm but 0% C • ooc-ti sdk for tigcc, compiles+runs stuff on TI89! • pyooc use ooc code from python, json backend zero-configuration • ruby-inline-ooc load+evaluate ruby code inside ooc ooc-lang.org V. The legacy
ooc. deps based on usefiles, python server backend (nirvana) • stako a stack-based language inspired by factor • langsniff analyzes a text and find which language it's in • yajit simple just-in-time assembler - used in rock for flattening closures ooc-lang.org V. The legacy
• proof small testing framework for ooc • ooc-web ooc web applicaton framework • mustang templating engine based on the infamous mustache ooc-lang.org V. The legacy
Scala/Clojure? – What about C++? – What about C#? ➔ Development – Can I contribute? – Do you want money? – What's next for rock? – Where else can I help? ➔ Performance – Is it fast? ➔ Bindings – Does lib X have bindings yet? – Isn't it tedious to do bindings? ➔ Interoperability – Let's do rbooc! – Let's do Perl::ooc! – Let's do Y! ooc-lang.org VI. Agora