Version 3, last updated by Pete Kirkham at Sep 28 23:57 2008 UTC

Turtles all the way down

As kin is intended as a compiler, as little non-kin runtime should be provided, so it becomes self hosting.

Often when writing simulators with the pattern DSL→compiler+framework+libraries, I’ve found on profiling that routines which originated in the DSL need to be moved to the framework for performance reasons – the DSL doesn’t allow for getting to a low enough level to produce efficient code. Similarly when implementing a framework in languages such as C++ and Java, there’s a mismatch between the most common natural of simulation entities – either bond graph relational or co-routine procedural – and the execution model of OO procerdural languages. In order to be able to generate coroutines, you need call sequences which aren’t based on a single C-like stack.

Simplicity

There shouldn’t be more than one way to do any one thing in kin, but many ways to combine them, and good abstraction. It should be easy to generate efficient code without resorting to replication (as you have to do when generating code in Java, for example). There should be facilities to abstract over behaviour, state, and syntax. It should be easy to import standard libraries from the operating system so you don’t have to rewrite functionality.

Shaker Design

If it is not useful or necessary, free yourself from imagining that you need to make it.

If it is useful and necessary, free yourself from imagining that you need to enhance it by adding what is not an integral part of its usefulness or necessity.

And finally: If it is both useful and necessary and you can recognize and eliminate what is not essential, then go ahead and make it as beautifully as you can.

Wind, Sand and Stars

Perfection is attained not when there is no longer anything to add, but when there is no longer anything to take away…

The Kingdom is Among You

The big idea is “messaging” – that is what the kernal of Smalltalk/Squeak is all about (and it’s something that was never quite completed in our Xerox PARC phase). The Japanese have a small word – ma – for “that which is in between” – perhaps the nearest English equivalent is “interstitial”.

The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be. Think of the internet – to live, it (a) has to allow many different kinds of ideas and realizations that are beyond any single standard and (b) to allow varying degrees of safe interoperability between these ideas. — Alan Kay

Quotes harvested from C2.com