fbpx
维基百科

Concurrent ML

Concurrent ML(CML)是Standard ML编程语言并发扩展,其特征是能够允许编程者建立可复合英语Function composition (computer science)的通信抽象,它是为头等对象而并未建入于语言。CML的设计和原语操作已经被一些其他编程语言接纳,比如GNU Guile[6]Racket[7]和Manticore[5]

Concurrent ML
编程范型并发计算
语言家族ML
設計者John Reppy
发行时间1991年,​32年前​(1991[1]
当前版本
  • 110.79 (2015年10月4日;穩定版本)[2]
網站cml.cs.uchicago.edu
主要實作產品
SML/NJ[3]MLton[4], Manticore[5]

概念 编辑

很多支持并发性的编程语言提供在并发通信通道,来允许在并发运行于系统中的进程线程之间的值交换。在进程之间建立的通信服从特定的协议,要求编程者书写函数来建立通信所要求的模式。同时,通信系统经常需要建立多个通道,比如多个服务器,并接着在有新数据可获得的时候,在可获得的通道之间进行选择。这可以使用轮询完成,比如Unix系统上的select操作。

组合特定于应用的协议和多方通信二者可能是复杂的,因为需要在预先存在的协议内介入轮询和检查阻塞。Concurrent ML通过介入可同步的事件,简约了这种编程概念的耦合[8]。事件是可用于同步操作(在CML和Racket中叫做sync)的头等抽象,用于潜在的阻塞并接着产生来自通信(例如在通道上的数据传输)结果的一些值。

在CML中,事件可以使用一些原语(primitive)操作来组合或操纵。每个原语操作构造一个新事件而非就地修改事件,允许构造表示想要的通信模式的复合事件。例如,CML允许编程者组合一些子事件来创建复合事件,它可以非确定性的选择其中某一个子事件。另一个原语操作建立新事件,它会修改来自在最初事件上的同步的结果值。这些事件具体化了通信模式,在非CML语言中要使用轮询循环或函数通过给每类事件的处理器来处理。

样例代码 编辑

下面是打印“hello, world”至控制台的样例代码。它产生一个线程来为字符串创建一个通道。这个线程接着产生另一个线程,来打印在这个通道上接收的第一个字符串。前者线程接着在这个通道上发送"hello, world\n"字符串。它使用了SML/NJ和CML:

cml_test.cm:
Library structure Hello is $cml/basis.cm $cml/cml.cm cml_test.sml 
cml_test.sml:
structure Hello = struct open CML fun hello () = let val c : string chan = channel () in spawn (fn () => TextIO.print (recv c)); send (c, "hello, world\n"); exit () end fun main (name, argv) = RunCML.doit (fn () => ignore (spawn hello), NONE) end 
运行:
$ ml-build cml_test.cm Hello.main Standard ML of New Jersey v110.79 [built: Sat Oct 26 12:27:04 2019] [scanning cml_test.cm] [library $cml/basis.cm is stable] [library $cml/cml.cm is stable] [parsing (cml_test.cm):cml_test.sml] [creating directory .cm/SKEL] [library $cml/cml-internal.cm is stable] [library $cml/core-cml.cm is stable] [library $SMLNJ-BASIS/basis.cm is stable] [library $SMLNJ-BASIS/(basis.cm):basis-common.cm is stable] [compiling (cml_test.cm):cml_test.sml] [creating directory .cm/GUID] [creating directory .cm/x86-unix] [code: 2738, data: 42, env: 2506 bytes] [scanning 68899-export.cm] [scanning (68899-export.cm):cml_test.cm] [parsing (68899-export.cm):68899-export.sml] [compiling (68899-export.cm):68899-export.sml] [code: 317, data: 37, env: 40 bytes] $ sml @SMLload=cml_test.x86-linux hello, world 

注意在非linux-x86平台上堆名字可能不同,若此则需要将有cml_test.x86-linux的行变更为对应的变体。在Ubuntu系统下,CML的安装包是libcml-smlnj

引用 编辑

  1. ^ Reppy, John H. CML: a Higher-Order Concurrent Language. PLDI. June 1991. 
  2. ^ 110.79 Distribution Files (英語). 
  3. ^ . [April 5, 2021]. (原始内容存档于2021-04-20). 
  4. ^ . [April 5, 2021]. (原始内容存档于2021-05-16). 
  5. ^ 5.0 5.1 Fluet, Matthew; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adam; Xiao, Yingqi. (PDF). May 2009 [July 11, 2018]. (原始内容 (PDF)存档于2021-05-16). 
  6. ^ Wingo, Andy. . June 29, 2017 [July 11, 2018]. (原始内容存档于2020-12-06). 
  7. ^ Flatt, Matthew; Findler, Robert Bruce. Kill-safe synchronization abstractions. Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation. 2004, 39 (6): 47–58. doi:10.1145/996841.996849. 
  8. ^ Reppy, John H. Concurrent ML: Design, application and semantics. Lecture Notes in Computer Science 693. 1993: 165–198. ISBN 978-3-540-56883-4. doi:10.1007/3-540-56883-2_10.  |journal=被忽略 (帮助)

外部链接 编辑

官方网站

concurrent, 是standard, ml编程语言的并发扩展, 其特征是能够允许编程者建立可复合, 英语, function, composition, computer, science, 的通信抽象, 它是为头等对象而并未建入于语言, cml的设计和原语操作已经被一些其他编程语言接纳, 比如gnu, guile, racket, 和manticore, 编程范型并发计算语言家族ml設計者john, reppy发行时间1991年, 32年前, 1991, 当前版本110, 2015年10月4日, 穩定版本. Concurrent ML CML 是Standard ML编程语言的并发扩展 其特征是能够允许编程者建立可复合 英语 Function composition computer science 的通信抽象 它是为头等对象而并未建入于语言 CML的设计和原语操作已经被一些其他编程语言接纳 比如GNU Guile 6 Racket 7 和Manticore 5 Concurrent ML编程范型并发计算语言家族ML設計者John Reppy发行时间1991年 32年前 1991 1 当前版本110 79 2015年10月4日 穩定版本 2 網站cml wbr cs wbr uchicago wbr edu主要實作產品SML NJ 3 MLton 4 Manticore 5 目录 1 概念 2 样例代码 3 引用 4 外部链接概念 编辑很多支持并发性的编程语言提供在并发通信通道 来允许在并发运行于系统中的进程或线程之间的值交换 在进程之间建立的通信服从特定的协议 要求编程者书写函数来建立通信所要求的模式 同时 通信系统经常需要建立多个通道 比如多个服务器 并接着在有新数据可获得的时候 在可获得的通道之间进行选择 这可以使用轮询完成 比如Unix系统上的 a href Select Unix html title Select Unix select a 操作 组合特定于应用的协议和多方通信二者可能是复杂的 因为需要在预先存在的协议内介入轮询和检查阻塞 Concurrent ML通过介入可同步的事件 简约了这种编程概念的耦合 8 事件是可用于同步操作 在CML和Racket中叫做sync 的头等抽象 用于潜在的阻塞并接着产生来自通信 例如在通道上的数据传输 结果的一些值 在CML中 事件可以使用一些原语 primitive 操作来组合或操纵 每个原语操作构造一个新事件而非就地修改事件 允许构造表示想要的通信模式的复合事件 例如 CML允许编程者组合一些子事件来创建复合事件 它可以非确定性的选择其中某一个子事件 另一个原语操作建立新事件 它会修改来自在最初事件上的同步的结果值 这些事件具体化了通信模式 在非CML语言中要使用轮询循环或函数通过给每类事件的处理器来处理 样例代码 编辑下面是打印 hello world 至控制台的样例代码 它产生一个线程来为字符串创建一个通道 这个线程接着产生另一个线程 来打印在这个通道上接收的第一个字符串 前者线程接着在这个通道上发送 hello world n 字符串 它使用了SML NJ和CML cml test cm Library structure Hello is cml basis cm cml cml cm cml test sml cml test sml structure Hello struct open CML fun hello let val c string chan channel in spawn fn gt TextIO print recv c send c hello world n exit end fun main name argv RunCML doit fn gt ignore spawn hello NONE end 运行 ml build cml test cm Hello main Standard ML of New Jersey v110 79 built Sat Oct 26 12 27 04 2019 scanning cml test cm library cml basis cm is stable library cml cml cm is stable parsing cml test cm cml test sml creating directory cm SKEL library cml cml internal cm is stable library cml core cml cm is stable library SMLNJ BASIS basis cm is stable library SMLNJ BASIS basis cm basis common cm is stable compiling cml test cm cml test sml creating directory cm GUID creating directory cm x86 unix code 2738 data 42 env 2506 bytes scanning 68899 export cm scanning 68899 export cm cml test cm parsing 68899 export cm 68899 export sml compiling 68899 export cm 68899 export sml code 317 data 37 env 40 bytes sml SMLload cml test x86 linux hello world 注意在非linux x86平台上堆名字可能不同 若此则需要将有cml test x86 linux的行变更为对应的变体 在Ubuntu系统下 CML的安装包是libcml smlnj 引用 编辑 Reppy John H CML a Higher Order Concurrent Language PLDI June 1991 110 79 Distribution Files 英語 引文格式1维护 未识别语文类型 link What is Standard ML of New Jersey April 5 2021 原始内容存档于2021 04 20 ConcurrentMLImplementation April 5 2021 原始内容存档于2021 05 16 5 0 5 1 Fluet Matthew Bergstrom Lars Ford Nic Rainey Mike Reppy John Shaw Adam Xiao Yingqi Programming in Manticore a Heterogenous Parallel Functional Language PDF May 2009 July 11 2018 原始内容 PDF 存档于2021 05 16 Wingo Andy A New Concurrent ML June 29 2017 July 11 2018 原始内容存档于2020 12 06 Flatt Matthew Findler Robert Bruce Kill safe synchronization abstractions Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation 2004 39 6 47 58 doi 10 1145 996841 996849 Reppy John H Concurrent ML Design application and semantics Lecture Notes in Computer Science 693 1993 165 198 ISBN 978 3 540 56883 4 doi 10 1007 3 540 56883 2 10 journal 被忽略 帮助 外部链接 编辑官方网站 取自 https zh wikipedia org w index php title Concurrent ML amp oldid 71580971, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。