January 9th, 2012
· Provides several fixes, additions and improvements in particular in the examples, libraries and architecture files.
November 20th, 2010
· improved error messages for non constant-integer table sizes
· getBoxType now only always called on fully evaluated expressions
· in propagation normal form.
· missing boxtype for pattern matching variables added
· Bitmask : new implementation correcting bug for large values
· some recursive call to simplify have been removed to avoid
· potential infinite loops during the simplification of some
May 17th, 2010
· Explicit substitutions. The language has been extended with new expressions type : exp[x1=def1; x2=def2; ...] allowing explicit substitutions in the lexical environment of an expression. This extension allows for instance, to customize an existing component by replacing some of its internal definitions without having to modify its source code. This extension is particularly useful to promote better code reuse.
· Improved mathematical description (--mathdoc option) and support for two new languages : German (-mdlang de) and Italian (-mdlang it)
· Support for floating point numbers in scientific notation and better precision for floating point constants. The precision used to print a floating point constant in the generated C++ code is no more limited to 6 digits. It is now dynamically adjusted to find the minimal number of digits that will produce the same internal representation when read back. This approach guarantees accuracy without sacrificing for readability.
· All expressions are now systematically represented in polynomial forms. For example x*x will be replaced by x^2. If x is a complex expression the later form has several advantages, in particular to limit CSE.
· Lazy semantics to select2 and select3 : the code generated for select2 and select3 is now based on conditional expressions ((cond)?exp1:exp0 ) instead of tables. The resulting code is more efficient as the stateless parts of the branches are not computed every time but only when really needed.
· new --task-graph option. It produces a graphical representation of the internal DAG of task in dot format (Graphviz http://www.graphviz.org/). This DAG is useful for example to understand the potential parallelism of a program as analyzed by the Faust compiler
· Two new tools : faust2graph and faust2graphviewer. These tools make use of the --task-graph option in order to produce the graphical representation, as a PDF file, of the internal DAG of tasks of a Faust program (require Graphviz).
· new reduce.lib library. It provides various operations on block of samples based on a high order 'reduce(op, n)' fold-like function. Moreover the music.lib library has been extended with break-point functions and multiple decorrelated random and noise generators. New flanger and stereowidth control have been added to the effect.lib library.
· new iPhone architecture. It consists in a iphone-cocoa.cpp architecture file and an Xcode template project to be used to produce the applications. Use "make iphone" in the example folder to build the examples for the iPhone.
· improved cross plateform compatibility and brand new visual studio 2008 project to build Faust on windows machines.
· Report error when non-integer table size is detected during compilation
· Corrected partial application of power operator. Now ^(n) is equivalent to \(x).(x^n) and not anymore to \(x).(n^x)
· Added missing faustpower definition when power function is used only in table content.
· Fixed lock-free implementations of PopHead and PopTail functions on work stealing queues in --scheduler mode
· Corrected missing dependencies in the internal DAG of tasks
· Added missing cache code to slow shared expressions used delayed
· Added missing cache code to foreign functions
April 29th, 2010
· C++ Code Generation
· Mathematical Documentation
· Language Extensions
January 25th, 2010C++ Code Generation:
· The Faust compiler translates Faust programs in C++. Several new options have been added to control how the C++ code is generated, in particular : control of the floating point precision : single (default), double, quad code re-organization in simple loops to facilitate automatic vectorization automatic parallelization based on OpenMP automatic parallelization based on a specific "Work-Stealing" algorithm
· Using formal methods the Faust compiler can produce automatically a complete mathematical documentation of a Faust program. This mathematical documentation is generated in Latex. It includes equations, block-diagrams and listings. The documentation can be customized by the user via ... tags inserted in Faust programs. This documentation can be used to : preserve on the long term a Faust program in a purely mathematical form, independently from Faust or any other programming language bring some help to understand and debug a FAUST program by giving the equations of each output signals according to the input signals and the user interface parameters.
· Sequential composition operator (A:B) has been restricted to expressions so that outputs(A) = inputs(B). This restriction has several advantages. It improves error detection, makes the code easier to understand and provides nicer and simpler formal semantic ( A:B is B o A) User interface labels can now contain metadata. For example the label "volume[unit:dB][tooltip:control the output volume of the reverb]" contains two metadata, a unit definition and a tooltip message than can be exploited by an architecture file to fine tune the user interface. User interface labels can contain absolute and relative pathnames to better control the hierarchical structure of the user interface. For example the label "../volume" points to place the widget one group higher in the hierarchy.
New Audio Architectures:
· Several new audio architectures have been included, in particular Action Script, CoreAudio, CSOUND, Chuck, Pure, SND-RT, for a total of about 20 different plateforms now supported.
April 2nd, 2008
· Syntax modification allowing unary operator - with identifiers (-x is now
· Parametric string can now contain the number of digits to use. In the string
· "line %2i" %2i will be replaced by the value of i using at least 2 digits.
· New fvariable declaration : possibility to declare an external C variable of
· block variability.
· Redefinition of symbols is now considered an error instead of a simple warning
· New syntax highlighting for TextWrangler (Macintosh)
· snd-rt-gtk.cpp: a new architecture file to use Faust with snd-rt. (Contributed
· by Kjetil Matheussen)
· synthfile.cpp: a new architecture file to generate audio files (contributed by
· Dominique Fober)
· osc.lib: a new oscillator library containing fast filter-based oscillators
· (contributed by Julius Smith)
· new additions to filter.lib and effect.lib : Piano dispersion filter,
· fifth-order fdelay5, notch filter, Second order transformer-normalized digital
· waveguide resonator... (contributed by Julius Smith)
· Improved jack-gtk.cpp architecture file allowing to control the default
· connexions and to run several instances of the same program (contributed by Fons
· Huge speedup of type inference system for complexe expressions by using
· memoization and recursivness information
· Bug correction in the type inference system of recursive expressions
· Better sharing of slow expressions apprearing delayed
· Avoid division by zero and report error when block-diagrams with no inputs or
· outputs are used in merge and split compositions
· The Faust compiler and some of the architecture files have been updated to
· replace char* parameters by const char* when appropriate