맨위로가기

모듈라-2

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

모듈라-2는 파스칼을 기반으로 개발된 프로그래밍 언어이다. 모듈 개념을 도입하여 코드의 모듈화와 재사용성을 높였으며, 단일 프로세서에서의 병행 처리, 하드웨어 직접 접근, 명목적 타입 시스템 등을 지원한다. 니클라우스 비르트에 의해 개발되었으며, 릴리스 워크스테이션의 운영 체제 구축에 사용되었다. 현재는 다양한 컴파일러를 통해 여러 플랫폼에서 사용 가능하며, 임베디드 시스템과 운영 체제 프로그래밍에 활용된다.

더 읽어볼만한 페이지

  • 시스템 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • 시스템 프로그래밍 언어 - 스위프트 (프로그래밍 언어)
    2014년 애플 세계 개발자 컨퍼런스에서 처음 공개된 스위프트는 크리스 래트너가 개발한 애플의 범용 프로그래밍 언어로서, Objective-C를 대체하며 다양한 플랫폼 지원, 모던 문법, 안정성, 인터랙티브한 개발 환경, SwiftUI 등의 특징을 가진다.
  • ISO 표준 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • ISO 표준 프로그래밍 언어 - SQL
    SQL은 관계형 데이터베이스 관리 시스템에서 데이터를 관리하고 조작하기 위해 설계된 표준 프로그래밍 언어로서, 데이터 정의어, 데이터 조작어, 데이터 제어어를 포함하는 다양한 명령어 문법을 제공하며 ANSI와 ISO에 의해 표준으로 채택되었다.
  • 정적 타입 프로그래밍 언어 - C (프로그래밍 언어)
    C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다.
  • 정적 타입 프로그래밍 언어 - 핵 (프로그래밍 언어)
    Hack은 페이스북에서 개발한 프로그래밍 언어이며, PHP와 상호 운용되도록 설계되었고, 정적 타이핑을 도입하여 타입 힌트를 확장하며 PHP 7에도 영향을 미쳤다.
모듈라-2 - [IT 관련 정보]에 관한 문서
개요
이름모듈라-2
영어 이름Modula-2
유형프로그래밍 언어
특징
패러다임명령형 프로그래밍
구조적 프로그래밍
모듈러 프로그래밍
데이터 및 프로시저 숨기기
병행 컴퓨팅
설계자니클라우스 비르트
개발자니클라우스 비르트
발표 시기1978년
자료형정적 자료형
강한 자료형
안전한 자료형
적용 범위변수 영역 (정적)
플랫폼릴리스 (AMD 2901)
운영체제크로스 플랫폼
파일 확장자.mod, .m2, .def, .MOD, .DEF, .mi, .md
영향 관계
영향을 받은 언어모듈라
메사
파스칼
ALGOL W
유클리드
영향을 준 언어모듈라-2+
모듈라-3
오베론
에이다
포트란 90
루아
Seed7
Zonnon
Modula-GM
기타
웹사이트Modula-2 공식 웹사이트
구현체ETH 컴파일러 (니클라우스 비르트 작성)
GNU Modula-2
ADW Modula-2
방언PIM2, PIM3, PIM4, ISO

2. 역사

2. 1. 개발 배경

2. 2. 릴리스 워크스테이션

2. 3. 한국에서의 모듈라-2

3. 특징

모듈라-2는 파스칼의 문법을 기반으로 하되, 몇 가지 요소와 구문적 모호성을 제거하고, 다음과 같은 주요 특징을 추가했다.

모듈라-2 ''모듈''은 관련된 서브 프로그램 및 데이터 구조 집합을 캡슐화하고 프로그램의 다른 부분에서 해당 가시성을 제한하는 데 사용될 수 있다.[7] 모듈라-2 프로그램은 모듈로 구성되며, 각 모듈은 두 부분으로 구성된다. 즉, 인터페이스 부분을 나타내는 ''정의 모듈''은 다른 모듈에 ''export'' (가시적)되는 서브 시스템의 일부만 포함하며, ''구현 모듈''은 모듈 내부에 있는 작동 코드를 포함한다.

이 언어는 엄격한 스코프 제어를 가지고 있다. 표준 식별자를 제외하고, 명시적으로 가져오지 않는 한 외부의 객체는 모듈 내에서 볼 수 없으며, 명시적으로 내보내지 않는 한 내부 모듈 객체는 외부에서 볼 수 없다.

모듈 M1이 식별자를 명시적인 export 목록에 열거하여 객체 a, b, c, P를 export한다고 가정해 보자.



DEFINITION MODULE M1;

EXPORT QUALIFIED a, b, c, P;

...



그러면 모듈 M1의 객체 a, b, c, P는 모듈 M1 외부에서 M1.a, M1.b, M1.c, M1.P로 알려진다. 이는 외부로 ''qualified'' 방식으로 export된다 (모듈 M1이 global하다고 가정). export 모듈의 이름, 즉 M1은 객체의 이름 다음에 자격자로 사용된다.

모듈 M2가 다음과 같은 IMPORT 선언을 포함한다고 가정해 보자.



MODULE M2;

IMPORT M1;

...



그러면 이는 모듈 M1이 외부로 export한 객체를 이제 모듈 M2 내에서 사용할 수 있음을 의미한다. 이는 ''qualified'' 방식으로 참조된다. 즉, M1.a, M1.b, M1.c, M1.P이다. 예시:



...

M1.a := 0;

M1.c := M1.P(M1.a + M1.b);

...



Qualified export는 이름 충돌을 방지한다. 예를 들어, 다른 모듈 M3이 P라는 객체를 export하는 경우 M1.P와 M3.P가 다르기 때문에 두 객체를 구별할 수 있다. 두 객체가 export 모듈 M1과 M3 내에서 P로 불리는 것은 중요하지 않다.

다른 방법도 존재한다. 모듈 M4가 다음과 같이 구성된다고 가정해 보자.



MODULE M4;

FROM M1 IMPORT a, b, c, P;



이는 모듈 M1이 외부로 export한 객체를 다시 모듈 M4 내에서 사용할 수 있음을 의미하지만, 이제는 a, b, c, P와 같은 ''unqualified'' 방식으로 export된 식별자를 단순히 참조한다. 예시:



...

a := 0;

c := P(a + b);

...



이 import 방법은 이름 충돌이 없는 경우에 사용할 수 있다. 이는 변수 및 기타 객체를 export 모듈 외부에서 export 모듈 내부와 동일한 ''unqualified'' 방식으로 사용할 수 있도록 한다.

export 및 import 규칙은 객체를 원치 않는 액세스로부터 보호할 뿐만 아니라 프로그램의 모든 식별자에 대한 정의의 상호 참조를 생성할 수 있도록 한다. 이 속성은 많은 모듈을 포함하는 대규모 프로그램의 유지 관리에 도움이 된다.

이 언어는 단일 프로세서 동시성 (모니터, 코루틴 및 제어의 명시적 전송)과 하드웨어 액세스 (절대 주소, 비트 조작 및 인터럽트)를 제공한다. 이는 명목적 타입 시스템을 사용한다.

파스칼과의 상위 호환성은 없다. 파스칼에 모듈의 개념을 추가하여 분할 컴파일과 소프트웨어 부품의 라이브러리화를 통한 재사용이 가능하다. 또한, 단일 처리 장치에서의 병행 처리를 가능하게 하는 코루틴과 데이터 추상화 기능을 갖추고 있다. 한편, 하드웨어에 직접 접근하는 것도 가능하게 했다. 각 라이브러리는 정의 모듈과 구현 모듈의 두 파일로 구성되며, 라이브러리의 일관성은 링크 시에 엄격하게 검사된다. 전체적으로 에이다의 축소판과 같은 사양이다.

니클라우스 비르트 본인이 비트 슬라이스 프로세서를 사용하여 하드웨어 관리부터 독자적인 윈도우 시스템을 갖춘 운영 체제를 포함한 오리지널 워크스테이션 시스템 릴리스(Lilith) 전체를 모듈라-2만으로 구축하여 그 실용성과 강력함을 보여주었다.

발표 당시에는 궁극의 절차적 언어라고 칭송받았지만, 현재는 에이다와 마찬가지로 그다지 널리 사용되고 있다고는 할 수 없다.

3. 1. 모듈

모듈라-2는 파스칼에 모듈 개념을 추가하여 분할 컴파일과 소프트웨어 부품의 라이브러리화를 통한 재사용을 가능하게 한다. 또한, 단일 처리 장치에서의 병행 처리를 가능하게 하는 코루틴과 데이터 추상화 기능을 갖추고 있으며, 하드웨어에 직접 접근하는 것도 가능하다. 각 라이브러리는 정의 모듈과 구현 모듈의 두 파일로 구성되며, 라이브러리의 일관성은 링크 시에 엄격하게 검사된다. 전체적으로 에이다의 축소판과 같은 사양이다.

비트 슬라이스 프로세서를 사용하여 하드웨어 관리부터 독자적인 윈도우 시스템을 갖춘 운영 체제를 포함한 오리지널 워크스테이션 시스템 릴리스(Lilith) 전체를 모듈라-2만으로 구축하여 그 실용성과 강력함을 보여주었다.

발표 당시에는 궁극의 절차적 언어라고 칭송받았지만, 현재는 에이다와 마찬가지로 그다지 널리 사용되고 있다고는 할 수 없다.

3. 2. 동시성 프로그래밍

모듈라-2는 단일 처리 장치에서 병행 처리를 가능하게 하는 코루틴을 제공한다. 또한 데이터 추상화 기능을 갖추고 있으며, 하드웨어에 직접 접근하는 것도 가능하다. 각 라이브러리는 정의 모듈과 구현 모듈의 두 파일로 구성되며, 라이브러리의 일관성은 링크 시에 엄격하게 검사된다. 전체적으로 에이다의 축소판과 같은 사양이다.

니클라우스 비르트는 비트 슬라이스 프로세서를 사용하여 하드웨어 관리부터 독자적인 윈도우 시스템을 갖춘 운영 체제를 포함한 오리지널 워크스테이션 시스템 릴리스(Lilith) 전체를 모듈라-2만으로 구축하여 그 실용성과 강력함을 보여주었다.

3. 3. 저수준 프로그래밍

모듈라-2는 하드웨어에 직접 접근하는 기능을 제공한다. 절대 주소 지정, 비트 조작, 인터럽트 처리 등을 통해 시스템 프로그래밍에 적합하다. 니클라우스 비르트는 비트 슬라이스 프로세서를 사용하여 하드웨어 관리부터 독자적인 윈도우 시스템을 갖춘 운영 체제를 포함한 오리지널 워크스테이션 시스템 릴리스 전체를 모듈라-2만으로 구축하여 그 실용성과 강력함을 보여주었다.

3. 4. 타입 시스템

모듈라-2는 명목적 타입 시스템(Nominal type system)을 사용한다. 파스칼에 모듈 개념을 추가하여 분할 컴파일과 소프트웨어 부품 라이브러리화를 통한 재사용이 가능하다. 또한, 단일 처리 장치에서의 병행 처리를 가능하게 하는 코루틴과 데이터 추상화 기능을 갖추고 있으며, 하드웨어에 직접 접근하는 것도 가능하다. 각 라이브러리는 정의 모듈과 구현 모듈의 두 파일로 구성되며, 라이브러리의 일관성은 링크 시에 엄격하게 검사된다. 전체적으로 에이다의 축소판과 같은 사양이다.

비트 슬라이스 프로세서를 사용하여 하드웨어 관리부터 독자적인 윈도우 시스템을 갖춘 운영 체제를 포함한 오리지널 워크스테이션 시스템 릴리스(Lilith) 전체를 모듈라-2만으로 구축하여 그 실용성과 강력함을 보여주었다.

발표 당시에는 궁극의 절차적 언어라고 칭송받았지만, 현재는 에이다와 마찬가지로 그다지 널리 사용되고 있다고는 할 수 없다.

3. 5. 파스칼과의 비교

모듈라-2는 파스칼과 유사한 문법을 가지지만, 다음과 같은 차이점이 있다.

  • 실행 시 배열 범위 검사 등이 가능하다.
  • 프로시저와 함수를 중첩할 수 있다.
  • 인수는 값 호출과 참조 호출을 모두 사용할 수 있다.
  • 프로시저와 함수 내부에서 정의된 이름은 외부에서 참조할 수 없다.
  • 대소문자를 구분하며, 예약어는 모두 대문자이다.
  • 예약어 AND([논리곱]) 대신 "&"를, NOT([부정]) 대신 "~"를 사용할 수 있다. 부등호는 "#"를 사용한다.
  • 부분 범위형은 "[..]"로, 집합형은 "{..}"로 묶는다. 주석은 "(*..*)"로 묶으며, 중첩될 수 있다.
  • 정수형은 부호가 있는 INTEGER와 부호가 없는 CARDINAL을 구분한다.
  • 10진수 외에 2진수, 8진수, 16진수로 상수를 지정할 수 있다.
  • 문자열 상수는 "'" 외에 """로 묶을 수도 있으며, 첨자 0부터 시작하는 문자의 배열로 취급된다. 문자열은 C 언어와 마찬가지로 코드 0의 문자(0C)로 종료된다.
  • `IF` 문 등의 제어문은 여러 문장을 대상으로 하므로, 명시적으로 예약어 `END`로 닫는다. else if 대신 ELSIF를 사용한다.
  • `CASE` 문의 각 선택지에는 여러 문장을 쓸 수 있으며, 선택지는 "|"로 구분한다. `ELSE`도 존재한다. `RECORD CASE`의 표기법도 약간 다르다.
  • `GOTO` 문은 없다. 대신 무한 루프를 구성하는 `LOOP` 문과 그 루프에서 탈출하는 `EXIT` 문을 가진다.
  • `FOR` 문은 예약어 `BY`에 의해 증분을 1 또는 -1 이외로도 지정할 수 있다. 예약어 `DOWNTO`는 없다.
  • 프로시저와 함수의 정의는 같은 예약어 `PROCEDURE`로 시작한다. 함수는 `RETURN` 문으로 값을 반환할 수 있다. 프로시저의 끝을 나타내는 `END` 뒤에는 프로시저 이름을 써야 한다. 프로시저형 변수가 존재한다.
  • 프로시저의 인수로 적합 배열을 사용할 수 있다. 적합 배열은 1차원에 한정되며, 첨자 0부터 시작한다. 배열 a의 최대 첨자는 `HIGH(a)`로 얻을 수 있다.
  • 표준 프로시저는 원칙적으로 라이브러리로 제공된다. 단, `CHR`, `ORD` 등은 Modula-2에서도 표준 프로시저이다.
  • 모듈이 존재한다. 모듈은 초기화 부분을 가지며, 어떤 식별자를 모듈 외부에서 참조할 수 있는지를 정의할 수 있다. 분할 컴파일도 모듈을 단위로 수행한다.
  • 절대 참조, 입출력 포트 제어, 비트형 등, 하드웨어를 직접 조작하는 낮은 수준의 기능을 가진다.
  • 코루틴을 가진다.

4. 방언 및 파생 언어

모듈라-2에는 두 가지 주요 방언이 있다. 첫 번째는 니클라우스 비르트의 저서 『모듈라-2 프로그래밍』에서 이름을 따온 ''PIM''이다.[4] PIM에는 2판, 3판(수정판), 4판 등 세 가지 주요 에디션이 있으며, 각 에디션은 언어의 약간의 변형을 설명한다. 두 번째 주요 방언은 국제 표준화 기구의 표준화 노력을 기리기 위해 명명된 ''ISO''이다. 다음은 그들 간의 몇 가지 차이점이다.


  • ''PIM2'' (1983)
  • 정의 모듈에서 명시적인 EXPORT 절이 필요하다.
  • 함수 SIZE는 모듈 SYSTEM에서 가져와야 한다.
  • ''PIM3'' (1985)
  • 정의 모듈 내의 모든 것이 해당 모듈의 인터페이스를 정의한다는 관찰에 따라 정의 모듈에서 EXPORT 절이 제거되었고, EXPORT 절은 중복되었다.
  • 함수 SIZE는 어디에서나 사용 가능하다(가져오기 없이 모든 범위에서 표시).
  • ''PIM4'' (1988)
  • 피연산자가 음수일 때 MOD 연산자의 동작을 지정했다.
  • 모든 ARRAY OF CHAR 문자열이 문자열이 배열에 정확히 맞는 경우에도 ASCII NUL로 종료되도록 요구했다.
  • ''ISO'' (1996, 1998)
  • ISO 모듈라-2는 PIM 모듈라-2의 대부분의 모호성을 해결했다. 데이터 유형 COMPLEXLONGCOMPLEX, 예외, 모듈 종료(FINALLY 절) 및 완벽한 표준 입출력 (I/O) 라이브러리가 추가되었다. 많은 사소한 차이점과 설명이 있다.[8]

4. 1. PIM (Programming in Modula-2)

모듈라-2는 ISO 10514로 표준화되어 있다. 일본 산업 규격은 존재하지 않는다.

니클라우스 비르트의 저서 『Programming in Modula-2』(Springer-Verlag, 1982년 초판, 1988년 4판)는 Modula-2의 소개와 보고서로 구성되어 있으며, 엄밀하지는 않지만 표준으로 취급된다. 3판은 한국어 번역판이 있다.

그 외에, 비르트의 Modula-2 저작으로, 한국어 번역된 것으로 다음이 있다.

4. 2. ISO

국제 표준화 기구(ISO)에서 모듈라-2를 표준화한 것으로, ISO 10514이다. PIM 모듈라-2의 모호성을 해결하고 기능을 추가하였다.

니클라우스 비르트의 저서 『Programming in Modula-2』(Springer-Verlag, 1982년 초판, 1988년 4판)는 Modula-2의 소개와 보고서로 구성되어 있으며, 엄밀하지는 않지만 표준으로 취급된다. 3판은 한국어 번역판이 있다.

4. 3. 상위 집합 (Supersets)

모듈라-2에는 특정 응용 분야를 위한 언어 확장을 포함하는 여러 상위 집합이 존재한다.[9][10][11][12]

  • PIM 상위 집합
  • Canterbury Modula-2는 오베론과 유사한 확장 가능한 레코드가 추가되었으나, 현재는 철회되어 더 이상 사용할 수 없다.
  • Modula-2+는 선점형 스레드 및 예외가 추가되었다.
  • Modula-2*는 병렬 확장이다.[9]
  • Modula-P는 또 다른 병렬 확장이다.[10]
  • Modula–Prolog는 Prolog 계층을 추가하였다.[11]
  • Modula/R은 관계형 데이터베이스 확장을 추가하였다.
  • Modula-GM은 임베디드 시스템 확장을 추가하였다.
  • ISO 상위 집합
  • ISO10514-2는 객체 지향 프로그래밍 계층을 추가하였다.[12]
  • ISO10514-3은 일반 프로그래밍(제네릭) 계층을 추가하였다.[12]
  • IEC 상위 집합
  • Mod51은 임베디드 개발을 위한 IEC 1131 구문이 추가되었다.

4. 4. 파생 언어 (Derivatives)

모듈라-2의 영향을 받아 개발된 여러 파생 언어가 존재한다.[13][14][15][16][17][18] 대부분 서로 다른 목적을 가지고 있으며 자체적인 강점과 약점을 가진 다른 언어이다.

  • 모듈라-3: 제록스에서 DEC와 올리베티로 옮겨간 전 제록스 직원 팀에 의해 개발되었다.
  • 오베론: 취리히 연방 공과대학교(ETH Zurich)에서 시스템 오베론을 위해 개발되었다.
  • 오베론-2: 객체 지향 확장이 있는 오베론이다.
  • 액티브 오베론: 또 다른 객체 지향 오베론 확장으로, 취리히 연방 공과대학교에서 개발되었으며 병렬 컴퓨팅 프로그래밍을 멀티프로세싱 및 멀티 코어 프로세서에서 지원하는 것이 주요 목표이다.
  • Parallaxis: 기계 독립적인 데이터 병렬 프로그래밍 언어이다.
  • Umbriel: Pat Terry가 교육용 언어로 개발했다.
  • YAFL: Darius Blasband의 연구 언어이다.


많은 다른 현재 프로그래밍 언어들이 모듈라-2의 기능을 채택했다.

5. 활용 사례

모듈라-2는 많은 임베디드 시스템 프로그래밍에 사용된다.[19][20]

케임브리지 마이크로프로세서 시스템즈(Cambridge Microprocessor Systems)의 케임브리지 모듈라-2(Cambridge Modula-2)는 임베디드 개발을 위한 언어 확장을 포함한다. 이 컴파일러는 DOS에서 실행되며, 모토로라 68000 시리즈(M68k) 기반의 임베디드 마이크로컨트롤러용 코드를 생성한다.

만데노 그란빌 일렉트로닉스(Mandeno Granville Electronics)의 Mod51은 IEC 1131을 따르는 임베디드 개발을 위한 언어 확장 기능이 있는 ISO 모듈라-2를 기반으로 하며, 프로그래머블 로직 컨트롤러(PLC)와 밀접하게 관련된 산업 표준으로 모듈라-2와 유사하다. Mod51 컴파일러는 80C51 기반 마이크로컨트롤러용 독립형 코드를 생성한다.

델코 일렉트로닉스(Delco Electronics)(당시 GM 휴즈 일렉트로닉스(Hughes Electronics)의 자회사)는 1985년부터 임베디드 제어 시스템을 위한 Modula-2 버전인 Modula-GM을 개발했다. 델코는 이를 ''엔진 제어 장치''(ECU)에서 기계어를 대체하기 위해 사용된 최초의 고급 프로그래밍 언어였다. 당시 델코는 세계 최대의 ECU 생산 업체였다. 임베디드 컨트롤러에서 Modula-GM을 처음으로 실험적으로 사용한 것은 1985년 안티록 브레이킹 시스템 컨트롤러였으며, 이는 모토로라 68xxx 마이크로프로세서를 기반으로 했고, 1993년에는 Champ Car World Series 챔피언십 오토 레이싱 팀(CART)과 인디 레이싱 리그(IRL) 팀에서 사용된 Gen-4 ECU에 사용되었다. Modula-GM의 첫 번째 생산 사용은 1990년형 GM 트럭부터 GM 파워트레인의 Vortec 엔진을 관리하는 데 사용된 ''차량 제어 모듈''(VCM)에 사용된 것이었다. Modula-GM은 또한 1997-2005년형 뷰익 파크 애비뉴에 사용된 GM의 90° 뷰익 V6 엔진 제품군 3800 시리즈 II의 모든 ECU에도 사용되었다. Modula-GM 컴파일러 및 관련 소프트웨어 관리 도구는 델코가 인터메트릭스(Intermetrics)로부터 소싱했다.

1995년 델코 일렉트로닉스가 GM에서 (다른 부품 부문과 함께) 분사되어 델파이 오토모티브 시스템즈(Delphi Automotive Systems)를 형성한 후, 글로벌 소싱으로 인해 비독점적인 고급 소프트웨어 언어가 사용되어야 했다. 현재 델파이에서 개발된 ECU 임베디드 소프트웨어는 C 언어용 상용 컴파일러로 컴파일된다.

모듈라-2는 일부 운영체제를 프로그래밍하는 데 사용된다.[50][51][52][53] 모듈라-2의 모듈 구조와 지원은 두 개의 관련 운영체제에서 직접 사용된다.

ETH 취리히에서 스벤드 에릭 크누센이 비르트의 조언을 받아 개발한 릴리스 워크스테이션용 운영체제인 Medos-2는 모듈라-2 모듈로 구축된 단일 사용자, 객체 지향 운영 체제이다. 소비에트 연방 과학 아카데미 시베리아 지부, 노보시비르스크 컴퓨팅 센터, 모듈식 비동기 개발 가능 시스템(MARS) 프로젝트, 크로노스 연구 그룹(KRG)에서 개발한 크로노스 워크스테이션용 운영체제인 Excelsior는 모듈라-2 모듈을 기반으로 한 단일 사용자 시스템이다.

러시아의 위성 항법 시스템인 글로나스 위성은 미국의 GPS와 유사하게 모듈라-2로 프로그래밍되어 있다.[21]

5. 1. 임베디드 시스템

모듈라-2는 많은 임베디드 시스템 프로그래밍에 사용된다.[19][20]

케임브리지 마이크로프로세서 시스템즈(Cambridge Microprocessor Systems)의 케임브리지 모듈라-2(Cambridge Modula-2)는 임베디드 개발을 위한 언어 확장을 포함한다. 이 컴파일러는 DOS에서 실행되며, MINOS 운영 체제를 실행하는 모토로라 68000 시리즈(M68k) 기반의 임베디드 마이크로컨트롤러용 코드를 생성한다.

만데노 그란빌 일렉트로닉스(Mandeno Granville Electronics)의 Mod51은 IEC 1131을 따르는 임베디드 개발을 위한 언어 확장 기능이 있는 ISO 모듈라-2를 기반으로 하며, 프로그래머블 로직 컨트롤러(PLC)와 밀접하게 관련된 산업 표준으로 모듈라-2와 유사하다. Mod51 컴파일러는 80C51 기반 마이크로컨트롤러용 독립형 코드를 생성한다.

델코 일렉트로닉스(Delco Electronics)(당시 GM 휴즈 일렉트로닉스(Hughes Electronics)의 자회사)는 1985년부터 임베디드 제어 시스템을 위한 Modula-2 버전인 Modula-GM을 개발했다. 델코는 이를 ''엔진 제어 장치''(ECU)에서 기계어를 대체하기 위해 사용된 최초의 고급 프로그래밍 언어였다. 당시 델코는 세계 최대의 ECU 생산 업체였다. 임베디드 컨트롤러에서 Modula-GM을 처음으로 실험적으로 사용한 것은 1985년 안티록 브레이킹 시스템 컨트롤러였으며, 이는 모토로라 68xxx 마이크로프로세서를 기반으로 했고, 1993년에는 Champ Car World Series 챔피언십 오토 레이싱 팀(CART)과 인디 레이싱 리그(IRL) 팀에서 사용된 Gen-4 ECU에 사용되었다. Modula-GM의 첫 번째 생산 사용은 1990년형 GM 트럭부터 GM 파워트레인의 Vortec 엔진을 관리하는 데 사용된 ''차량 제어 모듈''(VCM)에 사용된 것이었다. Modula-GM은 또한 1997-2005년형 뷰익 파크 애비뉴에 사용된 GM의 90° 뷰익 V6 엔진 제품군 3800 시리즈 II의 모든 ECU에도 사용되었다. Modula-GM 컴파일러 및 관련 소프트웨어 관리 도구는 델코가 인터메트릭스(Intermetrics)로부터 소싱했다.

1995년 델코 일렉트로닉스가 GM에서 (다른 부품 부문과 함께) 분사되어 델파이 오토모티브 시스템즈(Delphi Automotive Systems)를 형성한 후, 글로벌 소싱으로 인해 비독점적인 고급 소프트웨어 언어가 사용되어야 했다. 현재 델파이에서 개발된 ECU 임베디드 소프트웨어는 C 언어용 상용 컴파일러로 컴파일된다.

5. 2. 운영 체제

모듈라-2는 일부 운영체제를 프로그래밍하는 데 사용된다.[50][51][52][53] 모듈라-2의 모듈 구조와 지원은 두 개의 관련 운영체제에서 직접 사용된다.

ETH 취리히에서 스벤드 에릭 크누센이 비르트의 조언을 받아 개발한 릴리스 워크스테이션용 운영체제인 Medos-2는 모듈라-2 모듈로 구축된 단일 사용자, 객체 지향 운영 체제이다. 소비에트 연방 과학 아카데미 시베리아 지부, 노보시비르스크 컴퓨팅 센터, 모듈식 비동기 개발 가능 시스템(MARS) 프로젝트, 크로노스 연구 그룹(KRG)에서 개발한 크로노스 워크스테이션용 운영체제인 Excelsior는 모듈라-2 모듈을 기반으로 한 단일 사용자 시스템이다.

5. 3. 위성 항법 시스템

러시아의 위성 항법 시스템인 글로나스 위성은 미국의 GPS와 유사하게 모듈라-2로 프로그래밍되어 있다.[21]

6. 컴파일러

다양한 플랫폼에서 사용할 수 있는 여러 모듈라-2 컴파일러가 존재한다.


  • 암스테르담 컴파일러 키트(Amsterdam Compiler Kit, ACK) 모듈라-2는 MINIX용으로 프리웨어이다.[22]
  • ADW 모듈라-2는 윈도우용으로 ISO를 준수하며, ISO/IEC 10514-1, ISO/IEC 10514-2(OO 확장), ISO/IEC 10514-3(일반 확장)을 지원하는 프리웨어이다.[23]
  • 애글릿 모듈라-2(Aglet Modula-2)는 AmigaOS 4.0 for PowerPC용 프리웨어이다.[24]
  • 피티드 소프트웨어 툴(Fitted Software Tools, FST) 모듈라-2는 DOS용 프리웨어이다.[25]
  • 가든스 포인트 모듈라-2(Gardens Point Modula-2, GPM)는 BSD, 리눅스, OS/2, 솔라리스용으로 ISO를 준수하며 2014년 7월 30일 기준 프리웨어이다.[26]
  • 가든스 포인트 모듈라-2(Gardens Point Modula-2, GPM/CLR)는 .NET Framework용 프리웨어이다.[27]
  • GNU 모듈라-2는 GCC 플랫폼용으로 2010년 12월 11일 버전 1.0이 출시되었으며, PIM2, PIM3, PIM4, ISO를 준수하는 자유 소프트웨어로, GNU 일반 공중 사용 허가서(GPL)를 따른다.[28]
  • 로지텍 SA는 임베디드 사용을 위한 "실시간 커널"도 보유하고 있었다 (1987).[29][30]
  • M2Amiga는 Amiga용 자유 소프트웨어이다.[31]
  • M2M은 취리히 연방 공과대학교(ETH Zurich)의 N. 비르트(N. Wirth) 및 협력자들이 개발한 크로스 플랫폼 컴파일러로, 가상 머신용 M-코드를 생성하는 프리웨어이다.[32]
  • M2RT11은 취리히 연방 공과대학교(ETH Zurich)의 N. 비르트(N. Wirth) 및 협력자들이 릴리스(Lilith) 부트스트랩을 위해 제작하였다.
  • MacMETH는 취리히 연방 공과대학교(ETH Zurich)의 N. 비르트(N. Wirth) 및 협력자들이 개발한 Macintosh용 컴파일러로, Classic만 해당되는 프리웨어이다.[33]
  • Mod51은 인텔 80x51 마이크로컨트롤러 제품군용으로, ISO를 준수하고 IEC1132 확장을 지원하는 독점 소프트웨어이다.[34]
  • 메가맥스 모듈라-2(Megamax Modula-2)는 설명서가 포함된 Atari ST용 프리웨어이다.[35]
  • 모듈라-2 R10(Modula-2 R10)은 이 모듈라의 참조 컴파일러로, 오픈 소스이며 피어 리뷰를 거친다.[36]
  • 모듈라웨어(ModulaWare)는 OpenVMS (VAX 및 알파)용으로 ISO를 준수하는 독점 소프트웨어이다.[37]
  • ORCA/Modula-2는 The Byte Works의 Apple IIGS용 Apple Programmer's Workshop용 컴파일러이다.
  • p1 모듈라-2는 Macintosh, 클래식 및 macOS (PowerPC 및 Carbon (API)만 해당)용으로, ISO를 준수하는 독점 소프트웨어이다.[38]
  • MOCKA는 다양한 플랫폼용으로 PIM을 준수하며, 상용이지만 리눅스/BSD 버전은 프리웨어이다.[39]
  • TDI 모듈라-2는 TDI Software에서 제작한 Atari ST용 컴파일러이다.[40]
  • 테라 M2VMS(Terra M2VMS)는 OpenVMS (VAX 및 알파)용으로 PIM을 준수하는 독점 소프트웨어이다.[41]
  • m2c, 울름 모듈라-2 시스템(Ulm Modula-2 System)은 솔라리스 (SPARC 및 모토로라 68k)용 자유 소프트웨어로, GNU 일반 공중 사용 허가서(GPL)를 따른다.[42]
  • XDS는 ISO를 준수하고 TopSpeed 호환 라이브러리를 제공한다. x86(윈도우 및 리눅스)용 ''네이티브 XDS-x86''과 윈도우 및 리눅스용 ''XDS-C''(16비트 및 32비트 버전)가 있으며, C (K&R & ANSI) 타겟; 프리웨어이다.[43]

Borland에서 개발했지만 출시되지 않은 MS-DOS통합 개발 환경 및 컴파일러인 터보 모듈라-2는, Borland의 공동 창업자인 닐스 옌센을 포함한 Jensen and Partners가 미출시된 코드베이스를 구매하여 TopSpeed Modula-2로 만들었다. 이는 결국 Clarion(현재 SoftVelocity)에 판매되었고, Clarion은 당시 자사의 Clarion 제품군에 Modula-2 컴파일러를 포함하여 제공했다.[44]

Zilog Z80 CP/M 버전의 터보 모듈라-2는 Borland의 라이선스 하에 Echelon에 의해 잠시 판매되었다. Hitachi HD64180용 컴패니언 릴리스는 Micromint에서 자사의 SB-180 싱글 보드 컴퓨터의 개발 도구로 판매했다.[45]

IBMOS/2AIX에서 모두 실행되는 내부 사용용 Modula-2 컴파일러를 가지고 있었으며, IBM의 E2 편집기에서 최고 수준의 지원을 받았다. IBM Modula-2는 OS/400의 'Vertical Licensed Internal Code'(사실상 OS/400의 커널)의 일부에 사용되었다.[46] 이 코드는 OS/400이 IBM RS64 프로세서 제품군으로 이식되면서 대부분 C++로 대체되었지만, 운영 체제의 최신 릴리스에도 일부 남아있다.[48][49] Motorola 68000 백엔드도 존재했으며, 이는 임베디드 시스템 제품에 사용되었을 수 있다.[46]

7. 표준

Modula-2는 ISO 10514로 표준화되어 있다. 일본 산업 규격은 존재하지 않는다.



니클라우스 비르트의 저서 『Programming in Modula-2』(Springer-Verlag, 1982년 초판, 1988년 4판)는 Modula-2의 소개와 보고서로 구성되어 있으며, 엄밀하지는 않지만 표준으로 취급된다. 3판은 한국어 번역판이 있다.

8. 예제 코드

modula2

MODULE Hello;

FROM STextIO IMPORT WriteString;

BEGIN

WriteString("Hello World!")

END Hello.

```

```modula2

MODULE sample ;

FROM InOut IMPORT WriteLn,WriteString ;

BEGIN

WriteString('This is Modula-2') ;

WriteLn

END sample.

참조

[1] 웹사이트 Summary of Projects by N. Wirth, 1962–1999 https://www.inf.ethz[...] ETH Zurich
[2] 서적 Software Pioneers: Contributions to Software Engineering Springer-Verlag 2002
[3] 간행물 History and Goals of Modula-2 https://www.drdobbs.[...] Informa PLC 2005-02-18
[4] 서적 Programming in Modula-2 Springer
[5] 간행물 Theme: Modula-2 https://archive.org/[...] 1984-08
[6] 웹사이트 A Single-pass Modula-2 Compiler for Lilith https://www.astrobe.[...] 2023-11-23
[7] 문서 FOLDOC
[8] 문서 ISO/IEC 10514-1:1996
[9] 문서 Tichy et al., Modula-2*: An Extension for Modula-2 for highly parallel portable programs University of Karlsruhe 1990
[10] 문서 Bräunl, Parallel Programming Prentice-Hall 1993
[11] 학술지 Modula–Prolog: A Software Development 1986-11
[12] 웹사이트 modula2.org, 5. Where can I get information about ISO Modula-2? https://freepages.mo[...]
[13] 문서 Cardelli et al., Modula-3 Report Digital Equipment Corporation, Systems Research Center 1988
[14] 서적 N. Wirth & J. Gutknecht, Project Oberon: the design of an operating system and compiler Addison-Wesley 1992
[15] 문서 Moessenboeck & Wirth, The Programming Language Oberon-2 ETH Zurich 1995
[16] 문서 Thomas Bräunl, Parallaxis, a Language for Structured Data-parallel Programming University of Stuttgart 1996
[17] 문서 Pat D. Terry, Another Minimal Programming Language, ACM SIGPLAN Notices No. 30 1995
[18] 문서 D. Blasband, The YAFL Programming Language, Second Edition 1993
[19] 간행물 Delco Electronics Electron Magazine, The Atwood Legacy 1989
[20] 문서 Development of electronics for GM auto racing
[21] 웹사이트 Modula-2 in Russian Space http://www.kronos.ru[...] xTech 2021-04-08
[22] 웹사이트 ACK https://github.com/d[...] 2021-03-13
[23] 웹사이트 ADW Modula-2 https://www.modula2.[...] 2021-03-13
[24] 웹사이트 Aglet Modula-2 https://aglet.web.ru[...] 2021-03-13
[25] 웹사이트 FST Modula-2 ftp://ftp.psg.com/pu[...] 2021-10-13
[26] 웹사이트 Gardens Point Modula http://plas.fit.qut.[...] Queensland University of Technology, Brisbane 2021-03-13
[27] 웹사이트 Gardens Point Modula-2 (GPM/CLR) https://github.com/k[...] 2022-10-16
[28] 웹사이트 GNU Modula-2 https://www.nongnu.o[...] Free Software Foundation 2021-03-13
[29] 웹사이트 Logitech Modula-2 http://www.edm2.com/[...] The Electronic Developer Magazine for OS/2 (EDM/2) 2022-05-29
[30] 웹사이트 1988: Modula-2 and Logitech RTK https://www.teigfam.[...] Øyvind Teig 2022-04-12
[31] 웹사이트 M2Amiga https://m2amiga.clau[...] A+L AG 2021-03-13
[32] 웹사이트 Lilith and Modula-2 https://www.astrobe.[...] 2023-11-23
[33] 웹사이트 MacMETH: A Fast Modula-2 Language System for Macintosh Computers https://www.sysecol2[...] 2021-03-13
[34] 웹사이트 Mod51 Structured Text Programming Language http://www.designtoo[...] 2021-03-13
[35] 웹사이트 Thomas Tempelmann's home page https://www.tempel.o[...] 2021-03-18
[36] 웹사이트 Modula-2 R10 https://modula-2.net[...] 2021-10-13
[37] 웹사이트 ModulAware http://www.modulawar[...] 2021-03-18
[38] 웹사이트 p1 Modula-2 https://modula2.awie[...] 2021-03-19
[39] 웹사이트 The Karlsruhe Modula-2 Compiler MOCKA http://www.info.uni-[...] Karlsruhe Institute of Technology 2021-03-21
[40] 잡지 Modula-2 compiler https://archive.org/[...] 2022-10-08
[41] 웹사이트 Modula-2 systems for OpenVMS/Alpha and OpenVMS/VAX http://www.terraterr[...] 2021-03-23
[42] 웹사이트 m2c: Ulm's Modula-2 System https://www.mathemat[...] 2021-03-23
[43] 웹사이트 XDS Family of Products: Modula-2 – Oberon-2 development tools http://www.excelsior[...] 2021-03-23
[44] 웹사이트 About Clarion http://softvelocity.[...] 2023-03-31
[45] 잡지 Circuit Cellar https://archive.org/[...]
[46] 웹사이트 IBM Modula-2 http://www.edm2.com/[...] 2021-03-12
[47] 웹사이트 Reader Feedback on AS/400 to i Mystery Solved https://www.itjungle[...] 2021-03-12
[48] 서적 Inside the AS/400 https://books.google[...] Duke Press
[49] 간행물 Re: Re: MI emulator https://archive.midr[...] 2021-02-26
[50] 학위논문 Medos-2: A Modula-2 Oriented Operating System for the Personal Computer Lilith ETH Zurich 1983
[51] 서적 The School of Niklaus Wirth: The Art of Simplicity Morgan Kaufmann 2000-10-25
[52] 잡지 The Lilith Personal Computer https://archive.org/[...] 2021-03-06
[53] 웹사이트 Kronos: a family of processors for high-level languages http://www.kronos.ru[...] xTech 2021-04-13
[54] 웹인용 Summary of Projects by N. Wirth, 1962–1999 http://www.inf.ethz.[...] ETH Zurich
[55] 서적 Software Pioneers: Contributions to Software Engineering Springer-Verlag 2002
[56] 잡지 History and Goals of Modula-2 https://www.drdobbs.[...] Informa PLC 2005-02-18



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com