시뮬라
Simula패러다임 | 멀티패러다임: 절차, 명령, 구조화, 객체 지향 |
---|---|
가족 | 인식하다 |
설계자 | 올레-조한 달 |
개발자 | 크리스틴 니고르 |
처음 등장한 | 전 ( |
안정된 릴리스 | 시물라 67세, 시뮬라 1세 |
타이핑 분야 | 정적, 주격 |
범위 | 어휘 |
구현 언어 | ALGOL 60(주로 Simscript 일부 컴포넌트) |
OS | Unix 계열, Windows, z/OS, TOPS-10, MVS |
웹 사이트 | www |
영향을 받다 | |
ALGOL 60, Simscript | |
영향받은 | |
이후의 모든 객체 지향 프로그래밍 언어 |
Simula는 두 개의 시뮬레이션 프로그래밍 언어인 Simula I와 Simula 67의 이름으로, 1960년대에 Ole-Johan Dahl과 Kristen Nygaard에 의해 오슬로의 노르웨이 컴퓨팅 센터에서 개발되었습니다.구문론적으로는 ALGOL [1]: 1.3.1 60의 대략적인 슈퍼셋이며 Simscript의 [2]설계에도 영향을 받았습니다.
Simula 67은 오브젝트,[1]: 2, 5.3 클래스,[1]: 1.3.3, 2 상속 및 서브 클래스,[1]: 2.2.1 가상 프로시저,[1]: 2.2.3 코루틴 [1]: 9.2 및 이산 이벤트 [1]: 14.2 시뮬레이션을 도입하여 가비지 컬렉션을 [1]: 9.1 특징으로 한다.서브타이핑의 다른 형태(상속 서브클래스 제외)는 Simula [citation needed]파생상품에 도입되었다.
Simula는 최초의 객체 지향 프로그래밍 언어로 여겨진다.이름에서 알 수 있듯이, 1962년까지 최초의 Simula 버전은 시뮬레이션을 하기 위해 설계되었다; Simula 67은 범용 프로그래밍[3] 언어로 설계되었고 오늘날 객체 지향 언어의 많은 특징에 대한 프레임워크를 제공했다.
Simula는 VLSI(초대규모 통합) 설계 시뮬레이션, 프로세스 모델링, 통신 프로토콜, 알고리즘 및 조판, 컴퓨터 그래픽스, 교육 등의 기타 응용 프로그램에서 사용되었습니다.Simula의 영향은 종종 과소평가되며 Simula-type 객체는 C++, Object Pascal, Java, C# 및 기타 많은 언어로 재실장됩니다.C++를 만든 Bjarne Strostrup과 Java를 만든 James Gosling과 같은 컴퓨터 과학자들은 Simula를 주요한 [4]영향력으로 인정했다.
역사
다음 설명은 얀 루네 홀메빅의 역사 [5][6]에세이에 바탕을 두고 있다.
Kristen Nygaard는 1957년에 컴퓨터 시뮬레이션 프로그램을 만들기 시작했습니다.Nygaard는 시스템의 이질성과 운영을 설명하는 더 나은 방법이 필요하다고 생각했습니다.시스템을 기술하기 위한 공식적인 컴퓨터 언어에 대한 그의 아이디어를 더 나아가기 위해, Nygaard는 그가 가지고 있던 것보다 더 많은 컴퓨터 프로그래밍 기술을 가진 사람이 필요하다는 것을 깨달았다.Ole-Johan Dahl은 1962년 1월에 그의 작업에 합류했다.그 언어를 ALGOL 60에 연결하기로 한 결정은 그 직후에 내려졌다.1962년 5월까지 시뮬레이션 언어에 대한 주요 개념이 설정되었다.개별 이벤트 시스템을 시뮬레이션하기 위한 특수 목적 프로그래밍 언어인 SIMULA I이 탄생했습니다.
Kristen Nygaard는 새로운 UNIVAC 1107 컴퓨터의 마케팅과 관련하여 1962년 5월 말에 Eckert-Mauchly Computer Corporation에 초대되었습니다.그 방문에서 Nygaard는 Univac의 시스템 프로그래밍 디렉터인 Robert Bemer에게 Simula의 아이디어를 발표했습니다.Bemer는 ALGOL의 열렬한 팬이었고 Simula 프로젝트가 매력적이라고 생각했습니다.또, 국제 정보 처리 연맹(IFIP)이 주최하는 제2회 정보 처리 국제 회의의 의장도 맡았습니다.그는 Nygaard를 초청하여 "SIMULA – 이산 이벤트 네트워크의 설명에 대한 ALGOL의 확장"이라는 논문을 발표하였습니다.
노르웨이 컴퓨팅 센터는 1963년 8월에 UNIVAC 1107을 대폭 할인하여 구입하였으며, Dahl은 UNIVAC와 계약하여 SIMULA I을 구현하였습니다.실장은 UNIVAC ALGOL 60 컴파일러에 근거하고 있습니다.SIMULA I은 1965년 1월까지 UNIVAC 1107에서 완전히 작동되었습니다.그 후 몇 년 동안, 달과 니고드는 시뮬라를 가르치는 데 많은 시간을 보냈다.Simula는 전 세계 여러 나라에 보급되었고 SIMULA I은 나중에 Burroughs B5500과 러시아 Ural-16을 포함한 다른 컴퓨터에 구현되었습니다.
1966년 C. A. R. Hoare는 레코드 클래스 구성의 개념을 도입했는데, Dahl과 Nygaard는 일반 프로세스 개념에 대한 요구사항을 충족시키기 위해 접두사 개념과 기타 기능을 확장했습니다.Dahl과 Nygaard는 1967년 5월 오슬로에서 열린 시뮬레이션 언어에 관한 IFIP 워킹 컨퍼런스에서 클래스 및 서브클래스 선언에 관한 논문을 발표했다.이 논문은 Simula 67의 첫 공식 정의가 되었다.1967년 6월, 언어를 표준화하고 많은 구현을 시작하기 위한 회의가 열렸다.Dahl은 유형과 수업 개념을 통합하자고 제안했다.이것은 심각한 논의로 이어졌고, 그 제안은 이사회에 의해 거부되었다.Simula 67은 1968년 2월 Simula Standards Group(SSG)의 첫 회의에서 공식적으로 표준화되었다.
Simula는 Smalltalk와 이후 객체 지향 프로그래밍 언어의 개발에 영향을 미쳤다.또한 Simula는 Coroutine만 지원하며 진정한 [7]동시성은 지원하지 않지만 동시 계산 모델의 배우에게 영감을 주는 데 도움이 되었습니다.
60년대 후반과 70년대 초반에는 시뮬라의 4가지 주요 구현이 있었습니다.
- 노르웨이 컴퓨팅 센터(NCC)의 UNIVAC 1100
- 시스템/360 및 시스템/370 by NCC
- CDC 3000 - 오슬로 대학 컴퓨터 공동 설치 (Kjeller)
- 스웨덴 국방연구소(FOA)의 TOPS-10
이러한 실장은 다양한 플랫폼에 이식되었습니다.TOPS-10은 퍼블릭, 프로텍트, 프라이빗 멤버의 변수와 프로시저의 개념을 실장하고, 나중에 Simula 87에 통합되었다.Simula 87은 최신 표준으로 다양한 플랫폼에 이식되어 있습니다.실장은 주로 4가지입니다.
2001년 11월, Dahl과 Nygaard는 "SIMULA 67의 설계와 구현을 통해 객체 지향 프로그래밍의 기초가 되는 개념을 도입한 공로" 전기 전자 공학 협회로부터 IEEE John von Neumann 상을 받았습니다.2002년 4월에, 그들은 협회가 컴퓨팅 기계(ACM), 표창과:"아이디어 들어 개체 지향 프로그래밍에 대한 프로그래밍 시뮬라와 시뮬라 67어군의 디자인을 통해 출현에 기본."달과 Nygaard6월과 8월 그 해의 각각[10]bef 죽은 2001년 A.M. 튜링 상을 받았다.광석2002년 11월 시애틀에서 열린 OOPSLA 컨퍼런스에서 발표될 예정이었던 ACM 튜링상[11] 강연.
시뮬라 연구소는 시뮬라어의 이름을 딴 연구기관으로 2001년 개교 이후 Nygaard가 파트타임으로 근무했다.오슬로 대학의 새로운 컴퓨터 사이언스 빌딩은 달의 이름을 따서 Ole Johan Dahl's House로 명명되었으며, 대강당은 Simula로 명명되었습니다.
샘플코드
최소 프로그램
빈 컴퓨터 파일은 소스 코드의 크기로 측정되는 Simula의 최소 프로그램입니다.그것은 단지 하나의 것으로 구성되어 있다; 더미 스테이트먼트.
그러나 최소 프로그램은 빈 블록으로 더 쉽게 표시됩니다.
시작 종료
실행이 시작되고 즉시 종료됩니다.언어에는 프로그램에서 반환되는 값이 없습니다.
클래식한 Hello 월드
Simula의 Hello 월드 프로그램의 예:
OutText 시작("Hello, World!"), Outimage, End;
Simula는 대소문자를 구분하지 않습니다.
클래스, 서브클래스 및 가상 프로시저
클래스,[1]: 1.3.3, 2 서브클래스[1]: 2.2.1 및 가상 [1]: 2.2.3 프로시저를 사용한 보다 현실적인 예:
시작 클래스 글리프; 가상:절차 인쇄는 절차 인쇄; 시작 끝; 글리프 클래스 문자(c); 문자 c; 시작 절차 인쇄; OutChar(c); 끝; 글리프 클래스 라인(요소);참조(Glyph) 배열 요소; 시작 절차 인쇄; 시작 정수 i; i:= 1단계 1 상한까지(정수, 1) 작업 요소(i).인쇄; OutImage; End; 참조(Glyph) rgs; 참조(Glyph) 배열 rgs (1: 4; 주 프로그램!; rgs (3) : - 새 문자 ('b'), rgs (4) : - 새 문자 ('a'), rg : - 새 행 (rgs); rg.print; 끝;
위의 예에서는 1개의 슈퍼 클래스(Glyph)와 2개의 서브 클래스(Glyph)가 있습니다.Char
그리고.Line
). 2개의 실장이 있는 가상 순서는 1개입니다.메인 프로그램을 실행하는 것으로부터 실행이 시작됩니다.Simula는 순수 가상 프로시저를 가진 클래스가 인스턴스화될 수 있기 때문에 추상 클래스 개념이 없습니다.즉, 위의 예에서는 모든 클래스를 인스턴스화할 수 있습니다.그러나 순수 가상 프로시저를 호출하면 런타임에러가 발생합니다.
이름으로의 콜
Simula는 Jensen's Device를 쉽게 구현할 수 있도록 이름에 의한[1]: 8.2.3 콜을 지원합니다.단, 단순 파라미터의 디폴트 전송 모드는 이름으로 콜을 사용하는 ALGOL과는 달리 값에 의한 콜입니다.따라서 Jensen's Device의 소스 코드는 Simula 컴파일러에 의해 컴파일될 때 파라미터의 이름으로 호출을 지정해야 합니다.
더 간단한 예로는 다음과 같이 구현할 수 있는 합계 함수 을 들 수 있습니다.
실제 절차 시그마(k, m, n, u), 이름 k, u; 정수 k, m, n; 실제 u; 시작 실제 s; k:= m; 반면 k <= n 시작 s:= s + u; 종료; 시그마:= s; 종료;
위의 코드에서는 제어 변수(k) 및 식(u)에 대해 이름에 의한 콜이 사용됩니다.이를 통해 식에서 제어 변수를 사용할 수 있습니다.
Simula 표준에서는 for 루프의 제어 변수에 대한 특정 제한이 허용됩니다.따라서 위의 코드에서는 휴대성을 최대화하기 위해 while 루프가 사용됩니다.
다음 항목:
다음으로 다음과 같이 실장할 수 있습니다.
Z:= 시그마 (i, 1, 100, 1 / (i + a) ** 2);
시뮬레이션
Simula에는 개별 이벤트 시뮬레이션을 수행하기 위한 시뮬레이션[1]: 14.2 패키지가 포함되어 있습니다.이 시뮬레이션 패키지는 Simula의 객체 지향 기능과 Coroutine[1]: 9.2 컨셉을 기반으로 합니다.
샘, 샐리, 앤디는 옷을 사고 있다.그들은 탈의실 하나를 공유해야 한다.이들은 각각 약 12분 동안 매장을 둘러본 뒤 3분 정도만 피팅룸을 이용하고 있다.이들의 피팅룸 경험에 대한 시뮬레이션은 다음과 같습니다.
시뮬레이션 Begin Class Fitting Room, Begin Ref(헤드) 도어, Boolean inUse, Procedure 요청, Begin If InUse, Begin Wait(도어), 도어.First.Out;End;inUse:= True;End;Procedure leave;Begin inUse:= False; Activate door.첫 번째; 종료; 도어:- 새 헤드; 종료; 절차 보고서(메시지);텍스트 메시지, OutFix 시작(시간, 2, 0), OutText(": & 메시지");Out Image, End, 프로세스 클래스 담당자(pname);텍스트 pname;는 동안 진정한((12,4, 평범한)시작하세요 마세요 시작하세요);보고서(pname&"탈의실 등을 요구하고 있");fittingroom1.request, 보고서(pname&"탈의실에 들어섰다"),(정상(3,1, u)을 잡아라);fittingroom1.leave, 보고서(pname&"탈의 ro을 돌봅니다 떠났다.om".종료, 종료, 정수 u, 참조(FittingRoom) 피팅룸1; 피팅룸1:- 새 피팅룸; 새 사용자 활성화("Sam"); 새 사용자 활성화("Sally"); 새 사용자 활성화("Andy"); 보류(100); 종료;
메인 블록의 선두에는Simulation
시뮬레이션을 가능하게 합니다.시뮬레이션 패키지는 모든 블록에서 사용할 수 있으며 시뮬레이션을 수행하는 사람을 시뮬레이션할 때 중첩될 수도 있습니다.
피팅룸 객체는 큐를 사용합니다(door
피팅룸에 접근하기 위한 것입니다.피팅룸을 요청하고 사용 중인 경우 이 대기열에 대기해야 합니다.Wait (door)
누군가 탈의실을 나가면 첫 번째(있는 경우)가 큐에서 해제됩니다.Activate door.first
도어 큐에서 삭제한다( )door.First.Out
).
개인은 의 서브클래스입니다.Process
그리고 그 활동을 홀드(피팅룸에서 보내는 시간 및 매장 구경 시간)를 사용하여 설명하고 피팅룸 객체에 피팅룸 요청 및 퇴실 절차를 호출한다.
메인 프로그램은 모든 객체를 생성하고 모든 개인 객체를 활성화하여 이벤트 큐에 넣습니다.메인 프로그램은 프로그램이 종료될 때까지 시뮬레이션된 시간 100분 동안 유지됩니다.
「 」를 참조해 주세요.
메모들
- ^ a b c d e f g h i j k l m n Dahl, Ole-Johan; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Common Base Language (PDF) (Report). Norwegian Computing Center. Archived from the original on 2013-12-25. Retrieved 17 November 2020.
{{cite report}}
: CS1 유지보수: 부적합한 URL(링크) - ^ Nygaard, Kristen (1978). "The Development of the Simula Languages" (PDF).
The development of .. SIMULA I and SIMULA 67... were influenced by the design of SIMSCRIPT ...
- ^ 크리스틴 니고르와 올레-조한 달 1978년SIMULA 언어의 발달.프로그래밍 언어의 역사컴퓨터 기계 협회, 뉴욕, 뉴욕, 미국, 439-480.DOI: https://doi.org/10.1145/800025.1198392
- ^ Wong, William. "Before C, What Did You Use?". Electronic Design. Retrieved 22 May 2017.
- ^ Holmevik, Jan Rune (1994). "Compiling Simula: A historical study of technological genesis" (PDF). IEEE Annals of the History of Computing. 16 (4): 25–37. doi:10.1109/85.329756. S2CID 18148999. Retrieved 12 May 2010.
- ^ Holmevik, Jan Rune. "Compiling Simula". Oslo, Norway: Institute for Studies in Research and Higher Education. Archived from the original on 20 April 2009. Retrieved 19 April 2017.
- ^ Lehrmann Madsen, Ole (2014). "Building Safe Concurrency Abstractions". In Agha, Gul; Igarashi, Atsushi; Kobayashi, Naoki; Masuhara, Hidehiko; Matsuoka, Satoshi; Shibayama, Etsuya; Taura, Kenjiro (eds.). Concurrent Objects and Beyond. Lecture Notes in Computer Science. Vol. 8665. Berlin: Springer. p. 68. doi:10.1007/978-3-662-44471-9. ISBN 978-3-662-44471-9. S2CID 1000741.
- ^ "GNU Cim".
- ^ "Portable Simula Revisited". GitHub. Retrieved 17 June 2019.
- ^ "ACM Ole-Johan Dahl and Kristen Nygaard - Obituary". Acm.org. Archived from the original on 19 July 2011. Retrieved 14 January 2012.
- ^ "ACM Turing Award Lectures". Informatik.uni-trier.de. Retrieved 14 January 2012.
원천
- Sylvester, Peter. "IBM System 360/370 Compiler and Historical Documentation" (The Simula Standard and other historical documentation).
추가 정보
- Pooley, Rob (1987), An Introduction to Programming in Simula, Alfred Waller Ltd, ISBN 0632016116, archived from the original on 2004-09-19