Paradigm | array, functional |
---|---|
Designed by | Sven-Bodo Scholz, Clemens Grelck, et al. |
Developer | SaC Research Group |
First appeared | 1994 |
Preview release | 1.3.3-1079-1 (June 14, 2023[±] | )
Typing discipline | static, strong |
Implementation language | C and SAC |
OS | POSIX-compliant UNIX |
License | Free software [1] |
Filename extensions | .sac |
Website | www |
Influenced by | |
APL, SISAL, C |
SAC (Single Assignment C) is a strict purely functional programming language whose design is focused on the needs of numerical applications. Emphasis is laid on efficient support for array processing via data parallelism. Efficiency concerns are essentially twofold. On the one hand, efficiency in program development is to be improved by the opportunity to specify array operations on a high level of abstraction. On the other hand, efficiency in program execution, i.e. the runtime performance of programs, in time and memory consumption, is still to be achieved by sophisticated compilation schemes. Only as far as the latter succeeds, the high-level style of specifications can actually be called useful.
To facilitate compiling to efficiently executable code, certain functional language features which are not considered essential for numerical applications, e.g. higher-order functions, polymorphism, or lazy evaluation, are not (yet) supported by SAC. These may be found in general-purpose functional languages, e.g. Haskell, Clean, Miranda, or ML.
To overcome the acceptance problems encountered by other functional or array based languages intended for numerical / array intensive applications, e.g. SISAL, NESL, Nial, APL, J, or K, particular regard is paid to ease the transition from a C / Fortran like programming environment to SAC.
In more detail, the basic language design goals of SAC are to: