FAUST (programming language): Difference between revisions

Content deleted Content added
No edit summary
m clean up, typo(s) fixed: doesn’t → doesn't (3), ’s → 's
Line 1:
{{Short description|Audio programming language}}
{{redirect|FAUST|other uses|Faust (disambiguation){{!}}Faust}}
{{More footnotes needed|date=March 2015}}
{{Infobox software
| name = FAUST
| developer = GRAME, Centre National de Création Musicale
| author = Yann Orlarey, Dominique Fober, Stéphane Letz
| released = {{releasestart date|2002}}
| latest release version = 2.60.3<ref>[https://github.com/grame-cncm/faust/releases Releases · grame-cncm/faust · GitHub]</ref>
| latest release date = {{releasestart date|2023|06|14}}
| operating system = [[Linux]], [[OS X]], [[Microsoft Windows|Windows]], [[Unix]]
| genre = Functional programming language for audio signal processing
Line 20:
==Overview==
The FAUST [[programming model]] combines a [[functional programming]] approach with a [[block diagram]] syntax:
* The functional programming approach provides a natural framework for [[signal processing]]. Digital signals are modeled as [[Sequence|discrete functions]] of time, signal processors as [[Higher-order function|second order functions]] that operate on them, and FAUST’sFAUST's block diagram ''composition operators'', used to combine signal processors together, as third order functions, etc.
* Block diagrams, even if purely textual as in FAUST, promote a modular approach to signal processing that complies with sound engineers' and audio developers' habits.
A FAUST program doesn’tdoesn't describe a sound or a group of sounds, but a [[Digital signal processing|signal processor]]. The program source is organized as a set of ''definitions'' with at least the definition of the keyword <code>process</code> (the equivalent of <code>main</code> in C):
<syntaxhighlight lang=haskell>
process = ...;
Line 134:
A useful option makes it possible to generate the block diagram representation of the program as one or more SVG graphic files.
 
It is useful to note the difference between the block diagram and the generated C++ code. As stated, the key idea here is not to compile the block diagram literally, but the mathematical function it denotes. Modern C/C++ compilers also don’tdon't compile programs literally. But because of the complex semantics of C/C++ (due to side effects, pointer aliasing, etc.) they can’tcan't go very far in that direction. This is a distinct advantage of a purely functional language: it allows compilers to do very advanced optimisations.
 
==Arrows-like semantics==