начало
Парадигмы | Мультипарадигмальность : процедурная , императивная , структурированная , объектно-ориентированная. |
---|---|
Семья | АЛГОЛ |
Разработано | Оле-Йохан Даль |
Разработчик | Кристен Найгаард |
Впервые появился | 1962 год |
Стабильная версия | Начало 67, начало I
|
Дисциплина набора текста | Статический , именительный падеж |
Объем | Лексический |
Язык реализации | АЛГОЛ 60 (в основном; некоторые компоненты Simscript ) |
ТЫ | Unix-подобный , Windows , z/OS , TOPS-10 , MVS |
Веб-сайт | www |
Под влиянием | |
Алгол 60 , Симскрипт | |
Под влиянием | |
BETA , CLU , Eiffel , Emerald , Pascal , Smalltalk и многие другие объектно-ориентированные языки программирования . |
Simula — название двух для моделирования языков программирования , Simula I и Simula 67, разработанных в 1960-х годах в Норвежском вычислительном центре в Осло Оле -Йоханом Далем и Кристен Нюгаард . Синтаксически это приблизительный расширенный набор АЛГОЛА 60 . [1] : 1.3.1 а также на него повлиял дизайн 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. [ нужна ссылка ]
Simula считается первым объектно-ориентированным языком программирования . Как следует из названия, первая версия Simula, выпущенная в 1962 году, была разработана для моделирования ; Однако Simula 67 был разработан как язык программирования общего назначения. [3] и обеспечил основу для многих функций современных объектно-ориентированных языков.
Simula использовалась в широком спектре приложений, таких как моделирование проектов очень большой интеграции (СБИС), моделирование процессов , протоколов связи , алгоритмов и других приложений, таких как набор текста , компьютерная графика и образование . Влияние Simula часто недооценивают, и объекты типа Simula переопределяются в C++ , Object Pascal , Java , C# и многих других языках. Ученые-компьютерщики, такие как Бьерн Страуструп , создатель C++, и Джеймс Гослинг , создатель Java, признали, что Simula оказала большое влияние. [4]
История
[ редактировать ]Следующий отчет основан на историческом эссе Яна Руне Холмевика. [5] [6]
Кристен Найгаард начала писать программы компьютерного моделирования в 1957 году. Найгаард видел необходимость в лучшем способе описания неоднородности и работы системы. Чтобы продвинуться дальше в своих идеях относительно формального компьютерного языка для описания системы, Найгаард понял, что ему нужен кто-то с большими навыками компьютерного программирования , чем он. Оле-Йохан Даль решение объединить язык с АЛГОЛом 60 присоединился к его работе в январе 1962 года. Вскоре после этого было принято . К маю 1962 года были определены основные концепции моделирования языка . SIMULA I Так родился — язык программирования специального назначения для моделирования систем дискретных событий.
Кристен Найгаард была приглашена посетить компьютерную корпорацию Eckert-Mauchly в конце мая 1962 года в связи с маркетингом их нового компьютера UNIVAC 1107 . Во время того визита Найгаард представил идеи Simula Роберту Бемеру , директору по системному программированию в Univac . Бемер был большим поклонником Алгола и находил проект Simula привлекательным. Бемер также был председателем заседания второй международной конференции по обработке информации, организованной Международной федерацией обработки информации (IFIP). Он пригласил Найгаарда, который представил доклад «SIMULA – расширение ALGOL для описания сетей дискретных событий».
Норвежский вычислительный центр получил UNIVAC 1107 в августе 1963 года со значительной скидкой, на котором Даль внедрил SIMULA I по контракту с UNIVAC. Реализация была основана на компиляторе UNIVAC ALGOL 60 . SIMULA I полностью заработал на UNIVAC 1107 к январю 1965 года. В последующие несколько лет Даль и Найгаард потратили много времени на обучение Simula. Simula распространилась в несколько стран мира, а SIMULA I позже была реализована на других компьютерах, включая Burroughs B5500 и российский Урал-16 .
В 1966 году К. А. Хоар представил концепцию конструкции класса записи, которую Даль и Найгаард расширили концепцией префиксов и другими функциями, чтобы удовлетворить их требованиям к обобщенной концепции процесса. Даль и Найгаард представили свой документ об объявлениях классов и подклассов на рабочей конференции IFIP по языкам моделирования в Осло в мае 1967 года. Этот документ стал первым формальным определением Simula 67. В июне 1967 года была проведена конференция по стандартизации языка и инициированию ряд реализаций. Даль предложил объединить понятие типа и класса. Это привело к серьезным дискуссиям, и правление отклонило предложение. Simula 67 была официально стандартизирована на первом собрании группы стандартов Simula (SSG) в феврале 1968 года.
Simula оказала влияние на разработку Smalltalk и более поздних языков объектно-ориентированного программирования . Это также помогло вдохновить актерскую модель параллельных вычислений, хотя Simula поддерживает только сопрограммы , а не настоящий параллелизм . [7]
В конце шестидесятых и начале семидесятых существовало четыре основные реализации Simula:
- UNIVAC 1100 от Норвежского вычислительного центра (NCC)
- System/360 и System/370 от NCC
- CDC 3000 от Университета Осло в Кьеллере совместной компьютерной установки
- TOPS-10 Шведского национального оборонного научно-исследовательского института (FOA)
Эти реализации были портированы на широкий спектр платформ. TOPS -10 реализовал концепцию общедоступных, защищенных и частных переменных и процедур-членов, которая позже была интегрирована в Simula Standard в 1986 году.
Simula Standard 1986 — новейший стандарт, портированный на широкий спектр платформ. В основном существует четыре реализации:
наградил Даля и Найгаарда медалью Джона фон Неймана IEEE В ноябре 2001 года Институт инженеров по электротехнике и электронике «За внедрение концепций, лежащих в основе объектно-ориентированного программирования, посредством разработки и реализации SIMULA 67». 2001 года В апреле 2002 года они получили премию Тьюринга от Ассоциации вычислительной техники (ACM) со словами: «За идеи, фундаментальные для возникновения объектно-ориентированного программирования, благодаря разработке языков программирования Simula I и Simula 67». " Даль и Найгаард умерли в июне и августе того же года соответственно. [10] перед лекцией на премию ACM Тьюринга [11] его планировалось представить на конференции OOPSLA в Сиэтле в ноябре 2002 года.
Исследовательская лаборатория Simula - это исследовательский институт , названный в честь языка Simula, и Найгаард работал там неполный рабочий день с момента открытия в 2001 году. Новое здание компьютерных наук в Университете Осло названо Домом Оле Йохана Даля в честь Даля, и главный зал носит название Simula.
Пример кода
[ редактировать ]Минимальная программа
[ редактировать ]Пустой компьютерный файл — это минимальная программа в Simula, измеряемая размером исходного кода . Он состоит только из одного; пустое заявление .
Однако минимальную программу удобнее представить в виде пустого блока:
Begin End;
Он начинает выполнение и немедленно завершает его. В языке отсутствует возвращаемое значение из программы.
Классический Привет, мир!
[ редактировать ]Пример программы Hello world в Simula:
Begin OutText ("Hello, World!"); Outimage; End;
Simula нечувствительна к регистру .
Классы, подклассы и виртуальные процедуры
[ редактировать ]Более реалистичный пример с использованием классов: [1] : 1.3.3, 2 подклассы [1] : 2.2.1 и виртуальные процедуры: [1] : 2.2.3
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;
В приведенном выше примере есть один суперкласс (Glyph) с двумя подклассами ( Char
и Line
). Существует одна виртуальная процедура с двумя реализациями . Выполнение начинается с выполнения основной программы. В Simula отсутствует концепция абстрактных классов классов с чисто виртуальными процедурами , поскольку можно создавать экземпляры . Это означает, что в приведенном выше примере можно создать экземпляры всех классов. Однако вызов чисто виртуальной процедуры приведет к времени выполнения ошибке .
Звонок по имени
[ редактировать ]Simula поддерживает вызов по имени [1] : 8.2.3 так что Устройство Дженсена может быть легко реализовано. Однако режимом передачи по умолчанию для простого параметра является вызов по значению , в отличие от ALGOL , который использовал вызов по имени . Поэтому исходный код устройства Дженсена должен указывать вызов параметров по имени при компиляции компилятором Simula.
Другой гораздо более простой пример — функция суммирования. который можно реализовать следующим образом:
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;
В приведенном выше коде используется вызов по имени управляющей переменной (k) и выражения (u). Это позволяет использовать управляющую переменную в выражении.
Обратите внимание, что стандарт Simula допускает определенные ограничения на управляющую переменную. в цикле for . Поэтому приведенный выше код использует цикл while для максимальной переносимости.
Следующее:
тогда можно реализовать следующим образом:
Z:= Sigma (i, 1, 100, 1 / (i + a) ** 2);
Моделирование
[ редактировать ]Simula включает в себя симуляцию [1] : 14.2 пакет для моделирования дискретных событий . Этот пакет моделирования основан на объектно-ориентированных функциях Simula и его сопрограмме. [1] : 9.2 концепция.
Сэм, Салли и Энди покупают одежду. Они должны делить одну примерочную. Каждый из них просматривает магазин около 12 минут, а затем около трех минут пользуется исключительно примерочной, следуя обычному распределению. Моделирование их примерочной выглядит следующим образом:
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;
Главный блок имеет префикс Simulation
для включения симуляции. Пакет моделирования можно использовать в любом блоке, а симуляции можно даже вкладывать, когда моделируется кто-то, выполняющий симуляцию.
Объект примерочной использует очередь ( door
) для получения доступа в примерочную. Когда кто-то запрашивает примерочную, и она уже занята, он должен ждать в этой очереди ( Wait (door)
). Когда кто-то выходит из примерочной, первый (если есть) освобождается из очереди ( Activate door.first
) и соответственно удалены из очереди у дверей ( door.First.Out
).
Человек – это подкласс Process
и его активность описывается с помощью удержания (время просмотра магазина и время пребывания в примерочной) и вызывает процедуры в объекте примерочной для запроса и выхода из примерочной.
Основная программа создает все объекты и активирует все объекты-человека, чтобы поместить их в очередь событий. Основная программа сохраняется в течение 100 минут моделируемого времени, прежде чем программа завершится.
Примечания
[ редактировать ]- ^ Перейти обратно: а б с д и ж г час я дж к л м н Даль, Оле-Йохан ; Мирхауг, Бьёрн; Найгаард, Кристен (1970). Общий базовый язык (PDF) (отчет). Норвежский вычислительный центр. Архивировано из оригинала 25 декабря 2013 г. Проверено 17 ноября 2020 г.
{{cite report}}
: CS1 maint: неподходящий URL ( ссылка ) - ^ Найгаард, Кристен (1978). «Развитие языков моделирования» (PDF) .
На разработку .. SIMULA I и SIMULA 67... повлиял дизайн SIMSCRIPT...
- ^ Кристен Найгаард и Оле-Йохан Даль. 1978. Развитие языков SIMULA. История языков программирования. Ассоциация вычислительной техники, Нью-Йорк, штат Нью-Йорк, США, 439–480. DOI: https://doi.org/10.1145/800025.1198392.
- ^ Вонг, Уильям. «Что вы использовали до C?» . Электронный дизайн . Проверено 22 мая 2017 г.
- ^ Холмевик, Ян Руне (1994). «Компиляция Simula: историческое исследование генезиса технологий» (PDF) . IEEE Анналы истории вычислений . 16 (4): 25–37. дои : 10.1109/85.329756 . S2CID 18148999 . Проверено 12 мая 2010 г.
- ^ Хольмевик, Ян Руне. «Компиляция симуляции» . Осло, Норвегия: Институт исследований в области исследований и высшего образования. Архивировано из оригинала 20 апреля 2009 года . Проверено 19 апреля 2017 г.
- ^ Лерманн Мэдсен, Оле (2014). «Построение абстракций безопасного параллелизма». В Аге — Желтый; Игараси, Ацуши; Кобаяши, Наоки; Масухара, Хидехико; Мацуока, Сатоши; Сибаяма, Эцуя; Таура, Кенджиро (ред.). Параллельные объекты и не только Конспекты лекций по информатике. Том. 8665. Берлин: Шпрингер. п. 68. дои : 10.1007/978-3-662-44471-9 . ISBN 978-3-662-44471-9 . S2CID 1000741 .
- ^ «ГНУ Цим» .
- ^ «Возвращение к портативной симуле» . Гитхаб . Проверено 17 июня 2019 г.
- ^ «ACM Оле-Йохан Даль и Кристен Найгаард - Некролог» . Acm.org. Архивировано из оригинала 19 июля 2011 года . Проверено 14 января 2012 г.
- ^ «Лекции на премию ACM Тьюринга» . Informatik.uni-trier.de . Проверено 14 января 2012 г.
Источники
[ редактировать ]- Сильвестр, Питер. «Компилятор IBM System 360/370 и историческая документация» (Стандарт Simula и другая историческая документация).
Дальнейшее чтение
[ редактировать ]- Пули, Роб (1987), Введение в программирование в Simula , Alfred Waller Ltd, ISBN 0632016116 , заархивировано из оригинала 19 сентября 2004 г.