SOUL Lang Compilation to UGen

I think some parts of it are not GPL, outside the compiler. When I installed their combo distro on Windows, it said nothing about GPL, but presented a free-to-use kind of license.

Or maybe they’ve relicensed it as GPL but forgot to update the script that packages their Windows build. Not sure.

Strange thing is that it doesn’t put the license text file somewhere on the disk after installation. So to double-check, I’m going to have to uninstall and reinstall again.

The installer also has the dubious merit of shipping zero documentation. It’s all on-line.

Hmmm… that would be a shame because, after reading and playing it a bit, I really like it. I saw the eula in the code and thought the same as you, but the code readme of Kronos states:

“All the source code in this repository is licensed under GPL3. This includes the runtime library, and by proxy, automatically imposes GPL3 on any of your custom software that uses the supplied library. Please contact the repository owner if you are interested in a different licensing model.”

It seems there is no readme for Veneer yet.

1 Like

I don’t know the specifics but would be fun to test out neck to neck actually. I know that recently some optimizations were made to the SuperCollider architecture file to make memory allocation a bit more realtime safe (but still not fully unfortunately).

That said, Faust is brilliant and I recommend everyone interested in a domain specific DSP language that can compile to any platform basically (including microcontrollers) to check it out.

1 Like

Have you or anyone else had hands-on experiences with JSFX performance? How does it compare to Faust or C++ UGens of SC? Being from a commercial project, there’s not much written about it, although I see that there was a port of ATK to JSFX by someone who is active on this forum @joslloand so maybe they can comment :slight_smile:

By the way, the CSound version of JSFX is a re-implementation, Cockos hasn’t open-sourced their JSFX.

1 Like

It’s a just a re-implementation of the JSFX API, the scripting engine itself (EEL2) is open source. Have a look at the WDL/eel2 folder.

1 Like

Actually, I don’t have much to say here as I’ve been focused on the ATK’s SC3 implementation. Trond Lossius manages the JSFX implementation, and has been working on some updates / refactoring.

As you’d imagine, there are significant challenges in keeping the two implementations aligned! In the ideal world, I’d love to have a unified render code base that could just be shared across target implementations. (I think I’m dreaming…)

1 Like

I think it’s not just compiler work; I found this, for instance, from year ago: https://hal.science/hal-02158949v1/document

@scztt There are good code-generation libraries that come close to hand-crafted SIMD optimization. xsimd seems reasonable to me, and Eve seems like an advanced experiment.

However, does the SC server UGens not use a code-generation library (Nova Simd)? I’m curious about the difference you mentioned.

By the way, is it maintained?

I think it’s not just compiler work; I found this, for instance, from year ago:

I just skimmed through the paper, but what I got is that they do some manual loop unrolling in the code generation, hoping for GCC to autovectorize. Note that this article is from 2003, so I assume it does not reflect the current state :slight_smile: Maybe @Stephane_Letz can tell us more.

However, does the SC server UGens not use a code-generation library (Nova Simd)? I’m curious about the difference you mentioned.

xsimd, eve, nova-simd are all SIMD libraries. This is not code-generation.

By the way, is it maintained?

Have a look at the GitHub repo and judge for yourself: GitHub - timblechmann/nova-simd (My impression is: “not really”)

1 Like

The compilers do not do those things; the libraries generate code for architecture and parameters using the intrinsic SIMD types. Since the compiler doesn’t do the work, are they macros, or do they at least generate an intermediate code?

Again, this is not code generation, at least not in the usual sense of the word.

These are just libraries that provide a high-level abstraction over SIMD intrinsics.

I suggest you guys have a look at @madskjeldgaard FaustGen, that I forked and improved a bit recently here. Basically libfaust + LLVM JIT working in SC.

Concerning SIMD, the way we currently do in Faust is to have this -vec option help generate the code more adapted to clang/LLVM auto-vectorisation model. Read Using the Compiler - Faust Documentation. This -vec option can be used in C/C++ and LLVM IR backends.

Then we have methods and tools to help optimise the code, read Optimizing the Code - Faust Documentation, in particular this Optimizing the C++ or LLVM section.

Note that we have faustgen~ for Max/MSP since like 2012, and more recently Albert Graef faustgen2~ for PureData.

So my feeling is that helping to have a fully working FaustGen would be of great help for the SC community :grinning:

(and we know how to generate for JSFX, and we know how to generate for Cmajor).

2 Likes

@Stephane_Letz I found some materials on pattern matching, but not much, and I was wondering if there is a place where this is discussed in depth.

Thank you for the links. Helpful resources.

You mean Faust pattern matching ? Only here.

1 Like