Cuneiform (programming language)

It features a versatile foreign function interface allowing users to integrate software from many external programming languages.

At the organizational level Cuneiform provides facilities like conditional branching and general recursion making it Turing-complete.

In this, Cuneiform is the attempt to close the gap between scientific workflow systems like Taverna, KNIME, or Galaxy and large-scale data analysis programming models like MapReduce or Pig Latin while offering the generality of a functional programming language.

[3][4][5][6] Cuneiform is influenced by the work of Peter Kelly who proposes functional programming as a model for scientific workflow execution.

[7][8] In this, Cuneiform is distinct from related workflow languages based on dataflow programming like Swift.

Additionally, Cuneiform omits (at the organizational level) arithmetics which excludes the possibility of division by zero.

The omission of any partially defined operation allows to guarantee that runtime errors can arise exclusively in foreign code.

Finally, foreign function applications are memoized to speed up computations that contain previously derived results.

The following Cuneiform program creates three parallel applications of the function f by mapping f over a three-element list: Similarly, the applications of f and g are independent in the construction of the record r and can, thus, be run in parallel: A hello-world script: This script defines a task greet in Bash which prepends "Hello " to its string argument person.

In its first draft published in May 2014, Cuneiform was closely related to Make in that it constructed a static data dependency graph which the interpreter traversed during execution.

Evaluation differs from earlier approaches in that the interpreter reduces a query expression instead of traversing a static graph.

During the time the surface syntax remained in use the interpreter was formalized and simplified which resulted in a first specification of Cuneiform's semantics.

The current version of Cuneiform's surface syntax, in comparison to earlier drafts, is an attempt to close the gap to mainstream functional programming languages.

Swing-based editor and REPL for Cuneiform 2.0.3