SAC
Paradigmarray, functional
Designed bySven-Bodo Scholz, Clemens Grelck, et al.
DeveloperSaC Research Group
First appeared1994; 32 years ago (1994)
Stable release
v2.0.0-85-1 / 6 May 2025; 13 months ago (2025-05-06)
Preview release1.3.3-1079-1 (June 14, 2023; 3 years ago (2023-06-14)) [±]
Typing disciplinestatic, strong
Implementation languageC, SAC
Platformx86-64
OSPOSIX-compliant Unix, macOS
LicenseFree software [1]
Filename extensions.sac
Websitewww.sac-home.org
Influenced by
APL, SISAL, C

SAC (Single Assignment C) is a strict purely functional programming language which 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. First, efficiency in program development is to be improved by the opportunity to specify array operations on a high level of 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 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 considered non-essential for numerical applications, e.g., higher-order functions, polymorphism, or lazy evaluation, are not supported by SAC (yet). They are supported 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 or array intensive applications, e.g., SISAL, NESL, Nial, APL, J, or K, particular regard is paid to ease the transition from a C or 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;
  • 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 and 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;
  • 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 which can be efficiently executed both in terms of time and space demand;
  • facilitate compiling for non-sequential program execution in multiprocessor environments.

References

edit
  • 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 3-89722-719-3.{{cite thesis}}: CS1 maint: ignored ISBN errors (link)
edit

📚 Artikel Terkait di Wikipedia

SAC

Soluble adenylyl cyclase SA-C programming language S.A.C. (control code), in the 1950s FIELDATA SAC programming language Special Administration Console

List of C-family programming languages

Notable programming sources use terms like C-style, C-like, a dialect of C, having C-like syntax. The term curly bracket programming language denotes

Dataflow programming

In computer programming, dataflow programming is a programming paradigm that models a program as a directed graph of the data flowing between operations

Jolie (programming language)

Jolie (Java Orchestration Language Interpreter Engine) is an open-source programming language for developing distributed applications based on microservices

List of programming languages by type

list of notable programming languages, grouped by notable language attribute. As a language can have multiple attributes, the same language can be in multiple

Array programming

engineering settings. Modern programming languages that support array programming (also known as vector or multidimensional languages) have been engineered specifically

Carbon (programming language)

how a program might be written in Carbon and C++: Computer programming portal Comparison of programming languages Timeline of programming languages C++

Dart (programming language)

Dart is a programming language designed by Lars Bak and Kasper Lund and developed by Google. It can be used to develop web and mobile apps as well as server