The semantics of this language I'm thinking of are essentially scheme, with layout as opposed to bracket syntax, or more precisely being able to use either. The parallel blocks initially will be implemented using engines. The syncronicity issues can be implemented in a similar fasion, with a proxy function, to mediate between the function proper and it's return value.
I've been reviewing, scratching and descratching the idease for the language core, which for the time being I'll be calling da code.
Everything revolves around a few fundamental questions about functions. What is a function? What is a function behaviour? What is the effect of one function's evaluation(behaviour) on the overall ecosystem of a program?
In my head there are two fundamental kinds of function composition - sequential and parallel. It is true that they are redundant, since each of them can be expressed by the other, but in an attempt to provide a relatively brief and expressive language, I will consider both. This should help with intuitive application of different computational schematics.
delay s m =
:init
list/fill buffer s m
result = first buffer
buffer = tail buffer ++ s
result
delay-line signal =
signal + delay signal m
synth f e =
:init
s = 0
s = osc (f + e * delay m s)