I've begun to implement the very basics of the FAUST language in ATS. FAUST is a very elegant functional language for audio/signal processing. The syntax is based on a certain "block diagram algebra", where a block is like a black-box function with some number of input signals and some number of outputs, and the algebra is given by five "composition" operations for grafting together inputs and outputs. The block diagram algebra can be mathematically explained as a (wheeled) PROP or as an form of arrow enrichment. I've done a lot of mathematical research on PROPs, properads and the like, so recreating this in a programming language is something I'm very enthusiastic about. In FAUST the in-/outputs are audio signals and the blocks are audio processors. FAUST is written in C++ and is very performant, but it is also very limited in what type an audio signal can be given. (Essentially, only streams of ints or floats, I believe). My idea is that it should be possible to give a very direct implementation of the block diagram algebra in ATS, that works for signals of any [viewt0ype].
My code so far is here: https://github.com/August-Alm/ATS-Experiments/blob/master/faust.dats Everything works just fine except the most elusive of the five operations: the [recursive_composition] which grafts in- and outputs into a feedback loop. The compiler says: $ patscc -DATS_MEMALLOC_LIBC -o faust faust.dats faust_dats.c: In function ‘__patsfun_32__32__1’: faust_dats.c:9229:1: warning: implicit declaration of function ‘__patsfun_32__32’ [-Wimplicit-function-declaration] ATSINSmove(tmp81__1, __patsfun_32__32(env0, env1, env2, arg0)) ; ^ In file included from faust_dats.c:15:0: /usr/lib/ATS2/ccomp/runtime/pats_ccomp_instrset.h:270:35: warning: assignment makes pointer from integer without a cast #define ATSINSmove(tmp, val) (tmp = val) ^ faust_dats.c:9229:1: note: in expansion of macro ‘ATSINSmove’ ATSINSmove(tmp81__1, __patsfun_32__32(env0, env1, env2, arg0)) ; ^ /tmp/ccF3c5gZ.o: In function `__patsfun_32__32__1': faust_dats.c:(.text+0x21e1): undefined reference to `__patsfun_32__32' collect2: error: ld returned 1 exit status I've tried everything that I can think of. In the github code I use [int]-signals but I've tried boxed types as well, and various other things. I've meticulously annotated all templates, and so on. Always the same compiler error. Any suggestions? Best wishes, August -- You received this message because you are subscribed to the Google Groups "ats-lang-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to ats-lang-users+unsubscr...@googlegroups.com. To post to this group, send email to ats-lang-users@googlegroups.com. Visit this group at https://groups.google.com/group/ats-lang-users. To view this discussion on the web visit https://groups.google.com/d/msgid/ats-lang-users/87d806f5-1ed8-4173-82d6-0b3ef7075084%40googlegroups.com.