начало
![]() | |
Парадигмы | Мультипарадигмальность : процедурная , императивная , структурированная , объектно-ориентированная. |
---|---|
Семья | АЛГОЛ |
Разработано | Оле-Йохан Даль |
Разработчик | Кристен Найгаард |
Впервые появился | 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 года.
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Pages_from_DECsystem-10_SIMULA_Language_Handbook.jpg/150px-Pages_from_DECsystem-10_SIMULA_Language_Handbook.jpg)
Simula оказала влияние на разработку Smalltalk , а затем и объектно-ориентированных языков программирования. Это также помогло вдохновить актерскую модель параллельных вычислений, хотя Simula поддерживает только сопрограммы , а не настоящий параллелизм . [7]
В конце шестидесятых и начале семидесятых существовало четыре основные реализации Simula:
- UNIVAC 1100 от Норвежского вычислительного центра (NCC)
- System/360 и System/370 от NCC
- CDC 3000 от Университета Осло в Кьеллере совместной компьютерной установки
- TOPS-10 Шведского национального оборонного научно-исследовательского института (FOA)
Эти реализации были портированы на широкий спектр платформ. TOPS -10 реализовал концепцию общедоступных, защищенных и частных переменных и процедур-членов, которая позже была интегрирована в стандарт Simula в 1986 году.
Simula Standard 1986 — новейший стандарт, портированный на широкий спектр платформ. В основном существует четыре реализации:
наградил Даля и Найгаарда медалью Джона фон Неймана IEEE В ноябре 2001 года Институт инженеров по электротехнике и электронике «За внедрение концепций, лежащих в основе объектно-ориентированного программирования, посредством разработки и реализации SIMULA 67». В апреле 2002 года они получили премию Тьюринга 2001 года от Ассоциации вычислительной техники (ACM) со словами: «За идеи, фундаментальные для возникновения объектно-ориентированного программирования, благодаря разработке языков программирования Simula I и Simula 67». " Даль и Найгаард умерли в июне и августе того же года соответственно. [10] перед лекцией на премию ACM Тьюринга [11] его планировалось представить на конференции OOPSLA в Сиэтле в ноябре 2002 года.
Исследовательская лаборатория Simula - это исследовательский институт , названный в честь языка Simula, и Найгаард работал там неполный рабочий день с момента открытия в 2001 году. Новое здание информатики в Университете Осло названо Домом Оле Йохана Даля в честь Даля, и главный зал носит название Simula.
Пример кода [ править ]
Минимальная программа [ править ]
Пустой компьютерный файл — это минимальная программа в Simula, измеряемая размером исходного кода . Он состоит только из одного; пустое заявление .
Однако минимальную программу удобнее представить в виде пустого блока:
Начало Конец ;
Он начинает выполняться и сразу же завершается. В языке отсутствует возвращаемое значение из программы.
Классический Привет, мир [ править ]
Пример программы Hello world в Simula:
Начать OutText («Привет, мир!»); Исходное изображение ; Конец ;
Simula нечувствительна к регистру .
Классы, подклассы и виртуальные процедуры [ править ]
Более реалистичный пример с использованием классов: [1] : 1.3.3, 2 подклассы [1] : 2.2.1 и виртуальные процедуры: [1] : 2.2.3
Начать класса глиф ; Виртуальный : процедуры печать — это печать процедуры ;; Начало Конец ; глифа Класс Char (c); Персонаж С; Начать процедуру печати; OutChar(с); Конец ; глифа Линия класса (элементы); Ref (Glyph) Элементы массива ; Начать процедуру печати; Начать целое число i; Для i:= 1 Шаг 1 До UpperBound (elements, 1) Do элементы (i).print; Выходное изображение; Конец ; Конец ; Ссылка (Глиф) рг; Ref (Glyph) Массив rgs (1:4); ! Основная программа; rgs (1): - Новый символ («А»); rgs(2):- Новый Char('b'); rgs (3): — Новый символ («b»); rgs (4): - Новый Char('a'); rg:- Новая линия (rgs); рг.принт; Конец ;
В приведенном выше примере есть один суперкласс (Glyph) с двумя подклассами ( Char
и Line
). Существует одна виртуальная процедура с двумя реализациями . Выполнение начинается с выполнения основной программы. В Simula отсутствует концепция абстрактных классов классов с чисто виртуальными процедурами , поскольку можно создавать экземпляры . Это означает, что в приведенном выше примере можно создать экземпляры всех классов. Однако вызов чисто виртуальной процедуры приведет к времени выполнения ошибке .
Звонить по имени [ править ]
Simula поддерживает вызов по имени [1] : 8.2.3 так что Устройство Дженсена может быть легко реализовано. Однако режимом передачи по умолчанию для простого параметра является вызов по значению , в отличие от ALGOL , который использовал вызов по имени . Поэтому исходный код устройства Дженсена должен указывать вызов параметров по имени при компиляции компилятором Simula.
Другой гораздо более простой пример — функция суммирования. который можно реализовать следующим образом:
Реальная процедура Сигма (k, m, n, u); Имя к, ю; Целое число k, m, n; Настоящий ты; Начать Real s; к:= м; Пока k <= n Do Begin s:= s + u; к:= к + 1; Конец ; Сигма:= с; Конец ;
В приведенном выше коде используется вызов по имени управляющей переменной (k) и выражения (u). Это позволяет использовать управляющую переменную в выражении.
Обратите внимание, что стандарт Simula допускает определенные ограничения на управляющую переменную. в цикле for . Поэтому приведенный выше код использует цикл while для максимальной переносимости.
Следующее:
тогда можно реализовать следующим образом:
Z:= Сигма (i, 1, 100, 1/(i + a)**2);
Моделирование [ править ]
Simula включает в себя симуляцию [1] : 14.2 пакет для моделирования дискретных событий . Этот пакет моделирования основан на объектно-ориентированных функциях Simula и его сопрограмме. [1] : 9.2 концепция.
Сэм, Салли и Энди покупают одежду. Они должны делить одну примерочную. Каждый из них просматривает магазин около 12 минут, а затем около трех минут пользуется исключительно примерочной, следуя обычному распределению. Моделирование их примерочной выглядит следующим образом:
моделирования начала Класс FittingRoom; Начать Ref (Голова) дверь; Логическое значение inUse; процедуры Запрос ; Начать , если inUse , затем начать Подожди (дверь); дверь.Первый.Выход; Конец ; inUse:= Истина ; Конец ; Процедура отпуска; Начинать inUse:= Ложь ; Активировать дверь. Сначала; Конец ; дверь: - Новая голова; Конец ; Отчет о процедуре (сообщение); Текстовое сообщение; Начинать OutFix (Время, 2, 0); OutText (": " & сообщение); Выходное изображение; Конец ; процесса Класс Человек (pname); Текстовое имя; Начни , пока правда начни , Удерживать (Нормальный (12, 4, u)); отчет (pname & «запрашивает примерочную»); примерочная1.запрос; отчет (pname&"зашел в примерочную"); Удерживать (Нормальный (3, 1, u)); примерочная1.уйти; отчет (pname & «покинул примерочную»); Конец ; Конец ; Целое число u; Ref (FittingRoom) fitingRoom1; FittingRoom1: — Новая Примерочная; Активировать нового человека («Сэм»); Активировать нового человека («Салли»); Активировать нового человека («Энди»); Удерживать (100); Конец ;
Главный блок имеет префикс 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 г.