It is a [[Type_system#STATIC|statically typed]] [[Functional programming|functional programming language]] promoting [[parallel computing]]. 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 (computer programming)|conditional branching]] and [[Recursion|general recursion]] making it [[Turing completeness|Turing-complete]]. ExternalIn tools and libraries (e.g.this, [[R (programming language)|R]] or [[Python (programming language)|Python]] libraries) are integrated via a [[foreign function interface]]. Cuneiform'sdata-drivenis evaluationthe modelattempt andto integrationclose ofthe externalgap software originate inbetween scientific workflow languagessystems like [[Apache Taverna|Taverna]], [[KNIME]], or [[Galaxy (computational biology)|Galaxy]] whileand its algorithmic skeletons ([[Higherlarge-orderscale function|second-orderdata functions]]) for parallel execution originate in data-parallelanalysis programming models like [[MapReduce]] or [[Pig (programming tool)|Pig Latin]]. while offering the generality of a functional programming language.
Cuneiform is implemented in distributed [[Erlang, (programming language)|Erlang]] and thereforedrives musta run[[POSIX]]-compliant ondistributed anfile Erlangsystem virtuallike machine[[Gluster]] or [[Ceph_(BEAMsoftware)#CephFS|Ceph]] similar(or toa the[[Filesystem wayin JavaUserspace|FUSE]] mustintegration runof onsome aother JVMfile (Javasystem, virtuale.g., machine[[Apache_Hadoop#HDFS|HDFS]]). Alternatively, Cuneiform scripts can be executed on top of [[Apache Hadoop|Hadoop]].<ref>http://www.saasfee.io</ref><ref>{{cite web|title=Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience by Jörgen Brandt|url=http://beta.erlangcentral.org/videos/scalable-multi-language-data-analysis-on-beam-the-cuneiform-experience-by-jorgen-brandt/#.WBLlE2hNzIU|website=Erlang Central|accessdate=28 October 2016}}</ref><ref>
{{Cite journal
| last1 = Bux | first1 = Marc
Line 83 ⟶ 85:
==External software integration==
External tools and libraries (e.g., [[R (programming language)|R]] or [[Python (programming language)|Python]] libraries) are integrated invia a Cuneiform[[foreign scriptfunction interface]]. In this it resembles, e.g., [[KNIME]] which allows the use of external software through itssnippet nodes, or [[foreignApache functionTaverna|Taverna]] interfacewhich offers [[BeanShell]] services for integrating [[Java (programming language)|Java]] software. By defining a task in a foreign language it is possible to use the API of an external tool or library. This way, tools can be integrated directly without the need of writing a wrapper or reimplementing the tool.<ref>{{cite web|title=A Functional Workflow Language Implementation in Erlang|url=http://www.erlang-factory.com/static/upload/media/1448992381831050cuneiformberlinefl2015.pdf|accessdate=28 October 2016}}</ref>
Currently supported foreign programming languages are: