Си́мула-67 (Simula 67) — язык программирования общего назначения, разработанный в конце 1960-х годов сотрудниками Норвежского вычислительного центра (Осло) Кристеном Нюгором и Оле-Йоханом Далем для моделирования сложных систем.
Simula 67 | |
---|---|
Семантика | объектно-ориентированный |
Класс языка | язык программирования, simulation language[вд] и объектно-ориентированный |
Тип исполнения | компиляция |
Появился в | 1967 |
Автор | Кристен Нюгор и Оле-Йохан Даль |
Разработчик | Кристен Нюгорд |
Выпуск |
|
Система типов | статическая |
Основные реализации | Cim |
Испытал влияние | Algol-60 |
Повлиял на | C++, BETA |
ОС | Unix-подобная операционная система, Windows, z/OS, TOPS-10 и MVS |
Медиафайлы на Викискладе |
Симула традиционно не считается объектно-ориентированным языком в каноническом смысле этого слова, в частности, создатель языка Smalltalk Алан Кэй имел в виду под этим термином семантику акторов, впервые реализованную в языке Плэнер Карла Хьюитта, а не расширение алголоподобных языков «объектной» нотацией[2].
Стал первым языком со встроенной поддержкой основных синтаксических соглашений, принятых в современных языках объектно-ориентированного программирования. Считается, что язык в значительной степени опередил время, и программисты 1960-х годов оказались не готовы воспринять ценности языка, в связи с чем он не выдержал конкуренции с другими языками программирования. Прохладному отношению к языку способствовало и то обстоятельство, что его реализация была весьма неэффективна, не в последнюю очередь из-за использования сборки мусора.
Тем не менее, этот язык активно использовался в образовательном процессе в высших учебных заведениях, особенно в Скандинавии; о влиянии Симулы на разработку им C++ отмечал его автор — Страуструп (в том числе в книге «Дизайн и эволюция C++»).
В современной терминологии язык можно охарактеризовать как объектное расширение Алгола 60. Конструкции языка очень сходны с аналогичными в современных объектно-ориентированных языках.
Примеры
правитьМинимальная программа
правитьBegin End;
Hello, World
правитьПрограмма «Hello, World»:
Begin OutText ("Hello, World!"); Outimage; End;
Классы, подклассы и виртуальные процедуры
правитьBegin Class Glyph; Virtual: Procedure print Is Procedure print;; Begin End; Glyph Class Char (c); Character c; Begin Procedure print; OutChar(c); End; Glyph Class Line (elements); Ref (Glyph) Array elements; Begin Procedure print; Begin Integer i; For i:= 1 Step 1 Until UpperBound (elements, 1) Do elements (i).print; OutImage; End; End; Ref (Glyph) rg; Ref (Glyph) Array rgs (1 : 4); ! Main program; rgs (1):- New Char ('A'); rgs (2):- New Char ('b'); rgs (3):- New Char ('b'); rgs (4):- New Char ('a'); rg:- New Line (rgs); rg.print; End;
Real Procedure Sigma (k, m, n, u); Name k, u; Integer k, m, n; Real u; Begin Real s; k:= m; While k <= n Do Begin s:= s + u; k:= k + 1; End; Sigma:= s; End;
Симуляция
правитьSimulation Begin Class FittingRoom; Begin Ref (Head) door; Boolean inUse; Procedure request; Begin If inUse Then Begin Wait (door); door.First.Out; End; inUse:= True; End; Procedure leave; Begin inUse:= False; Activate door.First; End; door:- New Head; End; Procedure report (message); Text message; Begin OutFix (Time, 2, 0); OutText (": " & message); OutImage; End; Process Class Person (pname); Text pname; Begin While True Do Begin Hold (Normal (12, 4, u)); report (pname & " is requesting the fitting room"); fittingroom1.request; report (pname & " has entered the fitting room"); Hold (Normal (3, 1, u)); fittingroom1.leave; report (pname & " has left the fitting room"); End; End; Integer u; Ref (FittingRoom) fittingRoom1; fittingRoom1:- New FittingRoom; Activate New Person ("Sam"); Activate New Person ("Sally"); Activate New Person ("Andy"); Hold (100); End;
Примечания
править- ↑ https://portablesimula.github.io/github.io/
- ↑ Alan Kay's Definition Of Object Oriented Programming (англ.). Дата обращения: 17 июля 2024. Архивировано 26 января 2018 года. «I invented the term object-oriented, and I can tell you that C++ wasn’t what I had in mind»
Ссылки
править- heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html — Страничка Кристена Нюгора (Архив (англ.)).
- www.iro.umontreal.ca/~simula — раздел посвящённый Симуле-67 на сайте Монреальского университета.
- staff.um.edu.mt/jskl1/talk.html — Introduction To OOP In Simula
- www.volny.cz/petr-novak/cim — Cim 3.33 for MS Windows — компилятор Симулы c GPL лицензией.