Skip to content
Surf Wiki
Save to docs
technology/programming-languages

From Surf Wiki (app.surf) — the open knowledge base

SAC programming language


FieldValue
nameSAC
logoSAC language logo.png
paradigmarray, functional
designerSven-Bodo Scholz, Clemens Grelck, et al.
developerSaC Research Group
released
latest release versionv2.0.0-85-1
latest release date
typingstatic, strong
programming languageC, SAC
platformx86-64
operating systemPOSIX-compliant Unix, macOS
licenseFree software https://gitlab.sac-home.org/sac-group/sac2c/-/commit/80b63293fb2c075230f6e0fa7140ba607a301a91
file ext.sac
website
influenced byAPL, SISAL, C

the functional language intended for numerical applications

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

Wikipedia Source

This article was imported from Wikipedia and is available under the Creative Commons Attribution-ShareAlike 4.0 License. Content has been adapted to SurfDoc format. Original contributors can be found on the article history page.

Want to explore this topic further?

Ask Mako anything about SAC programming language — get instant answers, deeper analysis, and related topics.

Research with Mako

Free with your Surf account

Content sourced from Wikipedia, available under CC BY-SA 4.0.

This content may have been generated or modified by AI. CloudSurf Software LLC is not responsible for the accuracy, completeness, or reliability of AI-generated content. Always verify important information from primary sources.

Report