github soul-lang/SOUL 0.9.59

latest releases: 1.0.92, 1.0.82, 1.0.80...
3 years ago

Version 0.9.59

  • Patches now support sending and receiving custom events from endpoints

    A new FIFO system means that outgoing events (including console messages) can now be collected on a different thread to the render thread. In the JUCE plugin wrapper, they are delivered on the message thread. In the Blueprint wrapper, there are new javascript bindings to send and receive custom events, which will enable features like metering and other custom run-time communication between the DSP and the GUI.

  • complex primitive support

    The primitive types have been extended to include complex32 and complex64 support. There is a complex type which like float provides the fastest host complex data type. The complex type support normal arithmetic operators, equality comparison, and the .real and .imag accessors to retrieve the real and imaginary components respectively. Imaginary constants can be created using the fi suffix for 32 bit and i suffix for 64 bit floating point values.

  • namespace specialisation and alias support

    Namespaces can now be parameterised, similar to the existing logic for processors and graphs. Namespaces are now valid specialisation parameters. Namespace aliases are created using the namespace keyword (e.g namespace foo = bar (float32);)

  • Changes to clamp/wrap behaviour around binary operators

    There was a degree of ambiguity when apply numeric operators to clamp and wrap objects - should the result be of the same type as the clamp/wrap, or should it be an int? We've moved to returning an int, which will require a cast to the clamp/wrap type if that is the desired result. It makes the resulting type clearer in some situations (e.g adding two clamp types of different ranges). The assignment operators work as expected (so will automatically keep the value within the clamp/wrap range).

  • Changes to generic function parameter binding

    With this release, we've updated the logic for determining data types for generic functions. Previously, when deciding what type should be used, the rules allowed for silent casting to candidate types, which could lead to confusion (e.g. a call to max (1, 2.0) would compile, and would return an int value 2 whilst max (1.0, 2) would compile and return a float64 value 2.0). The compiler will now fail to compile such code unless the types match exactly.

  • Updated llvm backend

    Resolved various issues around vector cast operations in the llvm backend.

  • Updated heart parser

    Various updates to the heart parser to resolve possible issues around naming conflicts.

  • Updated voice allocator

    The voice allocator now correctly forwards control events

  • Various soul command updates

    The soul command has various fixes applied to resolve implementation errors.

Don't miss a new SOUL release

NewReleases is sending notifications on new releases.