# SAC programming language

> Mediated Wiki article. Canonical URL: https://mediated.wiki/source/SAC_programming_language
> Markdown URL: https://mediated.wiki/source/SAC_programming_language.md
> Source: https://en.wikipedia.org/wiki/SAC_programming_language
> Source revision: 1335811965
> License: Creative Commons Attribution-ShareAlike 4.0 International (https://creativecommons.org/licenses/by-sa/4.0/)

This article is about the functional language intended for numerical applications. For hardware description language, see [SA-C (programming language)](/source/SA-C_(programming_language)).

SAC Paradigm array, functional Designed by Sven-Bodo Scholz, Clemens Grelck, et al. Developer SaC Research Group First appeared 1994; 32 years ago (1994) Stable release v2.0.0-85-1 / 6 May 2025; 13 months ago (2025-05-06) Preview release 1.3.3-1079-1 (June 14, 2023; 3 years ago (2023-06-14)) [±] Typing discipline static, strong Implementation language C, SAC Platform x86-64 OS POSIX-compliant Unix, macOS License Free software [1] Filename extensions .sac Website www.sac-home.org Influenced by APL, SISAL, C

**SAC** (**Single Assignment C**) is a strict [purely functional](/source/Purely_functional_programming) [programming language](/source/Programming_language) which design is focused on the needs of numerical applications. Emphasis is laid on efficient support for [array processing](/source/Array_processing) via [data parallelism](/source/Data_parallelism). Efficiency concerns are essentially twofold. First, efficiency in program development is to be improved by the opportunity to specify array operations on a high level of [abstraction](/source/Abstraction). Second, efficiency in program execution, i.e., the runtime performance of programs, in time and memory consumption, is still to be achieved by sophisticated [compiling](/source/Compiler) schemes. Only as far as the latter succeeds, the [high-level](/source/High-level_programming_language) style of specifications can actually be called useful.

To facilitate compiling to efficiently executable code, certain functional language features considered non-essential for numerical applications, e.g., [higher-order functions](/source/Higher-order_function), [polymorphism](/source/Polymorphism_(computer_science)), or [lazy evaluation](/source/Lazy_evaluation), are not supported by SAC (yet). They are supported in general-purpose functional languages, e.g., [Haskell](/source/Haskell), [Clean](/source/Clean_(programming_language)), [Miranda](/source/Miranda_(programming_language)), or [ML](/source/ML_(programming_language)).

To overcome the acceptance problems encountered by other functional or array based languages intended for numerical or array intensive applications, e.g., [SISAL](/source/SISAL), [NESL](/source/NESL), [Nial](/source/Nial), [APL](/source/APL_(programming_language)), [J](/source/J_(programming_language)), or [K](/source/K_(programming_language)), particular regard is paid to ease the transition from a [C](/source/C_(programming_language)) or [Fortran](/source/Fortran) like programming environment to SAC.

In more detail, the basic language design goals of SAC are to:

- provide a purely functional language with a syntax very similar to that of C in order to ease, for a large community of programmers, the transition from an imperative to a functional [programming style](/source/Programming_style);

- support multi-dimensional arrays as first class objects;

- allow the specification of shape- and dimension-invariant array operations;

- provide high-level array operations that liberate programming from tedious and error-prone specifications of starts, stops and strides for array traversals thereby improving [code reusability](/source/Code_reuse) and [programming productivity](/source/Programming_productivity), in general.

- incorporate a module system that allows for separate compiling, separate name spaces, and abstract data types, and, additionally, provides an interface to foreign languages in order to enable reuse of existing code;

- provide means for a smooth integration of states and state modifications into the functional paradigm based on [uniqueness types](/source/Uniqueness_type);

- use the module system, the foreign language interface, and the integration of states in order to create a standard library which provides a functionality similar to that of the standard C libraries, e.g. powerful I/O facilities or mathematical functions;

- facilitate compiling to host [machine code](/source/Machine_code) which can be efficiently executed both in terms of time and space demand;

- facilitate compiling for non-sequential program execution in [multiprocessor](/source/Multiprocessor) environments.

## References

- Scholz, Sven-Bodo (1996). *Single Assignment C – Entwurf Und Implementierung Einer Funktionalen C-variante Mit Spezieller Unterstützung Shape-invarianter Array-operationen* [*Single Assignment C – Design and Implementation of a Functional C-variant with Special Support for Shape-invariant Array Operations*] (PhD thesis) (in German). Kiel, Germany: Institute of Computer Science and Applied Mathematics, Christian-Albrecht University of Kiel.

- Grelck, Clemens (2001). *Implicit Shared Memory Multiprocessor Support for the Functional Programming Language SaC – Single Assignment C* (PhD thesis). Kiel, Germany: Institute of Computer Science and Applied Mathematics, Christian-Albrecht University of Kiel. [ISBN](/source/ISBN_(identifier)) [3-89722-719-3](https://en.wikipedia.org/wiki/Special:BookSources/3-89722-719-3).{{[cite thesis](https://en.wikipedia.org/wiki/Template:Cite_thesis)}}: CS1 maint: ignored ISBN errors ([link](https://en.wikipedia.org/wiki/Category:CS1_maint:_ignored_ISBN_errors))

## External links

- [Official website](http://www.sac-home.org)

---
Adapted from the Wikipedia article [SAC programming language](https://en.wikipedia.org/wiki/SAC_programming_language) by Wikipedia contributors ([contributor history](https://en.wikipedia.org/wiki/SAC_programming_language?action=history)). Available under [Creative Commons Attribution-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/). Changes may have been made.
