一句话:给出 Cuneiform 的抽象语法、简单类型系统与求值语义,并提供 Erlang 参考实现。
Cuneiform 是面向大规模科学数据分析的极简函数式工作流语言,支持以黑盒方式嵌入 Python、R 等外部代码,提供处理大规模分区数据的数据并行高阶算子,并支持条件与递归,可在多核服务器及 Hadoop、HTCondor 等分布式环境执行。本文为其建立计算语义:给出抽象语法、简单类型系统与求值语义,从而无歧义地规定语言行为;并提供一个简洁的 Erlang 参考实现以展示其可实现性。该语义将 Cuneiform 与简单类型 λ 演算相联系,便于在函数式编程语境下讨论其设计,同时支持推导黑盒算子之前的安全性,并为工作流语言编译器的验证奠定基础。
Abstract Cuneiform is a minimal functional programming language for large-scale scientific data analysis. Implementing a strict black-box view on external operators and data, it allows the direct embedding of code in a variety of external languages like Python or R, provides data-parallel higher order operators for processing large partitioned data sets, allows conditionals and general recursion, and has a naturally parallelizable evaluation strategy suitable for multi-core servers and distributed execution environments like Hadoop, HTCondor, or distributed Erlang. Cuneiform has been applied in several data-intensive research areas including remote sensing, machine learning, and bioinformatics, all of which critically depend on the flexible assembly of pre-existing tools and libraries written in different languages into complex pipelines. This paper introduces the computation semantics for Cuneiform. It presents Cuneiform's abstract syntax, a simple type system, and the semantics of evaluation. Providing an unambiguous specification of the behavior of Cuneiform eases the implementation of interpreters which we showcase by providing a concise reference implementation in Erlang. The similarity of Cuneiform's syntax to the simply typed lambda calculus puts Cuneiform in perspective and allows a straightforward discussion of its design in the context of functional programming. Moreover, the simple type system allows the deduction of the language's safety up to black-box operators. Last, the formulation of the semantics also permits the verification of compilers to and from other workflow languages.
@article{BrandtRL17,
title = {Computation semantics of the functional scientific workflow language Cuneiform},
author = {JÖRGEN BRANDT and WOLFGANG REISIG and ULF LESER},
journal = {Journal of Functional Programming},
volume = {27},
year = {2017},
doi = {10.1017/s0956796817000119}
}