First time here? Check out the FAQ!

Why Smalltalk?

+2 votes
Why does Kyma use Smalltalk?
asked Jan 9, 2019 in General by alan-jackson (Virtuoso) (15,220 points)

1 Answer

+3 votes
Best answer

This article gives a short history on how Smalltalk came to be chosen as the basis for Kyma on the Platypus, Capybara and Pacarana).

The short answer is that Smalltalk is the original object-oriented, live-coding language — the exemplar that serves as a model for C++, Objective C, Java, and others. Smalltalk was invented specifically for the purpose of making complex software systems more manageable through code that is modular and recombinant.

Smalltalk, like Kyma, is based on modules called “objects” whose internal states are accessible only through that object's defined protocol, thus reducing dependencies between objects. That's part of what makes it possible to replace an object with a new object without breaking the system. In other words, you can incrementally improve or optimize parts of the system while it is running! A Smalltalk image is almost like a living system that you can continually evolve, extend or modify.

The syntax of Smalltalk is simple. What makes it interesting is that it is a large database of code modules that you can recombine, modify, and extend, and that the changes you make to the system actually become part of the language. For example, you could define a new kind of number called ComplexNumber and immediately use complex numbers in combination with floats and integers. Kyma, too, functions as a large database of code modules (Sounds) that one can recombine and reuse in new ways.

The polymorphism and extreme late binding offered by Smalltalk inspired some other early features in Kyma: For example, “lifted” or “abstracted” Sounds have (green) variables in their parameter fields, and you can use Smalltalk scripts to create concrete instances of the lifted templates and bind concrete values to the variables. The late binding also inspired another kind of object in Kyma called an EventValue, which serves as an abstract placeholder for a live controller and automatically generates its own widget in a Virtual Control Surface that you can optionally remap to external control sources.

There's more, but I did promise a short answer (and it is already pretty long!)

answered Jan 9, 2019 by ssc (Savant) (115,770 points)
selected Jan 9, 2019 by alan-jackson