Talk:Game Oriented Assembly Lisp
From the Andy Gavin Page
editI have removed the following section from the Andy Gavin page. It is more appropriate for this GOAL page, but requires some re-editing to make it sound less breathless. Also, no sources:
Technical Notes
editFor Crash Bandicoot Gavin created GOOL (Game Oriented Object Lisp). This was a mixed interpreted and compiled LISP dialect used for all of the gameplay code in the first three Crash games. For the PlayStation 2 and Jak and Daxter, Gavin revamped this idea and created the GOAL (Game Oriented Assembly Lisp) programming language. Consequently, the game runs in a variant of LISP on the Playstation 2, instead of the more conventional C++ programming language. GOAL is a fully compiled (only native code runs on the target) full powered LISP/Scheme dialect. 95% of the runtime code in all 4 Naughty Dog Jak games was written in GOAL. The language is a full featured fully object oriented LISP variant. It does not use a garbage collector at runtime generically, but relies on a more game oriented heap system (with some garbage collection of dynamic game objects). It has a full development environment including a source level debugger, profiler, and editor (all built into Emacs!). Several features make it fairly unique. It has a full interactive listener that can dynamically compile and run arbitrary code. Any code, down to the function or constant level can be compiled and patched into a running game image. Additionally, it supports integrated inline assembly for all PS2 processors with integrated register coloring. This unique feature allows assembly, particularly vector unit assembly, to be used seamlessly in the middle of high level code. Even the extensive library of highly optimized assembly render code written for VU1 (the main vector processor) was written using GOAL.