동시 ML

Concurrent ML
동시 ML
패러다임동시 컴퓨팅
가족ML
첫 등장1991; 31년(1991)[1]
웹사이트http://cml.cs.uchicago.edu/
주요 구현
SML/NJ,[2] MLton,[3] Manticore[4]

동시 ML(Concurrent ML, CML)은 프로그래머가 해당 언어에 내장되기 보다는 1등급복합적인 통신 추상화를 만들 수 있도록 하는 것이 특징인 표준 ML 프로그래밍 언어의 동시 확장이다.CML의 설계와 그것의 원시적 운영은 GNU Guile,[5] 라켓,[6] 그리고 Manticore와 같은 몇몇 다른 프로그래밍 언어로 채택되었다.[4]

개념

동시성을 지원하는 많은 프로그래밍 언어들은 시스템에서 동시에 실행되는 프로세스스레드 사이의 값 교환을 가능하게 하는 통신 채널을 제공한다.프로세스 간에 설정된 통신은 프로그래머가 필요한 통신 패턴을 설정하기 위한 기능을 작성하도록 요구하는 특정 프로토콜을 따를 수 있다.한편, 통신 시스템에서는 복수의 서버와 같은 복수의 채널을 구축한 후, 새로운 데이터를 이용할 수 있을 때 이용 가능한 채널 중 하나를 선택해야 하는 경우가 많다.이는 Unix 시스템에서 선택 작업과 같은 폴링을 사용하여 수행할 수 있다.

애플리케이션별 프로토콜과 다당간 통신을 모두 결합하는 것은 기존 프로토콜 내에서 폴링과 차단 확인의 도입 필요성 때문에 복잡할 수 있다.Concurrent ML은 동기화할 수 있는 이벤트를 도입하여 프로그래밍 개념의 이 결합을 줄임으로써 이 문제를 해결한다.[7]이벤트는 동기화 작업(일명)과 함께 사용할 수 있는 1종 추상화다.syncCML 및 라켓)에서 통신에서 비롯되는 일부 값(예: 채널에서 전송되는 데이터)을 잠재적으로 차단하고 생산하기 위해.

CML에서 이벤트는 다수의 원시 연산을 사용하여 결합하거나 조작할 수 있다.각각의 원시적 운영은 원하는 통신 패턴을 나타내는 복합적 사건의 건설을 허용하면서, 사건을 내부에서 수정하는 것이 아니라 새로운 사건을 구성한다.예를 들어, CML은 프로그래머가 여러 하위 이벤트를 결합하여 하위 이벤트 중 하나를 비결정론적으로 선택할 수 있는 복합 이벤트를 만들 수 있도록 한다.또 다른 원시 이벤트는 원래 이벤트의 동기화 결과 값을 수정하는 새로운 이벤트를 만든다.이러한 이벤트는 비 CML 언어로 일반적으로 폴링 루프 또는 각 이벤트 종류에 대한 핸들러로 처리되는 통신 패턴을 구현한다.

안녕 세계

여기 인쇄하는 프로그램이 있다."Hello, world!"콘솔로그것은 한 가닥의 실을 문자열용 채널과 함께 낳고, 또 다른 가닥은 그 채널에 수신된 문자열을 인쇄한다.SML/NJ와 CML을 사용한다. (비 Linux-x86 플랫폼에서는 힙 이름이 다를 수 있으므로 "cml_test.x86-linux"를 사용하여 라인을 다른 것으로 변경해야 할 수 있음)

cml_test.cm
도서관     구조화하다 안녕 이다     $cml/기본.cm     $cml/cml.cm     cml_test.sml을 하다 
cml_test.sml
구조화하다 안녕 = 구조상의     개방된 CML      재미있다 안녕 () = 하게 하다         발랄하게 하다 c : 끈을 매다 찬을 치다 = 채널을 돌리다 ()                      알을 낳다 (fn () => 텍스트IO.인쇄하다 (되뇌다 c));             보내다 (c, "안녕, 세상아!\n");             퇴장하다 ()         종지부를 찍다      재미있다 본래의 (_, 아그브) =         RunCML.해요 (fn () => 무시하다 (알을 낳다 안녕), 없음) 종지부를 찍다 
두들겨 패다
$ml-build cml_test.cm Hello.New Jersey v110.60의 메인 Standard ML [build: Mon Nov 27 14:19:21 2006] [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] [compiling (cml_test.cm):cml_test.sml] [creating directory .cm/GUID] [creating directory .cm/x86-unix] [code: 2170, data: 42, env: 2561 bytes] [scanning 18518-export.cm] [scanning (18518-export.cm):cml_test.cm] [parsing (18518-export.cm):18518-export.sml] [compiling (18518-export.cm):18518-export.sml] [code: 309, data: 37, env: 42 bytes] $ heap2exec cml_test.x86-linux cml_test $ ./cml_test Hell오, 세상에! 

외부 링크

참조

  1. ^ Reppy, John H. (June 1991). CML: a Higher-Order Concurrent Language. PLDI.
  2. ^ "What is Standard ML of New Jersey?". Retrieved April 5, 2021.
  3. ^ "ConcurrentMLImplementation". Retrieved April 5, 2021.
  4. ^ a b Fluet, Matthew; Bergstrom, Lars; Ford, Nic; Rainey, Mike; Reppy, John; Shaw, Adam; Xiao, Yingqi (May 2009). "Programming in Manticore, a Heterogenous Parallel Functional Language" (PDF). Retrieved July 11, 2018.
  5. ^ Wingo, Andy (June 29, 2017). "A New Concurrent ML". Retrieved July 11, 2018.
  6. ^ Flatt, Matthew; Findler, Robert Bruce (2004). "Kill-safe synchronization abstractions". Proceedings of the ACM SIGPLAN 2004 Conference on Programming Language Design and Implementation. 39 (6): 47–58. doi:10.1145/996841.996849.
  7. ^ Reppy, John H. (1993). Concurrent ML: Design, application and semantics. Functional Programming, Concurrency, Simulation and Automated Reasoning. Lecture Notes in Computer Science. Vol. 693. pp. 165–198. CiteSeerX 10.1.1.50.7965. doi:10.1007/3-540-56883-2_10. ISBN 978-3-540-56883-4.