31. Programming Language Nerds Get Excited By Programming Language
After having written thousands of lines of 3D graphics C code for the SGI workstation, I experimented with Apple’s Macintosh Common Lisp on my PowerBook 170, and everything changed.
Both Mike and I were impressed by the development environment. It felt so much more elegant and productive than using C on Unix. We decided to switch our platform to the Mac. Mike would still develop his renderer in C for raw speed, while I developed in MCL.
Now I have never had a mind for business. Perhaps not the best thing to admit as I develop a new software system, but history bears me out. To any outsider not enamored by the promise of Object-Oriented Dynamic Languages and thoughts of next-generation 3D software, often fueled by copious amounts of Japanese tea, this was clearly a bad idea.
Anyone with a smattering of business sense would have pointed out to us that SGI was the platform for serious 3D work. They had the hardware and marketing for it. That was their raison d’être. Apple, on the other hand, was a company heading for financial trouble, with no interest or presence in the 3D market.
Yes, we were naive. And convinced that superior tools would lead to superior software and customers would flock to our door once they saw our system. In fact, we were so taken with our imaginary future that we were convinced the next big thing was going to be the Dylan language coming out of Apple’s Cambridge Research Labs, where MCL was being developed. This was going to be the language for the Apple Newton. Spoiler: it wasn’t, and in due course Apple would shut down the lab and divest itself of MCL.
But for a brief period in time, we were a Common Lisp 3D computer animation startup. Perhaps the first and only one ever.
Design & Code
The image above shows mesh extrusions along a particle system which is being generated from another particle system which is being in turn generated from the vertices of a polyhedral representation of a superquadric shape. Say that three times, fast.
This is possible because the class particle-system
follows the point-generator-mixin
(as does the class superquadric
by inheriting from polyhedron
).
I have been exploring this kind of layering of graphics entities. Somewhat analogous to function composition in software. As usual for this project, I don’t have a set goal in mind. Rather, I’m implementing code as the urge strikes me, tweaking the classes, reimplementing, and then looking back and seeing what abstractions I can identify.
Below the code listing, the printout of the class hierarchy shows all the classes which currently inherit from point-generator-mixin
.
On a side note, I did something scary: uploaded the code (in its haphazard work-in-progress state and all) to a public repository: https://github.com/kaveh808/kons-9
We’ll see what comes of it.