오베론(프로그래밍 언어)
Oberon (programming language)![]() | |
패러다임 | 명령형, 구조형, 모듈형, 객체 지향형 |
---|---|
가족 | 워스 오베론 |
설계자 | 니클라우스 워스 |
개발자 | ETH 취리히 |
처음 등장한 | 전 |
안정된 릴리스 | 오베론-07 / 2020년 3월 , 전( |
타이핑 분야 | 강력한 하이브리드(정적 및 동적) |
범위 | 어휘 |
플랫폼 | ARM, StrongARM, IA-32, x86-64, SPARC, Ceres(NS32032) |
OS | Windows, Linux, Solaris, Classic Mac OS, Atari TOS, AmigaOS |
웹 사이트 | www |
영향을 받다 | |
모듈라-2 | |
영향받은 | |
Oberon-2, Oberon-07, Active Oberon, 컴포넌트 Pascal, Zonnon, Go, Nim |
Oberon은 Niklaus Wirth가 1987년에 처음 발표한 범용 프로그래밍 언어이며, ALGOL W, Pascal, Modula [1][2][3][4]및 Modula-2의 Worth 어족 중 최신 언어입니다.오베론은 파스칼의 직접적인 후계자인 모듈라-2의 힘을 증가시키고 동시에 그 복잡성을 줄이려는 집중적인 노력의 결과였다.주요 신기능은 레코드 [5]유형의 유형 확장 개념입니다.기존 데이터 유형을 기반으로 새로운 데이터 유형을 구축하고 관련시킬 수 있으며, 데이터의 엄격한 정적 타이핑의 원칙에서 벗어납니다.Type extension은 부모 사이트의 관점을 반영한 Worth의 상속 방식입니다.Oberon은 운영체제 구현의 일환으로 개발되었으며, 스위스 ETH Zurich에서 Oberon이라는 이름을 사용하기도 했습니다.그 이름은 오베론이라는 이름의 천왕성의 위성에서 왔다.
Oberon은 여전히 Worth에 의해 유지되고 있으며 최신 Project Oberon 컴파일러 업데이트는 2020년 [6]3월 6일입니다.
설계.
오베론은 알버트 아인슈타인의 모토를 염두에 두고 디자인되었다: "사물을 가능한 한 단순하게 만들되, 단순하게 만들지 말라."주요 가이드라인은 기본적이고 필수적인 기능에 초점을 맞추고 일시적인 문제는 생략하는 것이었습니다.또 다른 요인은 C++ 및 Ada와 같은 언어의 복잡성 증가를 인식한 것입니다.이와는 대조적으로, 오베론은 언어를 확장하기 위해 도서관 개념을 사용하는 것을 강조한다.Modula-2에 있던 열거형 및 서브레인지형은 생략하고 세트형은 정수 세트로 한정됩니다.Import된 모든 항목은 선언된 모듈의 이름으로 수식되어야 합니다.저수준 설비는 Import 목록에 SYSTEM이라는 식별자를 포함하는 모듈에서만 사용할 수 있도록 함으로써 강조 표시됩니다.모듈 전체에서도 엄격한 유형 검사, 런타임 시 인덱스 검사, 늘 포인터 검사 및 안전 유형 확장 개념은 프로그래밍이 언어 규칙에만 의존할 수 있도록 합니다.
이 전략의 목적은 배우기 쉽고 구현하기 쉽고 매우 효율적인 언어를 만드는 것이었습니다.Oberon 컴파일러는 상용 [7]컴파일러에 필적하는 코드 품질을 제공하면서도 컴팩트하고 빠른 컴파일러로 인식되어 왔습니다.
특성.
Oberon 언어를 특징짓는 기능은 다음과 같습니다.[8]
- 대소문자를 구분하는 키워드 구문
- 유형 테스트를 사용한 유형 확장
- 모듈 및 개별 컴파일
- 문자열 조작
- 안전하지 않은 코드 분리
- 시스템 프로그래밍 지원
오브젝트 방향
Oberon은 추상화 및 이종 구조의 구축을 위한 레코드 유형의 확장을 지원합니다.후기 방언인 오베론-2나 액티브 오베론과 달리 원래 오베론은 언어 기능으로서의 디스패치 메커니즘이 없지만 프로그래밍 기법이나 디자인 패턴으로 사용됩니다.이로 인해 OOP의 유연성이 매우 높아집니다.Oberon 운영체제에서는 디스패치콜에는 다음 두 가지 프로그래밍 기술이 함께 사용됩니다.메서드 스위트 및 메시지핸들러
메서드 스위트
이 기술에서는 절차 변수 테이블이 정의되고 이 유형의 글로벌 변수가 확장 모듈에서 선언되어 범용 모듈에서 다시 할당됩니다.
모듈 그림; (*추상 모듈 *) TYPE 그림* = POINTER TO FigureDesc; InterfaceDesc; InterfaceDesc* = RECORD 드로우* : PROCEDURE (f: 그림); clear* : PROCEDOCESSURE (f: 그림); mark* : PROCEDOCEDURE (f : (f: 그림); DISURE (f: 그림); DISURE; Digure; Digure; DISURE; DISURE; DXF: 그림: 그림:= RECORD if : 인터페이스; END; PROCEDORE Init* (f : 그림; 인터페이스), BEGIN f.if : = if END Init; PROCEDORE Draw* (f : 그림), BEGIN f.if.draw(f) ENDraw; (*여기에서 기타 절차 *) 그림
범용 타입의 Figure를 특정의 쉐이프로 확장합니다.
모듈 직사각형, 그림 Import, TYPE Rectangle* = Pointer to RectangleDesc, RectangleDesc* = RECORD (그림)그림설명) x, y, w, h : INTEGER; END; VAR if : 그림.인터페이스, PROCEDURE New*(VAR r : 직사각형), BEGIN NEW(r); 그림.Init(r, if) END 신규, PROCEDURE 그리기*(f : 그림), VAR r : 직사각형, BEGIN r : = f(직각), (* f AS 직사각형 *) (*...) *) END 그리기;(*여기서 기타 절차 *) BEGIN(* 모듈 초기화 *) NEW(if); if.draw := 그리기; if.clear:= 지우기; if.mark := Mark; if.move := END 직사각형 이동.
다이내믹 디스패치는 범용 모듈인 그림 모듈의 절차를 통해서만 실행됩니다.
메시지 핸들러
이 기술은 일련의 메서드를 단일 절차로 대체하여 다양한 메서드를 구별합니다.
모듈 그림; (*추상 모듈 *) TYPE 그림* = POINTER TO FigureDesc; Message* = RECORD END, DrawMsg* = RECORD (메시지) END, ClearMsg* = RECORD (메시지) END, MarkMsg* = RECORD (메시지) END; Message (메시지 이동*그림설명* = RECORD (* Abstract * )핸들 : 핸들러; END; PROCEDURE 핸들* (f : 그림; VAR msg : Message), BEGIN f.dict (f, msg)EN 핸들; PROCEDURE Init* (f : 그림; 핸들: 핸들: 핸들); END INIT; 그림
범용 타입의 Figure를 특정의 쉐이프로 확장합니다.
모듈 직사각형, 그림 Import, TYPE Rectangle* = Pointer to RectangleDesc, RectangleDesc* = RECORD (그림)그림설명) x, y, w, h: INTEGER; END; PROCEDURE Draw*(r : 직사각형), BEGIN(*...) *) END Draw;(*여기서 기타 절차 *) PROCEDURE 핸들* (f: 그림, VAR 메시지: 그림).메시지), VAR r : 직사각형, BEGIN r : = f(직각), IF msg IS 수치.DrawMsg THEN Draw(r) ELSIF 메시지 IS 수치MarkMsg THEN Mark(r) ELSIF 메시지 IS 수치MoveMsg Then Move(r, msg(그림)를 선택합니다.MoveMsg.dx, msg(그림)MoveMsg.dy) ELSE(* ignore *) END 핸들, PROCEDURE New*(VAR r : 직사각형), BEGIN NEW(r); 그림.Init(r, 핸들) END 신규, END 직사각형.
Oberon 운영체제에서는 이 두 가지 방법을 모두 사용하여 동적 디스패치를 수행합니다.첫 번째 방법은 기존의 방식 세트에 사용되며 두 번째 방법은 확장 모듈에서 선언된 모든 새로운 방식에 사용됩니다.예를 들어 확장 모듈 직사각형에서 새로운 Rotate() 프로시저를 구현하는 경우 그림 모듈 내에서는 메시지핸들러를 통해서만 호출할 수 있습니다.
구현 및 변형
오베론
인터넷에서는 Oberon(언어)과 Oberon(운영체제)을 무료로 구현할 수 있습니다(몇 개는 ETHZ 자체에서).
오베론-2
처음 출시된 사양에 몇 가지 변경 사항이 있습니다.예를 들어 객체 지향 프로그래밍(OOP) 기능이 추가되었습니다.FOR
루프가 복구되었습니다.결과는 오베론-2였다.운영 체제를 포함하는 Native Oberon이라는 이름의 릴리스는 IBM PC 호환 클래스 하드웨어에서 직접 부팅할 수 있습니다.약간의 마이너를 추가한 Oberon의 .NET 실장.NET 관련 확장도 ETHZ에서 개발되었습니다.1993년 ETHZ 분사 회사가 Oberon-2라는 사투리를 시장에 내놓았다.1997년에 컴포넌트 파스칼로 이름이 변경되었습니다.
ETH가 개발한 Oberon-2 컴파일러에는 Microsoft Windows, Linux, Solaris 및 클래식 Mac OS용 버전이 포함되어 있습니다.Atari TOS 및 Amiga를 포함한 다른 운영 체제에도 다른 소스로부터의 구현이 존재합니다.OS.
Mössenböck and Worth 참조에 있는 것을 기반으로 한 영국 맨체스터 대학의 Stephen J Bevan의 Oberon-2 Lex 스캐너와 Yacc 파서가 있습니다.버전 1.4입니다.
다른 컴파일러로는 Overon-07을 이해하는 Oxford Oberon-2와 [9]Vishap Oberon이 [10]있다.후자는 Ofront라는 이름의 Joseph [11]Templon의 Oberon to C 언어 Source-to-Source 컴파일러(트랜스파일러)를 기반으로 합니다.이것은 ETHZ의 Regis Crelier가 개발한 OP2 컴파일러를 기반으로 합니다.
오베론-07
Niklaus Wirth가 2007년에 정의하고 2008년, 2011년, 2013년, 2014년, 2015년, 2016년에 개정된 Oberon-07은 Oberon-2가 아닌 Oberon의 원래 버전을 기반으로 합니다.주요 변경 사항은 명시적 수치 변환 함수(예:FLOOR
그리고.FLT
)를 사용해야 합니다.WITH
,LOOP
그리고.EXIT
문장이 생략되었습니다.WHILE
진술이 연장되었다.CASE
문장은 타입 확장 테스트에 사용할 수 있습니다.RETURN
문장은 함수의 끝에만 연결할 수 있으며 가져온 변수 및 구조화 값 매개 변수는 읽기 전용이며 어레이는 사용하지 않고 할당할 수 있습니다.COPY
를 클릭합니다.[12]
Oberon-07 컴파일러는 다양한 컴퓨터 시스템에서 사용할 수 있도록 개발되었습니다.Worth의 컴파일러는 Xilinx Field-Programmable Gate Array(FPGA) Spartan-3 보드에 Project Oberon 운영 체제의 2013 버전을 구현하는 데 사용된 자체 설계의 RISC(Reduced Instruction Set Computer) 프로세서를 대상으로 합니다.RISC 프로세서의 FPGA Spartan-6, Spartan-7, Artix-7 및 RISC 에뮬레이터(Linux 및 MacOS에서 컴파일 가능, Windows에서 사용 가능한 바이너리)로의 포트도 존재합니다.OBNC는 C를 통해 컴파일되며 모든 Portable Operating System Interface(POSIX) 호환 운영 체제에서 사용할 수 있습니다.상용 Astrove 구현 대상은 32비트 ARM Cortex-M3, M4 및 M7 마이크로 컨트롤러입니다.Patchouli 컴파일러는 64비트 Windows 바이너리를 생성합니다.Oberon-07M은 32비트의 Windows 바이너리를 생성하여 리비전 2008을 구현합니다.Akron's는 Windows와 Linux용 바이너리를 만듭니다.OberonJS는 Oberon을 JavaScript로 번역합니다.Oberon 온라인 IDE가 있습니다.overonc는 Java 가상 머신을 위한 구현입니다.
액티브 오베론
Active Oberon은 Oberon의 또 다른 변종으로서 오브젝트(개체 중심 접근 보호 및 로컬액티비티 제어 기능 포함), 시스템 보호 어설션, 프리엠프티브 priority 스케줄링 및 메서드의 변경 구문(Oberon 어휘에서 유형 바인딩 프로시저로 명명됨)을 추가합니다.오브젝트는 액티브할 수 있습니다.즉, 스레드 또는 프로세스일 수 있습니다.또한 Active Oberon은 연산자(오버로드 포함)를 구현하고 어레이를 사용하기 위한 고급 구문(OberonX 언어 확장 및 제7회 영국 옥스퍼드 공동 모듈러 언어 회의 2006의 속행[13] 참조)을 사용하여 네임스페이스에 대해 [14]알고 있습니다.운영체제 A2(이전의 Active Object System(AOS),[15] 그 후 Bluebottle), 특히 커널은 다양한 활성 객체를 동기화 및 조정합니다.
ETHZ는 액티브 객체를 지원하는 Active Oberon과 이를 기반으로 하는 운영체제(AOS), Bluebottle, A2), 환경(JDK, HTTP, FTP 등)을 출시했습니다.ETHZ의 많은 이전 디자인과 마찬가지로, 두 가지 버전 모두 인터넷에서 다운로드할 수 있습니다.2003년 현재 지원되는 중앙처리장치(CPU)에는 싱글코어 및 듀얼코어 x86 및 StrongARM이 포함됩니다.
관련 언어
이 어족의 언어 발달은 계속되었다.Oberon-2의 추가 확장 버전은 원래 Oberon/L로 명명되었지만 나중에 구성 요소 파스칼(CP)로 이름이 변경되었습니다.CP는 ETHZ의 상용 분사 회사인 Oberon microsystems에 의해 Windows 및 클래식 Mac OS용으로 개발되었습니다.NET by Queensland University of Technology.또, 라구나[16][17][18], 오블리크 언어는 오베론 수법을 전문 분야로 옮긴다.
이후 ETHZ의 .NET 개발은 Zonnon이라는 새로운 언어에 초점을 맞췄다.여기에는 Oberon의 기능이 포함되어 있으며 Pascal에서 일부 복원(기재된 유형, 내장 IO)하지만 구문적인 차이가 있습니다.기타 기능으로는 액티브오브젝트 지원, 오퍼레이터 오버로드 및 예외 처리가 있습니다.
Oberon-V(원래 이름은 Seneca the Young)는 슈퍼컴퓨터, 특히 벡터 또는 파이프라인 아키텍처의 수치 적용을 위해 설계된 Oberon의 후손입니다.어레이 컨스트럭터 및ALL
스테이트먼트.[19]
「 」를 참조해 주세요.
자원.
일반
- ETH-Zürich 공식 웹사이트(아카이브 조직에서 최신 사본 제공)
- ETH-Zürich의 Niklaus Wirth의 Oberon 페이지
- 린츠 SSW의 Oberon 페이지
- 오베론: 울름의 프로그래밍 언어
- Project Oberon, The Design of a Operating System and a Compiler, PDF by Niklaus Worth and Jürg Gutknecht, 2005년판
- 오베론어 계보
- Astrove ARM Oberon-07 개발 시스템
- Oberon System V4 for HP OpenVMS Alpha (소스 코드 상향 호환 64비트 주소 지정)
- HP OpenVMS Alpha용 64비트 Oberon-2 컴파일러
- Overon-2 컴파일러 및 사용자 매뉴얼
- Windows, Macintosh 및 Linux용 무료 Oberon-07 IDE (구문 색칠, 의미 탐색 및 소스 코드 디버거 포함)
- 1994년 1월호에 실린 조셉 템플의 오베론 기사.돕스
오베론의 진화
- Modula-2 및 Oberon Worth (2005)
- 프로그래밍 언어 Oberon Wirth, 1988/90)
- The Programming Language Oberon (Oberon-7, 개정판 Oberon) Worth, (2016, 최신 언어 보고서)
- Oberon-07과 Oberon Worth의 차이점 (2011년)
- 프로그래밍 언어 Oberon-2 H. Mössenböck, N. Wirth, Institut für Computersysteme, ETH 취리히, 1992년 1월
- Oberon과 Oberon-2 Mössenböck 및 Worth의 차이점(1991)
- 컴포넌트 Pascal의 신기능(Oberon-2에서 CP로 변경), Pfister(2001)
레퍼런스
- ^ Wirth, Niklaus (1987). From Modula to Oberon and the programming language Oberon (Report). ETH Technical Reports D-INFK. Vol. Band 82. Wiley. doi:10.3929/ethz-a-005363226.
- ^ Wirth, Niklaus (July 1988). "The Programming Language Oberon". Software: Practice and Experience. 18 (7): 661–670. doi:10.1002/spe.4380180706. S2CID 13092279.
- ^ Wirth, Niklaus (July 1988). From Modula to Oberon. Software: Practice and Experience (Report). Vol. 18. pp. 671–690.
- ^ Wirth, Niklaus (April 1988). "Type Extensions". ACM Transactions on Programming Languages. 10 (2): 204–214. doi:10.1145/42190.46167. S2CID 15829497.
- ^ Pountain, D. March 1991. "Modula's Children, Part II: Oberon". Byte. Vol. 16, no. 3. pp. 135–142.
- ^ Wirth, Niklaus. "Oberon Change Log". ETH Zurich. Retrieved 16 January 2021.
- ^ Mössenböck, Hanspeter. "Compiler Construction: The Art of Niklaus Wirth" (PDF). Johannes Kepler University.
- ^ Wirth, Niklaus; Gutknecht, Jürg (1987–2021). "Project Oberon".
- ^ Spivey (8 April 2019). "Oxford Oberon-2 compiler". Retrieved 17 January 2021.
- ^ dcwbrown (16 June 2020). "Vishap Oberon Compiler". GitHub. Retrieved 17 January 2021.
- ^ jtempl (2 January 2020). "Ofront". GitHub. Retrieved 17 January 2021.
- ^ Wirth, Niklaus (3 May 2016). The Programming Language Oberon-07 (PDF). ETH Zurich, Department of Computer Science (Report). Retrieved 17 January 2021.
- ^ Friedrich, Felix; Gutknecht, Jürg (2006). "Array-Structured Object Types for Mathematical Programming". In Lightfoot, David E.; Szyperski, Clemens (eds.). Modular Programming Languages. Lecture Notes in Computer Science. Vol. 4228. Springer, Berlin Heidelberg. pp. 195–210. doi:10.1007/11860990_13. ISBN 978-3-540-40927-4.
- ^ "Proposal for Module Contexts" (PDF).
- ^ Muller, Pieter Johannes (2002). The active object system design and multiprocessor implementation (PDF) (PhD). Swiss Federal Institute of Technology, Zürich (ETH Zurich).
- ^ Fröhlich, Peter H.; Franz, Michael. On Certain Basic Properties of Component-Oriented Programming Languages (PDF) (Report). University of California, Irvine. Retrieved 18 January 2021.
- ^ Fröhlich, Peter H.; Gal, Andreas; Franz, Michael (April 2005). "Supporting software composition at the programming language level". Science of Computer Programming. Elsevier B.V. 56 (1–2): 41–57. doi:10.1016/j.scico.2004.11.004. 2021년 1월 18일 취득.
- ^ 프란츠, 마이클 Fröhlich, 피터 H., 키슬러. 미국, 토마스(201999년 11월)."component-oriented 실시간 프로그래밍 언어 지원을 향하여".논문집:5국제 워크숍 객체 지향형 실시간 Dependable 시스템에.전기 전자 기술자 협회(IEEE).를 대신하여 서명함. 125–129. doi:10.1109/WORDSF.1999.842343.아이 에스비엔 0-7695-0616-X.S2CID 6891092.1월 21일, 2021년까지 Retrieved.
- ^ Griesemer, Robert (1993). "A Language for Numerical Applications on Vector Computers". Proceedings CONPAR 90: VAPP IV Conference, Diss Nr. 10277. ETH Zurich.