모듈라-3

Modula-3
모듈라-3
Modula-3.svg
패러다임필수, 구조화, 절차, 모듈화, 동시
가족워스 모듈라
설계자루카 카델리, 제임스 도나휴, 루실 글래스먼, 믹 조던, 빌 칼소, 그렉 넬슨
개발자DEC
올리베티
elego 소프트웨어 솔루션 Gmbh
처음 등장한1988년, 34년(연간)
안정된 릴리스
5.8.6 / 2010년 7월 14일; 12년 전(2010-07-14)
프리뷰 릴리즈
5.8.6 / 2010년 7월 14일; 12년 전(2010-07-14)
타이핑 분야강력, 정적, 안전 또는 안전하지 않은 경우 명시적으로 격리된 상태
범위어휘
플랫폼IA-32, x86-64, PowerPC, SPARC
OS크로스 플랫폼:FreeBSD, Linux, Darwin, SunOS
웹 사이트www.modula3.org
주요 구현
SRC Modula-3, CM3,[1] PM3,[2] EZM3,[3] M3/PC Klagenfurt[4]
영향을 받다
ALGOL, 유클리드, 메사, 모듈라-2, 모듈라-2+, 오베론, 파스칼
영향받은
C#, Java, Nim,[5] OCaml, Rust,[6] Python[7]

Modula-3Modula-2+로 알려진 Modula-2의 업그레이드 버전의 후속으로 생각되는 프로그래밍 언어입니다.연구 분야에서 영향력이 있었지만(Java, C#, Python과 같은[8] 언어의 디자인에 영향을 미침) 업계에서 널리 채택되지는 않았습니다.설계자는 Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan(올리브티 소프트웨어 테크놀로지 연구소 이전), DEC(Digital Equipment Corporation) Systems Research Center(SRC) 및 ORC(올리브티 리서치 센터)의 Bill Kalshow와 Greg Nelson입니다.

Modula-3의 주요 특징은 시스템 프로그래밍 언어의 힘을 유지하면서 단순성과 안전성을 유지하는 것입니다.Modula-3는 실용적인 실제 프로그래밍을 위한 새로운 구조를 도입하면서 파스칼의 형식 안전 전통을 이어가는 것을 목표로 했습니다.특히 Modula-3는 범용 프로그래밍(템플릿과 유사), 멀티스레딩, 예외 처리, 가비지 컬렉션, 객체 지향 프로그래밍, 부분[further explanation needed] 노출 및 안전하지 않은 코드의 명시적 마킹에 대한 지원을 추가했습니다.Modula-3의 설계 목표는 현대 명령형 프로그래밍 언어의 가장 중요한 특징을 매우 기본적인 형태로 구현한 언어였다.따라서 다중 상속 연산자 오버로드와 같은 위험하고 복잡한 기능은 생략되었습니다.

역사적 발전

모듈라-3 프로젝트는 1986년 11월 모리스 윌크스니클라우스 워스에게 새로운 버전의 모듈라에 대한 몇 가지 아이디어와 함께 편지를 쓰면서 시작되었다.Wilkes는 이 시점 직전에 DEC에서 근무하고 있다가 영국으로 돌아와 Olivetti's Research Strategy Board에 입사했습니다.워스는 이미 오베론으로 이적했지만, 윌크스 팀이 Modula라는 이름으로 개발을 계속하는 것에 아무런 문제가 없었다.언어 정의는 1988년 8월에 완료되었으며 1989년 1월에 개정되었습니다.곧 DEC와 Olivetti의 컴파일러가 그 뒤를 이었고, 그 후 서드 파티의 구현이 이루어졌습니다.

그 디자인은 당시 SRC와 Acon Computers Research Center(ARC, ORC가 Acon을 인수했을 때 사용하던 Modula-2+ 언어에 큰 영향을 받았다.이것은 DEC Firefly 멀티프로세서 VAX 워크스테이션용 운영체제가 작성되고 Acon용 C와 컴파일러 Mo에 사용된 언어이다.ARM 기반 Acon Arkimedes 범위의 컴퓨터 ARX 운영 체제 프로젝트를 위한 ARC의 Dula Execution Library(CAMEL)가 작성되었습니다.Modula-3 보고서 개정에서 언급되었듯이, 그 언어메사, 시더, 오브젝트 파스칼, 오베론, [9]유클리드와 같은 다른 언어들에 의해 영향을 받았다.

1990년대에 모듈라-3는 교육용 언어로 상당한 인기를 끌었지만 산업용으로 널리 채택된 적은 없었다.이에 기여한 것은 Modula-3의 핵심 서포터인 DEC의 사망일 수 있다(특히 1998년 Compaq에 DEC가 매각되기 전에 DEC를 효과적으로 유지하지 못하게 되었을 때).어쨌든 Modula-3의 단순함과 파워에도 불구하고 객체 지향 프로그래밍의 구현이 제한된 절차적 컴파일 언어에 대한 수요는 거의 없었던 것으로 보인다.Crita는 Crita에 의해 한때 CM3라는 이름의 상용 컴파일러를 제공했습니다.Crita는 DEC가 Compaq에 매각되기 전에 고용된 CM3라는 이름의 주요 구현자 중 한 명과 Reactor라는 이름의 통합 개발 환경(IDE) 및 확장 가능한 Java 가상 머신(바이너리 코드 및 소스 코드 형식으로 라이센스가 부여되고 Reactor로 구축 가능)을 제공했습니다.l Mass, Inc.는 2000년에 영업활동을 중단하고 제품의 소스 코드 일부를 elego Software Solutions GmbH에 넘겼습니다.Modula-3는 현재 대학에서 주로 비교 프로그래밍 어학 강좌에서 가르치고 있으며, 그 교과서는 절판되었다.기본적으로 Modula-3의 유일한 기업 서포터는 elego로, Critical Mass에서 소스를 상속받아 소스와 바이너리 코드로 CM3 시스템을 여러 번 출시했습니다.Reactor IDE는 몇 년 후에 CM3-IDE라는 새로운 이름으로 공개되었습니다.2002년 3월, 엘레고는 또 다른 활성 Modula-3 유통인 PM3의 저장소를 인수하여, 그 후 몽트르알의 에콜 폴리테크니크에서 유지되었지만, 이후 HM3에 대한 작업은 몇 년 후 폐지될 때까지 개선되었다.

구문

언어 구문의 일반적인 예는 "Hello, World!" 프로그램입니다.

모듈 주된;  수입품 입출력; 시작한다.   입출력.놓다("Hello World\n") 끝. 주된. 

Modula-3의 모든 프로그램에는 적어도 모듈 파일이 있으며, 대부분은 클라이언트가 모듈의 데이터에 액세스하기 위해 사용하는 인터페이스 파일도 포함되어 있습니다.일부 다른 언어에서와 마찬가지로 Modula-3 프로그램은 Main.m3라는 이름의 파일 또는 파일을 호출할 수 있는 메인 모듈을 내보내야 합니다.EXPORT기본 모듈을 내보냅니다.

모듈 푸우 내보내기 주된 

모듈 파일명은 소스 코드의 이름과 동일하게 하는 것이 좋습니다.다를 경우 컴파일러는 경고만 표시합니다.

구문의 다른 표기법에는 인터페이스의 내보내기된 타입의 이름이 포함됩니다.T타입은 보통 풀네임으로 수식되기 때문에 타입은TFoo라는 이름의 모듈 내부는Foo.T가독성에 도움이 됩니다.또 다른 유사한 규칙은 공용 개체의 이름을 지정하는 것입니다.Public다음 OOP 예시와 같습니다.

언어 기능

모듈러성

무엇보다도 컴파일된 모든 단위는 다음 중 하나입니다.INTERFACE또는 구현MODULE여러 가지 맛의 s.키워드부터 시작하는 인터페이스 컴파일 유닛INTERFACE는 상수, 유형, 변수, 예외 및 절차를 정의합니다.키워드로 시작하는 실장 모듈MODULE는 코드 및 인터페이스를 구현하기 위해 필요한 기타 상수, 유형 또는 변수를 제공합니다.디폴트로는 구현 모듈은 같은 이름의 인터페이스를 구현하지만 모듈은 명시적으로EXPORT같은 이름이 아닌 모듈로 이동합니다.예를 들어 메인 프로그램은 메인 인터페이스용 구현 모듈을 내보냅니다.

모듈 안녕 세계 내보내기 주된;  수입품 입출력; 시작한다.   입출력.놓다("Hello World\n") 끝. 안녕 세계. 

컴파일된 유닛은IMPORT순환 Import는 금지되어 있지만 다른 인터페이스.이 문제는 구현 모듈에서 Import를 수행하여 해결할 수 있습니다.Import된 모듈 내의 엔티티는 모듈 이름뿐만 아니라FROM Module IMPORT Item [, Item]*구문:

모듈 안녕 세계 내보내기 주된;  부터 입출력 수입품 놓다; 시작한다.   놓다("Hello World\n") 끝. 안녕 세계. 

통상, 인터페이스를 Import 하고, 인터페이스내의 항목에 액세스 하기 위해서 「닷」표기를 사용합니다(레코드내의 필드에 액세스 하는 것과 유사합니다).통상, 인터페이스 마다 1개의 데이터 구조(레코드 또는 오브젝트)를 서포트 순서와 함께 정의합니다.여기서 주요 유형은 'T'라는 이름을 얻게 되며, 하나는 다음과 같이 사용합니다.MyModule.T.

Import된 모듈과 모듈 내의 다른 엔티티 간에 이름이 충돌하는 경우 예약된 단어AS와 같이 사용할 수 있다IMPORT CollidingModule AS X;

안전과 안전하지 않음

컴파일러가 결과의 일관성을 보증할 수 없는 기능(예를 들어 C 언어와의 인터페이스)도 있습니다.키워드UNSAFE앞에 접두사가 붙은INTERFACE또는MODULE를 사용하여 컴파일러에 언어의 특정 하위 수준의 기능을 활성화하도록 지시할 수 있습니다.예를 들어, 안전하지 않은 작업은 다음을 사용하여 유형 시스템을 바이패스하는 것입니다.LOOPHOLE(정수의) 비트를 부동소수에 복사하다REAL번호.

안전하지 않은 모듈을 Import하는 인터페이스도 안전하지 않아야 합니다.안전한 인터페이스는 안전하지 않은 구현 모듈에 의해 내보내질 수 있습니다.이것은, 2개의 인터페이스가 구축되어 있는 외부 라이브러리와 인터페이스 할 경우에 일반적으로 사용됩니다.하나는 안전하지 않고, 다른 하나는 안전합니다.

범용

범용 인터페이스와 이에 대응하는 범용 모듈.INTERFACE또는MODULE키워드GENERIC기타 인터페이스를 정식 인수로서 사용합니다.따라서 (C++ 템플릿과 마찬가지로) 추상 데이터 유형을 쉽게 정의하고 사용할 수 있지만 C++달리 세분화는 모듈레벨입니다인터페이스는 범용 인터페이스와 구현 모듈에 인수로서 전달되며 컴파일러는 구체적인 모듈을 생성합니다.

예를 들어, Generic Stack을 정의한 후 다음과 같은 인터페이스를 사용하여 인스턴스화할 수 있습니다.IntegerElem, 또는RealElem또는 오브젝트에 대한 인터페이스(각 인터페이스가 범용 모듈에 필요한 속성을 정의하는 한)를 지정합니다.

베어 타입INTEGER, 또는REAL모듈이 아니기 때문에 사용할 수 없습니다.또한 제네릭스의 시스템은 모듈을 인수로 사용하는 것에 기초하고 있습니다.이에 비해 C++ 템플릿에서는 베어 타입이 사용됩니다.

파일: IntegerElem.i3

인터페이스 IntegerElem; 계속 이름. = "정수"; 유형 T = 정수; 절차. 포맷(x: T): 본문; 절차. 스캔(txt: 본문; VAR x: T): 부울; 끝. IntegerElem. 

파일: GenericStack.ig

포괄적인 인터페이스 범용 스택(요소); (* 여기서 요소).T는 범용 스택에 저장되는 유형입니다.*) 유형    T = 일반의 물건;    일반의 = 물건    방법들        초기화(): TS택;        포맷(): 본문;        비어 있다(): 부울;        세어보세요(): 정수;        밀다(느릅나무: 요소.T);        (VAR 일람: 요소.T): 부울;    끝.; 끝. 범용 스택. 

파일: GenericStack.mg

포괄적인 모듈 범용 스택(요소); < > ... 포괄적인 실행 세부 사항... > 절차. 포맷(자신: T): 본문 = VAR    스트레이트: 본문; 시작한다.    스트레이트 := 요소.이름. & "스택{」;    위해서 k := 0 로. 자신.n -1 하다        한다면 k > 0 그리고나서 스트레이트 := 스트레이트 & ", "; 끝.;            스트레이트 := 스트레이트 & 요소.포맷(자신.arr[k]);    끝.;    스트레이트 := 스트레이트 & "};";    돌아가다 스트레이트; 끝. 포맷; < > ...  포괄적인 실행 세부 사항... > 끝. 범용 스택. 

파일: IntegerStack.i3

인터페이스 IntegerStack = 범용 스택(IntegerElem) 끝. IntegerStack. 

파일: IntegerStack.m3

모듈 IntegerStack = 범용 스택(IntegerElem) 끝. IntegerStack. 

트레이서빌리티

다른 언어의 '포함' 기능과는 달리, 모든 식별자는 해당 식별자가 발생한 위치까지 추적할 수 있습니다.컴파일된 유닛은 다른 컴파일된 유닛에서 식별자를 가져와야 합니다.IMPORT진술.열거형도 레코드의 필드에 액세스할 때 사용되는 것과 동일한 '점' 표기법을 사용합니다.

인터페이스 A;  유형 색. = {블랙입니다., 갈색, 빨간., 오렌지, 노란 색, 초록의, 파랑색, 바이올렛, 회색, 하얀색};  끝. A; 
모듈 B;  수입품 A; 부터 A 수입품 색.;  VAR   a컬러: A.색.;  (* 프리픽스로 모듈명을 사용합니다*).   컬러: 색.;  (* 프리픽스*로서 모듈명을 가지지 않음)   anotherColor(다른 색상): A.색.;  시작한다.   a컬러 := A.색..갈색;   컬러 := 색..빨간.;   anotherColor(다른 색상) := 색..오렌지;  (* 오렌지는 간단하게 사용할 수 없습니다*) 끝. B. 

동적 할당

Modula-3은 실행 시 데이터 할당을 지원합니다.할당할 수 있는 메모리는 2종류가 있습니다.TRACED그리고.UNTRACED가비지 콜렉터의 표시 여부가 다릅니다. NEW()는, 이러한 메모리 클래스의 어느 쪽인가의 데이터를 할당하기 위해서 사용됩니다.UNSAFE모듈,DISPOSE는 추적되지 않은 메모리를 해방하기 위해 사용할 수 있습니다.

객체 지향

Modula-3에서는 객체 지향 프로그래밍 기법을 사용할 수 있지만 사용할 필요는 없습니다.Modula-3(모듈, 제네릭)에서 제공되는 다른 많은 기능들은 일반적으로 객체 지향의 역할을 대신할 수 있습니다.

오브젝트 지원은 의도적으로 가장 간단한 용어로 유지됩니다.오브젝트 타입(다른 오브젝트 지향 언어로 "클래스"로 표기)은OBJECTdeclaration(선언문)은 기본적으로 같은 구문을 가지고 있습니다.RECORD선언, 객체 유형은 참조 유형이지만 Modula-3의 RECORD는 그렇지 않다(C의 구조와 유사).내보낸 유형은 일반적으로 규칙에 따라 T로 명명되며 메서드와 데이터를 표시하기 위해 별도의 "공개" 유형을 만듭니다.예를 들어 다음과 같습니다.

인터페이스 사람인;  유형 T < >: 일반의;   일반의 = 물건    방법들     경과시간(): 정수;     초기화(이름.: 본문; 나이: 정수): T;   끝.;  끝. 사람인. 

이것에 의해, 인터페이스가 정의됩니다.Person두 가지 타입이 있습니다.T,그리고.Public두 가지 메서드를 가진 개체로 정의됩니다.getAge()그리고.init().T의 서브타입으로 정의됩니다.Public를 사용하여<:교환입니다.

새로 작성하려면Person.T오브젝트, 빌트인 프로시저를 사용합니다.NEW그 방법으로init()~하듯이

VAR 짐. := 신규(사람인.T).초기화('짐", 25); 

모듈라-3의REVEALconstruct는 개념적으로 단순하고 깨끗하지만 매우 강력한 메커니즘으로 구현 세부사항을 클라이언트로부터 숨길 수 있으며 임의의 수준의 친화성을 갖추고 있습니다.사용하다REVEAL의 완전한 실장을 나타내다Person인터페이스를 설정합니다.

모듈 사람인;  드러내다 T = 일반의 브랜드  물건    이름.: 본문;   (* 이 두 변수*)   나이: 정수; (*는 비공개입니다.*) 오버라이드   경과시간 := 나이;   초기화 := 초기화; 끝.;  절차. 나이(자신: T): 정수 =   시작한다.     돌아가다 자신.나이;   끝. 나이;  절차. 초기화(자신: T; 이름.: 본문; 나이: 정수): T =   시작한다.     자신.이름. := 이름.;     자신.나이 := 나이;   돌아가다 자신;   끝. 초기화;  시작한다. 끝. 사람인. 

의 사용에 주의해 주십시오.BRANDED키워드를 지정합니다.이 키워드는 구조적 동등성을 피하기 위해 오브젝트를 고유하게 하기 위해 오브젝트를 "수정"합니다. BRANDED는 인수로 문자열을 사용할 수도 있지만 생략하면 원하는 문자열이 생성됩니다.

모듈라-3은 모듈로부터의 외부 참조를 엄격하게 인증해야 하는 몇 안 되는 프로그래밍 언어 중 하나입니다.즉, 모듈의 참조입니다.A정확하게x모듈에서 내보내기B형태를 취해야 한다B.xModula-3에서는 모듈에서 내보낸 이름을 모두 Import할 수 없습니다.

이름 수식 및 메서드 덮어쓰기에 대한 언어의 요구사항 때문에 인터페이스(임의의 인터페이스)에 새로운 선언을 추가하는 것만으로 작동 프로그램을 중단하는 것은 불가능합니다.이것에 의해, 다수의 프로그래머에 의해서 큰 프로그램을 동시에 편집할 수 있게 되어, 그 과정에서 기존의 프로그램이 파손되지 않게 되는 확실한 지식으로 코어 언어 라이브러리를 편집할 수 있게 됩니다.

예외

예외처리는TRY...EXCEPT이후 보편화된 블록[citation needed] 시스템입니다.Delphi, Python[1], Scala[2] Visual Basic을 제외하고 다른[citation needed] 언어에서는 채택되지 않은 기능 중 하나입니다.NET, 그거는EXCEPTconstruct는 스위치스테이트먼트의 형식을 정의합니다.각 예외는 EXCEPT 절에서 대소문자로 간주됩니다.Modula-3는 또한LOOP...EXIT...END그 루프를 구축하다EXIT발생하는 구조, 즉 내부 단순한 루프에 상당하는 구조입니다.TRY...EXCEPT절을 클릭합니다.

멀티 스레드

이 언어는 멀티스레딩 및 스레드 간 동기화를 지원합니다.런타임 라이브러리(m3core)에는 스레드라는 이름의 표준 모듈이 있어 멀티 스레드 애플리케이션 사용을 지원합니다.Modula-3 런타임에서는 가비지 컬렉션 등의 내부 태스크에 별도의 스레드를 사용할 수 있습니다.

내장 데이터 구조MUTEX는 여러 스레드를 동기화하고 파손 또는 레이스 조건이 발생할 수 있는 동시 액세스로부터 데이터 구조를 보호하는 데 사용됩니다.LOCK스테이트먼트에서는 mutex가 잠겨 있는 블록이 도입됩니다.잠금 해제MUTEX코드 실행 궤적이 블록을 떠나는 것을 암시합니다.MUTEX는 오브젝트이므로 다른 오브젝트가 그 오브젝트에서 파생될 수 있습니다.

예를 들어 라이브러리 libm3 입출력(I/O) 섹션에는 리더와 라이터(Rd)가 있습니다.T, 그리고 Wr.T)는 MUTEX에서 파생되어 버퍼 등의 내부 데이터에 액세스하거나 변경하기 전에 스스로 잠깁니다.

요약

요약하면, 언어의 특징은 다음과 같습니다.

Modula-3는 진화가 기록된 희귀한 언어 중 하나입니다.

Modula-3를 사용한 시스템 프로그래밍에서는 언어 설계의 4가지 필수 포인트에 대해 집중적으로 설명합니다.다음 토픽은 구조 및 이름의 동등성, 서브타이핑 규칙, 범용 모듈 및 다음과 같은 파라미터 모드입니다.READONLY.

표준 라이브러리 기능

C언어로 시작된 트렌드를 이어가면서 실제 프로그램을 작성하기 위해 필요한 많은 기능들이 언어 정의에서 제외되었고 대신 표준 라이브러리 세트를 통해 제공되었습니다.다음의 인터페이스의 대부분은, 에 자세하게 설명되어[10] 있습니다.

다음과 같은 기능을 제공하는 표준 라이브러리.이것들은 표준 인터페이스라고 불리며, 언어에는 필수(필수)입니다.

  • 텍스트: 불변의 문자열 참조에 대한 작업(호출처TEXTs
  • 스레드: 스레드와 관련된 작업(다음 포함)MUTEX, condition variable 및 스레드 일시정지.스레드 라이브러리는 선제 스레드 전환 기능을 제공합니다.
  • Word: 부호 없는 정수(또는 기계어)에 대한 비트 연산입니다.보통 컴파일러에 의해 직접 구현됩니다.
  • 부동소수점 인터페이스

일부 권장 인터페이스는 사용 가능한 구현에 구현되어 있지만 필수는 아닙니다.

  • Lex: 번호 및 기타 데이터 해석용
  • Fmt: 인쇄를 위한 다양한 데이터 형식 지정
  • Pkl(또는 피클):가비지 수집기에서 연결할 수 있는 참조 유형의 개체 직렬화
  • 표: 지도의 범용 모듈

C와 마찬가지로 I/O는 라이브러리를 통해 제공되며 모듈라-3에서는Rd그리고.WrRd(독자) 및 Wr(작가) 라이브러리의 객체 지향 디자인은 Greg Nelson의 책에서 자세히 다루었습니다.Modula-3의 흥미로운 측면은 표준 라이브러리가 잠금 버그를 포함한 다양한 유형의 버그를 포함하지 않는 것으로 공식적으로 확인된 몇 안 되는 프로그래밍 언어 중 하나라는 것입니다.이는 DEC Systems Research Center의 Larch/Modula-3(Larch [11]패밀리 참조) 및 Extended Static[12] Check Projects의 후원으로 실시되었습니다.

실장

몇 가지 컴파일러를 사용할 수 있으며, 대부분은 오픈 소스입니다.

  • DEC-SRC M3, [13]오리지널
  • ORC(Olivetti Research Center) Modula-3 툴킷(원래 컴파일러)은 Modula-3 프로그램의 구문,[14] 어휘 및 의미 분석을 위한 라이브러리로 사용할 수 있습니다.
  • Critical Mass CM3(DEC-SRC M3의 다른 후계기)
  • Polytecique Montreal Modula-3 PM3는 DEC-SRC M3의 후속 기종으로 현재 CM3와 합병하고 있습니다.
  • EzM3는 CVSup과 관련하여 개발된 가볍고 휴대하기 쉬운 독립된 구현입니다.
  • PM3의 pm3-1.15 릴리스의 후속 버전인 HM3로 NPTL을 사용한 네이티브스레딩 지원
  • Critical Mass CM3의 후속 모델인 CM3.이는 유지 보수되고 개발된 유일한 최신 구현입니다.릴리스는 http://www.opencm3.net/releng/ 에서 구할 수 있습니다.

모듈라-3에서 누락된 C 데이터 구조의 유일한 측면이 유니언 유형이기 때문에 기존의 모든 모듈라-3 구현은 배열 구조C 언어 유형 선언과 우수한 바이너리 코드 호환성을 제공할 수 있습니다.

책들

이 책들 중 어느 것도 아직 출판되지 않았지만, 비록 중고 복사본은 구할 수 있고 일부는 부분 또는 완전히 디지털화 되어 있고, 그 중 일부는 웹에서 연구 보고서로 얻을 수 있는 이전 또는 이후 버전을 가지고 있다.

  • Greg Nelson, ed., Modula-3 시스템 프로그래밍. 객체 지향 시스템 소프트웨어 구축에 관한 흥미로운 기사와 언어의 최종 특징에 이르는 토론 문서와 함께 Modula-3 언어에 대한 최종 참고 자료입니다.에는 일부 이전, 최대 기록인 8장의 다수의 버전을 출판하면서 일부posteriorly(1장과 두곳에서 업데이트된 언어의 사전 버전의 see[18], definition[9]and,[10]에 대한 장을 3and[19]에 대한 장을 7)(장 four,[16]에장 two,[15]에 대한 장을 five,[17]에 대한 장을 6개의 see[9]) 있다.개별적으로에서 입수할 수 있는이전 DEC Systems Research Center(SRC; 시스템 연구 센터)에서 연구 보고서를 다운로드하십시오.
  • 사무엘 P.Harbison, Modula-3 수업 교재 사용하기 쉽다.
  • Robert Sedgewick, 모듈라-3 알고리즘
  • 라즐로 보조르멘이 & 카스텐 와이치, 모듈라-3 프로그래밍 : 스타일리시한 프로그래밍 입문
  • Renzo Orsini, Modula-3의 Agostino Cortesi Programmare: 주요 특징을 설명하는 이탈리아어 서적 orgetti alla programmazione imperativa a oggetti를 소개합니다.

Modula-3를 사용한 프로젝트

Modula-3에 프로그래밍된 소프트웨어는 다음을 포함합니다.

  • SPIN 운영 체제
  • CVSup 소프트웨어 저장소 동기화 프로그램
  • Obliq 언어는 Modula-3 네트워크 객체를 사용하여 로컬네트워크를 통해 객체를 투과적으로 이행함으로써 Modula-3 객체 지향 프로그래밍 패러다임을 분산시킬 수 있습니다.모듈라-3에 대한 스크립팅 확장의 형태로 분산 애플리케이션, 컴퓨터 애니메이션 및 웹 프로그래밍 애플리케이션을 구축하는 데 사용되었습니다.

다른 프로그래밍 언어에 대한 영향

Modula-3는 주류 지위를 획득하지 못했지만 DEC-SRC M3 배포의 일부에서 주류 지위를 획득했습니다.아마도 가장 영향력 있는 부분은 네트워크 오브젝트 라이브러리로, 네트워크 프로토콜을 포함한 Java의 첫 번째 RMI(Remote Method Invocation) 구현의 기반이 되었습니다.Sun이 CORBA(Common Object Request Broker Architecture) 표준에서 IIOP 기반 프로토콜로 전환했을 때만 Sun이 중단되었습니다.리모트 오브젝트의 가비지 컬렉션에 관한 Java 문서는 Modula-3 네트워크 [20]오브젝트에 대해 수행된 선구적인 작업에 대해 여전히 언급하고 있습니다.Python의 클래스 구현은 또한 C++[21]와 Modula-3에서 발견되는 클래스 메커니즘에서 영감을 받았습니다.또한 Nim 언어는 추적된 포인터와 추적되지 않은 포인터와 같은 Modula-3의 몇 가지 측면을 사용합니다.

레퍼런스

  1. ^ "Critical Mass Modula-3 (CM3)". Critical Mass Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
  2. ^ "Polytechnique Montréal Modula-3 (PM3): What is it". Polytechnique Montréal Modula-3. elego Software Solutions GmbH. Retrieved 2020-03-21.
  3. ^ Polstra, John D. (November 9, 2006). "Ezm3: An Easier Modula-3 Distribution". CVSup.org. Archived from the original on April 10, 2013. Retrieved 2020-03-21.
  4. ^ Weich, Carsten. "M3/PC Klagenfurt 96: a Modula-3 environment for MS-DOS". Department of Informatics. University of Klagenfurt. Archived from the original on 20 May 2000. Retrieved 2020-03-21.
  5. ^ Picheta, Dominik; Locurcio, Hugo. "Frequently Asked Questions". Retrieved 2020-03-21.
  6. ^ "R/Rust - I just learned about Modula-3, a language that had a lot of similar goals to Rust, and there was even an experimental OS that relied on the safety provided by the language".
  7. ^ van Rossum, Guido (May 1996). "Programming Python: Foreword (1st ed.)". Python.org. Retrieved 2020-03-21.
  8. ^ "Design and History FAQ: Why must 'self' be used explicitly in method definitions and calls?". Python.org. March 21, 2020. Retrieved 2020-03-21.
  9. ^ a b c Modula-3 보고서(개정) Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalshow, Greg Nelson.DEC Systems Research Center(SRC) 연구보고서 52(1989년 11월)
  10. ^ a b Wayback Machine Jim Horning, Bill Kalshow, Paul McJones, Greg Nelson에서 2016-03-04에 보관된 일부 유용한 Modula-3 인터페이스.DEC Systems Research Center(SRC) 연구보고서 113(1993년 12월)
  11. ^ LM3 Wayback Machine Kevin D에서 2016-03-03 아카이브 완료.Jones. DEC 시스템 연구 센터(SRC) 연구 보고서 72(1991년 6월)
  12. ^ 확장 정적 검사 2017-07-05 Wayback Machine David L에 보관되었습니다.Detlefs, K. Rustan M.레이노, 그렉 넬슨, 제임스 B Saxe. Compaq SRC 연구 보고서 159(1998년 12월)
  13. ^ SRC Modula-3 3.3[permanent dead link] Bill Kalshow 및 Eric Muller.디지털 기기 주식회사(1995년 1월)
  14. ^ Jordan, Mick (1990). "An extensible programming environment for Modula-3". SIGSOFT Softw. Eng. Notes. 15 (6): 66–76. doi:10.1145/99278.99285. Retrieved 2009-09-08.
  15. ^ Wayback Machine Andrew D에서 2017-07-05년에 보관된 스레드사용한 프로그래밍 소개.버렐.DEC Systems Research Center(SRC) 연구보고서 35(1989년 1월)
  16. ^ 멀티프로세서용 동기화 프리미티브: Wayback Machine A. D. Birrell, J. V. Guttag, J. J. Horning, R. Levin에서 보관된 정식 사양 2016-03-04DEC Systems Research Center(SRC) 연구보고서 20(1987년 8월)
  17. ^ IO 스트림: Wayback Machine Mark R에서 2016-03-03에 보관된 추상형, 실제 프로그램.브라운과 그렉 넬슨입니다.DEC Systems Research Center(SRC) 연구보고서 53(1989년 11월)
  18. ^ Modula-3 레퍼런스 매뉴얼 Luca Cardelli, James Donahue, Lucille Glassman, Mick Jordan, Bill Kalshow, Greg Nelson.DEC 시스템 리서치 센터(SRC)(1995년 2월)
  19. ^ Trestle Tutorial 2016-03-03 Wayback Machine Mark S. Manasse 및 Greg Nelson에서 아카이브되었습니다.DEC 시스템 연구 센터(SRC) 연구 보고서 69(1992년 5월)
  20. ^ 원격 객체의 가비지 컬렉션, Java SE 8용 Java Remote Method 호출 문서.
  21. ^ 클래스, 공식 Python 문서.

외부 링크