Orastron forum

Other => Blog posts => Topic started by: stefano on Jan 17, 2023, 09:12 PM

Title: Conditionals in Ciaramella
Post by: stefano on Jan 17, 2023, 09:12 PM
(https://www.orastron.com/assets/img/oak.jpg)

Ciaramella (https://ciaramella.dev/) is not the first declarative dataflow language around. Remarkable members of this category of languages, at least to some degree, include FAUST (https://faust.grame.fr/), Lustre (https://www-verimag.imag.fr/The-Lustre-Programming-Language-and?lang=en), Kronos (https://kronoslang.io/), Reaktor Core (https://www.native-instruments.com/en/products/komplete/synths/reaktor-6/), and Max's Gen (https://docs.cycling74.com/max8/vignettes/gen_topic).

Last time (https://www.orastron.com/blog/ciaramella-smc) I discussed why we were unsatisfied with them and had to invent our own. Essentially, to me they don't really seem to be designed for actual development of music tech products (Lustre being innocent here, as it is openly not designed for that). Plus, I am somewhat irritated by their strong coupling between syntax and complier internals which cripples modularity (details in this paper (https://zenodo.org/record/6573430/files/53.pdf), and I have to admit we might have mistreated Reaktor Core somewhat, but it's still practically unusable for other reasons IMO).

Another aspect in which these languages are lacking or needlessly complicated is branching/conditional execution (vulgarly, "if"s, "switch"es, etc.). There are valid technical and historical reasons for this, but I believe it's time to get past them. In this post I'll tell you what we're doing about it in Ciaramella.

Read more (https://www.orastron.com/blog/conditionals-ciaramella)