The quintessential goal of the SAC project lies in the stringent co-design of programming language technology and the corresponding compiler technology that effectively and efficiently maps programs to a large variety of parallel computing architectures, thus reconciling programming productivity with execution performance in the multi-/many-core era.
SAC follows an implicitly data-parallel approach where multi-dimensional arrays form the prominent data aggregation principle. Following a purely functional approach SAC arrays are indeed stateless values whose materialisation in memory (if any) is to the discretion of the compiler. SAC advocates an APL-like programming methodolgy that composes applications from smaller array building blocks. Unlike APL, the most basic building blocks are not atomic language primitives but instead implemented in SAC itself making use of SAC's versatile array comprehension and reduction construct: the with-loop.
As the name suggests, syntactically SAC imitates the look-and-feel of C-style imperative programming with the full range of (apparent) control flow constructs. However, SAC's loops and branches are merely syntactic sugar for proper tail-recursion and conditional expressions aimed at programmers coming from an imperative background.
Aggressive code optimisation that fully exploits the underlying functional semantics lets SAC achieve sequential performance levels that are competitive with with well written imperative code. Fully compiler-directed parallelisation achieves true performance gains (rather than compensating for low sequential performance).