(Translated by https://www.hiragana.jp/)
Cuneiform语言 - 维基百科,自由的百科全书 とべ转到内容ないよう

Cuneiform语言

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
Cuneiform
编程范型纯函数式すうしき, かずすえりゅうほど
設計せっけいしゃJörgen Brandt
发行时间2013ねん,​11ねんまえ​(2013
とうぜん版本はんぽん
  • 3.0.5 (2022ねん5がつ27にち)[1]
編輯維基數據鏈接
かたたい系統けいとう简单类型
じつさくげんErlang
操作そうさけいLinux, Mac OS
許可きょかしょうApache许可证 2.0
ぶんけん扩展めい.cfl
あみcuneiform-lang.org
啟發けいはつげん
Swift (并行脚本きゃくほん语言)えいSwift (parallel scripting language)

Cuneiformよう于大规模科学かがくすうすえ分析ぶんせきてき开源工作こうさくりゅうほど语言えいScientific workflow system[2][3]。 它是促进并行计算てきせい态类がたてき纯函数式すうしき编程语言。它的とくせいゆう个全こうのうてき外界がいかい函数かんすうせっこうえいforeign function interfaceまこと许用户集成しゅうせいらい很多外部がいぶ编程语言てき软件。Cuneiformざい组织层面じょう提供ていきょうりょういち些设ほどこせ,如条件じょうけんぶんささえ通用つうよう递归使つかい具有ぐゆう图灵かん备性

がいじゅつ

[编辑]

Cuneiform尝试ひしげ近在きんざい科学かがく工作こうさくりゅうほどけい统如Apache TavernaえいApache TavernaKNIMEえいKNIMEあるGalaxyあずかだい规模すうすえ分析ぶんせきほどじょ模型もけいMapReduceあるPig Latinこれ间的间隙,どう提供ていきょう函数かんすうしき编程语言てき通用つうようせい

Cuneiformよう分布ぶんぷしきErlang实现てき。如果运行ざい分布ぶんぷしき态下,它导いち个遵循POSIXてき分布ぶんぷしきぶんけんけい,如GlusterあるCephえいCeph (software)#CephFSようFUSE集成しゅうせいぼう个其ぶんけんけい统例如HDFS)。さく为替だい选择,Cuneiform脚本きゃくほん以执ぎょうざいHTCondorえいHTCondorあるApache Hadoop顶上[4][5][6][7]

Cuneiform受到りょうPeter Kellyてき工作こうさくてきかげ响,ひさげ议函数式すうしき编程さく科学かがく工作こうさくりゅうほど执行てき模型もけい[8]而,Cuneiform不同ふどう于其てきもとかずすえりゅうほど编程てき工作こうさくりゅうほど语言,如并行脚本きゃくほん语言SwiftえいSwift (parallel scripting language)[9]

扩展软件集成しゅうせい

[编辑]

外部がいぶ工具こうぐ库(RあるPython库)どおり外界がいかい函数かんすうせっこうえいforeign function interfaceらい集成しゅうせいてきつう过它以组あい如允许通过snippet节点使用しよう外部がいぶ软件てきKNIMEえいKNIMEある集成しゅうせいJava软件提供ていきょうBeanShellえいBeanShellふく务的Apache TavernaえいApache Tavernaつう过定义采よう外界がいかい语言てきにん务,就可能かのう使用しよう一个外部工具或库的API。这种方式ほうしき工具こうぐ直接ちょくせつ集成しゅうせい而不需要じゅよううつし包装ほうそうあるおもしん实现工具こうぐ[10]

目前もくぜん支持しじてき外界がいかい编程语言ゆう

计划增加ぞうか外界がいかい语言AWKgnuplot

类型けい

[编辑]

Cuneiform提供ていきょう简单てきせい态检查的类型けい[11]。虽然Cuneiform提供ていきょうれつ表作おもてさく复合すうすえ类型,它省りゃくりょう传统てきれつひょう访问headtail),以避めんざい访问空列くうれつひょう时,可能かのう引起てき运行时间错误てき可能かのうせい。转而れつひょうただのうどおり过在其上mapあるfold,以全ゆうあるぜん无方しき访问。此外,Cuneiform(ざい组织层面)省略しょうりゃくりょうさん术,这排除はいじょりょうじょ以零てき可能かのうせい省略しょうりゃくにんなんてき份定义运さんまこと许保证运ぎょう时间错误ただのうざい外界がいかいだい码中引发。

もと础数すえ类型

[编辑]

Cuneiform提供ていきょうてきもと础数すえ类型ゆうぬの尔值くしぶんけん。这里てきぶんけんもちいらい任意にんい格式かくしき在外ざいがいかい函数かんすう间交换数すえ

记录しきひきはい

[编辑]

Cuneiform提供ていきょう记录(结构)さく为复ごうすうすえ类型。下面かめんてきれい展示てんじてい义一个变りょうrさく为有两个だんa1a2てき记录,だい一个是字符串,而第个是ぬの尔值:

let r : <a1 : Str, a2 : Bool> =
  <a1 = "my string", a2 = true>;

记录以要么通过投影とうえい(projection)よう么通过しきひきはいらい访问。下面かめんてきれい从记录rひっさげ两个だんa1a2

let a1 : Str = ( r|a1 );

let <a2 = a2 : Bool> = r;

れつひょうれつひょう处理

[编辑]

いちてき,Cuneiform提供ていきょうれつひょうさく为复ごうすうすえ类型。下面かめんてきれい展示てんじてい义一个变りょうxsさく为一个有三个元素的一个文件:

let xs : [File] =
  ['a.txt', 'b.txt', 'c.txt' : File];

れつひょう以通过forfoldさん子来こらい处理。这里てきforさん接受せつじゅ个列ひょうらい逐个元素げんそてき处置れつひょう(类似于Racketなかてきfor/listCommon LispなかてきmapcarあるErlangなかてきzipwith)。

下面かめんてきれい展示てんじ如何いかざい一个单一的列表上map,结果一个文件列表:

for x <- xs do
  process-one( arg1 = x )
  : File
end;

下面かめんてきれい展示てんじ如何いかzip两个れつひょう,结果也是一个文件列表:

for x <- xs, y <- ys do
  process-two( arg1 = x, arg2 = y )
  : File
end;

さいきさきれつひょう使用しようfoldさん子来こらい做聚しゅう下面かめんてきれいごう计一个列ひょうてき元素げんそ

  fold acc = 0, x <- xs do
    add( a = acc, b = x )
  end;

并行执行

[编辑]

Cuneiform纯函数式すうしき语言,就是说它支持しじ引用いんようさく为结论,它可以使用しよう独立どくりつ项,はた一个程序分解成可并行的各部份。Cuneiform调度分布ぶんぷ这些份到做工节点。此外,Cuneiformさいよう传名调用もとめ策略さくりゃく,值只ざい它对计算结果ゆう贡献时计さんさいきさき外界がいかい函数かんすう应用记忆てきようらい加速かそく包含ほうがん以前いぜん推导结果てき计算。

れい如,しもれつCuneiformほどついでまことfgてき应用平行へいこうてき运行,而hゆう赖的,它只ざいfg二者完成的时候可以开始:

let output-of-f : File = f();
let output-of-g : File = g();

h( f = output-of-f, g = output-of-g );

しもれつCuneiformほどじょどおり过将函数かんすうfうついた一个三元素列表,创建りょうさん个并ぎょう应用:

let xs : [File] =
  ['a.txt', 'b.txt', 'c.txt' : File];

for x <- xs do
  f( x = x )
  : File
end;

类似てきざい记录rてき构造ちゅうfgてき应用独立どくりつてきいん此可以并ぎょう运行:

let r : <a : File, b : File> =
  <a = f(), b = g()>;

れい

[编辑]

下面かめんいち个hello-world脚本きゃくほん

def greet( person : Str ) -> <out : Str>
in Bash *{
  out="Hello $person"
}*

( greet( person = "world" )|out );

这个脚本きゃくほんてい义了さいようBashてきいち个任务greet,它对其字くし实际さんすうperson预加じょう"Hello "。这个函数かんすう产生具有ぐゆう一个单一字符串字段的记录out。应用greet,绑定实际さんすうpersonいたくし"world",产生记录<out = "Hello world">はた这个记录投影とうえい为它てきだんoutもとめ值出くし"Hello world"

以通过定义采ようBashてき一个任务来集成命令行工具:

def samtoolsSort( bam : File ) -> <sorted : File>
in Bash *{
  sorted=sorted.bam
  samtools sort -m 2G $bam -o $sorted
}*

ざい这个れい子中こなかてい义了にんsamtoolsSort。它调ようりょう工具こうぐSAMtoolsえいSAMtools,处置いち个BAM格式かくしきてき输入ぶんけん,并产せい一个排序了也是BAM格式かくしきてき输出ぶんけん

发行历史

[编辑]
版本はんぽん 现日 实现语言 发布平台ひらだい 外界がいかい语言
1.0.0 2014ねん5がつ Java Apache Hadoop Bash, Common Lisp, GNU Octave, Perl, Python, R, Scala
2.0.x 2015ねん3がつ Java HTCondorえいHTCondor, Apache Hadoop Bash, BeanShellえいBeanShell, Common Lisp, MATLAB, GNU Octave, Perl, Python, R, Scala
2.2.x 2016ねん4がつ Erlang HTCondorえいHTCondor, Apache Hadoop Bash, Perl, Python, R
3.0.x 2018ねん2がつ Erlang 分布ぶんぷしきErlang Bash, Erlang, Java, MATLAB, GNU Octave, Perl, Python, R, Racket

ざい2016ねん4がつ,Cuneiformてき实现语言从Javaきり换成りょうErlang,并且ざい2018ねん2がつ,它的主要しゅよう发布执行平台ひらだいApache Hadoop变更为分布ぶんぷしきErlang。此外,从2015ねんいた2018ねんHTCondorえいHTCondor曾被さく为可がえだい执行平台ひらだいらい维护。

Cuneiformてき外表そとおもて语法おさむ订过两次,这反映はんえいざいしゅ版本はんぽんごうじょう

版本はんぽん1

[编辑]

ざい2014ねん5がつ发布てき最初さいしょ草案そうあんちゅう,Cuneiformみつきり关联于Make,它构づくりかい释器ざい执行间要へん历的せい态数すえ赖图。あずかきさきらい版本はんぽんてき主要しゅよう别,缺乏けつぼう条件じょうけん、递归あるせい态类がた检查。区分くぶんぶんけん和字わじくしどおり过同波浪はろうごう~形成けいせい一个单一引用的字符串。脚本きゃくほんてき查询ひょう达式,つうtarget关键らい介入かいにゅう。Bashかけしょう外界がいかい语言。函数かんすう应用必须使用しようapply形式けいしきらい完成かんせい,它接受せつじゅtaskさく为第一个关键字实际参数。いちねんきさき,这种外表そとおもて法被はっぴ一种精简却类似的版本所替代。

下面かめんてきれい脚本きゃくほん从一个FTPふく务器载一个参考さんこうgenome:

declare download-ref-genome;

deftask download-fa( fa : ~path ~id ) *{
    wget $path/$id.fa.gz
    gunzip $id.fa.gz
    mv $id.fa $fa
}*

ref-genome-path = ~'ftp://hgdownload.cse.ucsc.edu/goldenPath/hg19/chromosomes';
ref-genome-id = ~'chr22';

ref-genome = apply(
    task : download-fa
    path : ref-genome-path
    id : ref-genome-id
);

target ref-genome;

版本はんぽん2

[编辑]
もと于Swingてき编辑Cuneiform 2.0.3てきREPL

Cuneiform外表そとおもて语法てきだい个草あんしゅ发表于2015ねん3がつざいCuneiformてき实现语言从JavaいたErlangてき迁移间,もち使用しようりょうさんねんもとめ值不どう于早方式ほうしきかい释器归约いち个表达式,而非へん历一个静态图。在外ざいがいひょう语法保持ほじ使用しよう这段时期,かい释器形式けいしき简化,这导致了だいいち个Cuneiformてき语义规定。语法とくせいゆうりょう条件じょうけんただしぬの尔值编码为列ひょう再度さいど利用りよう空列くうれつひょう为布尔值false空列くうれつひょう为布尔值true。递归きさきらいさく为形しきてきふく产品而增加ぞうかただしせい态类がた检查,ただざいきさきらいてき版本はんぽん3ちゅう介入かいにゅう

しもれつ脚本きゃくほんかい压一个压缩文件,并把它分解ぶんかい为大しょうひとし匀的划分:

deftask unzip( <out( File )> : zip( File ) ) in bash *{
  unzip -d dir $zip
  out=`ls dir | awk '{print "dir/" $0}'`
}*

deftask split( <out( File )> : file( File ) ) in bash *{
  split -l 1024 $file txt
  out=txt*
}*

sotu = "sotu/stateoftheunion1790-2014.txt.zip";
fileLst = split( file: unzip( zip: sotu ) );

fileLst;

版本はんぽん3

[编辑]

Cuneiform外表そとおもて语法てきとうぜん版本はんぽん较于早期そうきてき草案そうあん尝试ひしげきんあずか主流しゅりゅう函数かんすうしき编程语言てき间隙。它的とくせい简单てきせい态检查的类型けい统,并在れつひょうそと介入かいにゅう记录さく为第二个复合数据结构类型。ぬの尔值独立どくりつ为基础数すえ类型。

しもれつ脚本きゃくほんかいつつみいち个文けん,结果为一个文件列表:

def untar( tar : File ) -> <fileLst : [File]>
in Bash *{
  tar xf $tar
  fileLst=`tar tf $tar`
}*

let hg38Tar : File =
  'hg38/hg38.tar';

let <fileLst = faLst : [File]> =
  untar( tar = hg38Tar );

faLst;

引用いんよう

[编辑]
  1. ^ Release 3.0.5. 2022ねん5がつ27にち [2023ねん3がつ19にち]. 
  2. ^ そん副本ふくほん. [2021-03-03]. (原始げんし内容ないようそん档于2021-03-18). 
  3. ^ Brandt, Jörgen; Bux, Marc N.; Leser, Ulf. Cuneiform: A functional language for large scale scientific data analysis (PDF). Proceedings of the Workshops of the EDBT/ICDT. 2015, 1330: 17–26 [2021-03-03]. (原始げんし内容ないよう (PDF)そん档于2020-02-17). 
  4. ^ Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience by Jörgen Brandt. Erlang Central. [28 October 2016]. (原始げんし内容ないようそん档于2 October 2016). 
  5. ^ Bux, Marc; Brandt, Jörgen; Lipka, Carsten; Hakimzadeh, Kamal; Dowling, Jim; Leser, Ulf. SAASFEE: scalable scientific workflow execution engine (PDF). Proceedings of the VLDB Endowment. 2015, 8 (12): 1892–1895 [2021-03-03]. doi:10.14778/2824032.2824094. (原始げんし内容ないよう (PDF)そん档于2020-11-25). 
  6. ^ Bessani, Alysson; Brandt, Jörgen; Bux, Marc; Cogo, Vinicius; Dimitrova, Lora; Dowling, Jim; Gholami, Ali; Hakimzadeh, Kamal; Hummel, Michael; Ismail, Mahmoud; Laure, Erwin; Leser, Ulf; Litton, Jan-Eric; Martinez, Roxanna; Niazi, Salman; Reichel, Jane; Zimmermann, Karin. Biobankcloud: a platform for the secure storage, sharing, and processing of large biomedical data sets (PDF). The First International Workshop on Data Management and Analytics for Medicine and Healthcare (DMAH 2015). 2015 [2021-03-03]. (原始げんし内容ないよう (PDF)そん档于2018-10-01). 
  7. ^ Scalable Multi-Language Data Analysis on Beam: The Cuneiform Experience. Erlang-factory.com. [28 October 2016]. (原始げんし内容ないようそん档于2020-07-12). 
  8. ^ Kelly, Peter M.; Coddington, Paul D.; Wendelborn, Andrew L. Lambda calculus as a workflow model. Concurrency and Computation: Practice and Experience. 2009, 21 (16): 1999–2017. doi:10.1002/cpe.1448.  Barseghian, Derik; Altintas, Ilkay; Jones, Matthew B.; Crawl, Daniel; Potter, Nathan; Gallagher, James; Cornillon, Peter; Schildhauer, Mark; Borer, Elizabeth T.; Seabloom, Eric W. Workflows and extensions to the Kepler scientific workflow system to support environmental sensor data access and analysis (PDF). Ecological Informatics. 2010, 5 (1): 42–50 [2021-03-03]. doi:10.1016/j.ecoinf.2009.08.008. (原始げんし内容ないよう (PDF)そん档于2022-02-25). 
  9. ^ Di Tommaso, Paolo; Chatzou, Maria; Floden, Evan W; Barja, Pablo Prieto; Palumbo, Emilio; Notredame, Cedric. Nextflow enables reproducible computational workflows. Nature Biotechnology. 2017, 35 (4): 316–319. PMID 28398311. doi:10.1038/nbt.3820. 
  10. ^ A Functional Workflow Language Implementation in Erlang (PDF). [28 October 2016]. (原始げんし内容ないよう (PDF)そん档于2022-02-25). 
  11. ^ Brandt, Jörgen; Reisig, Wolfgang; Leser, Ulf. Computation semantics of the functional scientific workflow language Cuneiform. Journal of Functional Programming. 2017, 27. S2CID 6128299. doi:10.1017/S0956796817000119.