Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> besides the company that did crash bandicoot on the PS1. And even that one I'm unsure of as I feel it's been mythologized with how often it's pointed to.

Well, good instincts, because it wasn't. Naughty Dog used Lisp to write a compiler for an s-expression based C-like language called GOAL (it was kind of a macro-assembler with a register allocator). The reason for using s-expressions was to get a syntactic macro system at compile time.

The game engine was written in this GOAL language. There was no list processing (car, cdr) or garbage collection happening on a PS2, only during compilation in macro-expansion.




I know less about GOOL, but the following seems to imply that GOOL was probably also a s-expr based non-Lisp language:

> As a language GOOL borrows its syntax and basic forms from Common Lisp. It has all of Lisp’s basic expression, arithmetic, bookkeeping, and flow of control operators.

Note that Andy explicitly only mentions things like syntax and arithmetic, but not any kind of list processing. Again, I am not sure, but I wouldn't be surprised if GOOL isn't a Lisp either, but only a Lisp-flavoured DSL for event-based AI code.


Lisps are more than just tracing GC and list processing.

There are implementations with other forms of memory management, and they have long supported other kinds of datastructures.


What would be the defining characteristics of Lisps, that separate them from other languages? Surely it can't be simply s-exps, since that is pretty much all GOAL and Lisps share. Would a C written in the form of s-exps qualify as a Lisp?


Being an homoiconic programming language for one, having a powerfull macro system is other.

Having s-exprs isn't necessarly required.

In fact, there was an Algol like language for Lisp, which was never adopted, as most people were confortable with s-expr, among other issues.

https://en.wikipedia.org/wiki/LISP_2

Dylan and Julia can also be considered Lisps.

Scheme, Interlisp, Common Lisp and many other flavours have support for all major data structures, not only lists.

Some Lisps like Common Lisp and Interlisp-D, also allow for stack allocation.

Some Lisps like Linear Lisp use linear types for memory management.

Some Lisps like Interlisp-D used reference counting.

As for the question, Lisp Machines and Interlisp exposed Assembly and low level primitives as Lisp functions.


Io and Rebol both have homo-iconicity and a macro system. Would you call them a Lisp? No wonder Lisp is the most powerful language in the world, when all powerful languages are secretly Lisp – without even knowing it!!!

I mean, the name "Lisp" is short for "List Processing", it's disingenuous to claim that Lisp doesn't need runtime List Processing.

https://iolanguage.org/

http://www.rebol.com/


> Lisp doesn't need runtime List Processing

Lisp needs list processing. But it's much more. Lisp has several kinds of numbers, symbols, strings, characters, vectors, arrays, hash tables, records, classes, objects, natively compiled functions, ... -> and all those are not made of lists. An array in Lisp is not made of lists underneath. A natively compiled function is not a list, it's a vector of machine code.


Putting aside the sarcasm, don't mistake Lisp from 1960 with what came after.

"First released in 1997, Rebol was designed over a 20-year period by Carl Sassenrath, the architect and primary developer of AmigaOS, based on his study of denotational semantics and using concepts from the programming languages Lisp, Forth, Logo, and Self. "

"Io is a pure object-oriented programming language inspired by Smalltalk, Self, Lua, Lisp, Act1, and NewtonScript.[2] Io has a prototype-based object model similar to the ones in Self and NewtonScript, eliminating the distinction between instance and class. Like Smalltalk, everything is an object and it uses dynamic typing. Like Lisp, programs are just data trees. Io uses actors for concurrency. "

Exercise for the reader how much from e.g. Common Lisp might be found in IO or Rebol.


My impression is that GOAL and Lisp shares quite a bit more.

https://opengoal.dev/docs/reference/lib

You might want to look at the features of real Lisp or Scheme implementations.


Not really, it did have first class symbols used for code/data hotloading, but otherwise it's mostly a C-with-classes in s-exprs.


did you look at the lib? Looks like what many Lisps have. The class stuff is also very Lisp like.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: