Good afternoon SuperCollider Community,
I’m currently working on developing a some code for a self-contained project that includes code in some other languages as well. What I would like to do is be able to do something like an #include to include local Supercollider functions, and, if possible, have classes local to my project that I read and then compile when starting up.
I’m sure there’s a preferred way of doing this, so I’m asking the community - what’s the most canonical way of handling this and ensuring that code is local and reusable ?
thanks!
John
Here are my thoughts, from my experience:
-
“include” a SuperCollider file at runtime using path.load(), or path.loadRelative(). This works for variables, functions and notably for object prototypes, and it’s the way I currently use the most to modularize my code.
EDIT: I initially wrote those functions wrong, sorry. Here is the related documentation
-
But that doesn’t work with Classes, which need the class library to be recompiled in order to be included. Here are some ideas about how to achieve that:
Then you can install that Quark/Extension, publish it, share it, reuse it. But then, if you have a Quark or Extension installed, it wouldn’t be so local anymore (i.e. it would be always included)
- At this point it depends on if you want to use scide or to launch sclang directly, but you could craft a project-specific library configuration file that would list all your includePaths for that project, and load it when you launch sclang:
$ sclang -l /path/to/config/file.yaml
- Or, last option for me, would be to add includePaths to config at runtime, but since you need a store and recompile every time you modify them, it’s not that flexible as it sounds (I admit I have never ever used this):
LanguageConfig.addIncludePath("/full/path");
LanguageConfig.store; // here you are saving to your default config file
thisProcess.recompile;
1 Like
This is super duper helpful - thank you!
1 Like