stringtranslate.com

Симула

Simula — название двух языков программирования симуляции , Simula I и Simula 67, разработанных в 1960-х годах в Норвежском вычислительном центре в Осло Оле -Йоханом Далем и Кристен Нюгор . Синтаксически он является приблизительным надмножеством ALGOL 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 использовалась в широком спектре приложений, таких как моделирование сверхбольших интегральных схем (VLSI), моделирование процессов , протоколов связи , алгоритмов и других приложений, таких как набор текста , компьютерная графика и образование . Влияние Simula часто недооценивается, и объекты типа Simula переиспользуются в C++ , Object Pascal , Java , C# и многих других языках. Ученые-компьютерщики, такие как Бьярн Страуструп , создатель C++, и Джеймс Гослинг , создатель Java, признали Simula как основное влияние. [4]

История

Следующий отчет основан на историческом эссе Яна Руне Холмевика. [5] [6]

Кристен Нюгаард начала писать программы компьютерного моделирования в 1957 году. Нюгаард увидел необходимость в лучшем способе описания неоднородности и работы системы. Чтобы продвинуться дальше со своими идеями о формальном компьютерном языке для описания системы, Нюгаард понял, что ему нужен кто-то с большими навыками компьютерного программирования , чем у него. Оле-Йохан Даль присоединился к нему в работе в январе 1962 года. Вскоре после этого было принято решение о привязке языка к ALGOL 60. К маю 1962 года были установлены основные концепции для языка моделирования . Родился SIMULA I , специальный язык программирования для моделирования дискретно-событийных систем.

Кристен Нюгаард была приглашена посетить корпорацию Eckert–Mauchly Computer в конце мая 1962 года в связи с маркетингом их нового компьютера UNIVAC 1107. Во время этого визита Нюгаард представила идеи Simula Роберту Бемеру , директору системного программирования в Univac . Бемер был большим поклонником ALGOL и нашел проект 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 году CAR Hoare представил концепцию конструкции класса записи, которую Даль и Найгаард расширили с помощью концепции префиксов и других функций, чтобы удовлетворить свои требования к обобщенной концепции процесса. Даль и Найгаард представили свою статью о декларациях классов и подклассов на рабочей конференции IFIP по языкам моделирования в Осло в мае 1967 года. Эта статья стала первым формальным определением Simula 67. В июне 1967 года была проведена конференция по стандартизации языка и инициированию ряда реализаций. Даль предложил унифицировать концепцию типа и класса. Это привело к серьезным обсуждениям, и предложение было отклонено правлением. Simula 67 была официально стандартизирована на первом заседании Группы по стандартам Simula (SSG) в феврале 1968 года.

Страницы из справочника языка DECsystem-10 SIMULA, опубликованного Шведским национальным институтом оборонных исследований

Simula оказала влияние на разработку Smalltalk и более поздних объектно-ориентированных языков программирования. Она также помогла вдохновить модель акторов параллельных вычислений, хотя Simula поддерживает только сопрограммы , а не настоящий параллелизм . [7]

В конце шестидесятых и начале семидесятых годов существовало четыре основных реализации Simula:

Эти реализации были перенесены на широкий спектр платформ. TOPS-10 реализовал концепцию публичных, защищенных и закрытых переменных-членов и процедур, которая позже была интегрирована в Simula Standard в 1986 году.

Simula Standard 1986 — это последний стандарт, который перенесен на широкий спектр платформ. Существуют четыре основные реализации:

В ноябре 2001 года Даль и Нюгаард были награждены медалью IEEE Джона фон Неймана Институтом инженеров по электротехнике и электронике «За введение концепций, лежащих в основе объектно-ориентированного программирования, посредством разработки и реализации SIMULA 67». В апреле 2002 года они получили премию AM Turing Award 2001 от Ассоциации вычислительной техники (ACM) с пометкой: «За идеи, лежащие в основе возникновения объектно-ориентированного программирования, посредством разработки языков программирования Simula I и Simula 67». Даль и Нюгаард умерли в июне и августе того же года соответственно [10] до лекции ACM Turing Award [11] , которая должна была быть прочитана на конференции OOPSLA в Сиэтле в ноябре 2002 года.

Исследовательская лаборатория Simula — это научно-исследовательский институт , названный в честь языка Simula, и Нюгор занимал там должность на неполный рабочий день с момента открытия в 2001 году. Новое здание факультета компьютерных наук в Университете Осло названо Домом Оле Юхана Даля в честь Даля, а главная аудитория названа Simula.

Пример кода

Минимальная программа

Пустой компьютерный файл — это минимальная программа в Simula, измеряемая размером исходного кода . Он состоит только из одной вещи: фиктивного оператора .

Однако минимальную программу удобнее представить в виде пустого блока:

Начало Конец ;

Он начинает выполняться и немедленно завершается. В языке отсутствует возвращаемое значение из программы.

Классический Привет мир

Пример программы Hello world в Simula:

Начало  OutText ("Привет, мир!"); Outimage ; Конец ;

Simula нечувствительна к регистру .

Классы, подклассы и виртуальные процедуры

Более реалистичный пример с использованием классов, [1] : 1.3.3, 2  подклассов [1] : 2.2.1  и виртуальных процедур: [1] : 2.2.3 

Начало  Класса Глиф; Виртуальный : Процедура печати Есть  Процедура печати;; Начало  Конец ; Класс глифа Char (c); Символ c; Начало  процедуры print; OutChar(c); Конец ; Класс глифа Строка (элементы); Ссылка (Глиф) Элементы массива ; Начало  процедуры print; Начало  Целое i; Для i:= 1 Шаг 1 До тех пор, пока UpperBound (элементы, 1) Выполнить элементы (i).печать; OutImage; Конец ; Конец ;  Ссылка (Глиф) rg; Ссылка (Глиф) Массив rgs (1 : 4);  ! Основная программа; rgs (1):- Новый символ ('A'); rgs (2):- Новый символ ('b'); rgs (3):- Новый символ ('b'); rgs (4):- Новый символ ('a'); rg:- Новая строка (rgs); rg.печать;Конец ;

В приведенном выше примере есть один суперкласс (Glyph) с двумя подклассами ( Charи Line). Есть одна виртуальная процедура с двумя реализациями . Выполнение начинается с выполнения основной программы. Simula не поддерживает концепцию абстрактных классов , поскольку классы с чисто виртуальными процедурами могут быть инстанциированы . Это означает, что в приведенном выше примере все классы могут быть инстанциированы. Однако вызов чисто виртуальной процедуры приведет к ошибке времени выполнения .

Назвать по имени

Simula поддерживает вызов по имени [1] : 8.2.3  , поэтому устройство Дженсена может быть легко реализовано. Однако режим передачи по умолчанию для простого параметра — вызов по значению , в отличие от ALGOL , который использовал вызов по имени . Исходный код для устройства Дженсена должен поэтому указывать вызов по имени для параметров при компиляции компилятором Simula.

Другим гораздо более простым примером является функция суммирования , которая может быть реализована следующим образом:

Действительная  процедура Sigma (k, m, n, u); Имя k, u; Целое число k, m, n; Действительный u; Начало  действительного s; к:= м; Пока k <= n Выполнять  Начало s:= s + u; k:= k + 1; Конец ; Сигма:= с;Конец ;

В приведенном выше коде используется вызов по имени для управляющей переменной (k) и выражения (u). Это позволяет использовать управляющую переменную в выражении.

Обратите внимание, что стандарт Simula допускает определенные ограничения на управляющую переменную в цикле for . Поэтому приведенный выше код использует цикл while для максимальной переносимости.

Следующее:

тогда можно реализовать следующим образом:

Z:= Сигма (i, 1, 100, 1 / (i + a) ** 2);

Моделирование

Simula включает пакет моделирования [1] : 14.2  для выполнения дискретно-событийного моделирования . Этот пакет моделирования основан на объектно-ориентированных функциях Simula и его концепции сопрограмм [1] : 9.2  .

Сэм, Салли и Энди покупают одежду. Они должны делить одну примерочную. Каждый из них просматривает магазин около 12 минут, а затем пользуется примерочной исключительно около трех минут, каждый из них следует нормальному распределению. Симуляция их опыта в примерочной выглядит следующим образом:

Моделирование Начало  Класс FittingRoom; Начало  Ссылка (Головная) дверь; Логическое значение inUse; Запрос процедуры ; Начало  Если inUse Тогда  Начало Подождите (дверь); дверь.Первый.Выход; Конец ; inUse:= True ; End ; Процедура выхода; Begin inUse:= False ; Активировать дверь.First; End ; дверь:- Новая Голова; Конец ;  Отчет о процедуре (сообщение); Текстовое сообщение; Начало OutFix (Время, 2, 0); OutText (": " & сообщение); OutImage; Конец ; Класс процесса Person (pname); Текст pname; Begin  While  True  Do  Begin Удерживать (Обычно (12, 4, u)); отчет (pname & "запрашивает примерочную"); примерочная1.запрос; отчет (pname & " вошел в примерочную"); Удерживать (Обычный (3, 1, u)); примерочная1.выйти; report (pname & "покинул примерочную"); Конец ; Конец ;  Целое число u; Ссылка (Примерочная) fittingRoom1;  fittingRoom1:- Новая примерочная; Активировать  нового человека («Сэм»); Активировать  нового человека («Салли»); Активировать  нового человека («Энди»); Удерживать (100);Конец ;

Основной блок имеет префикс Simulationдля включения симуляции. Пакет симуляции может использоваться в любом блоке, и симуляции могут быть даже вложенными при симуляции кого-то, кто выполняет симуляции.

Объект примерочной использует очередь ( door) для получения доступа к примерочной. Когда кто-то запрашивает примерочную и она занята, он должен ждать в этой очереди ( Wait (door)). Когда кто-то выходит из примерочной, первый (если таковой имеется) освобождается из очереди ( Activate door.first) и соответственно удаляется из очереди на дверь ( door.First.Out).

Person является подклассом , Processа его деятельность описывается с помощью удержания (время на просмотр магазина и время, проведенное в примерочной) и вызывает процедуры в объекте примерочной для запроса и выхода из примерочной.

Основная программа создает все объекты и активирует все объекты-персоны, чтобы поместить их в очередь событий. Основная программа удерживает 100 минут смоделированного времени, прежде чем программа завершается.

Примечания

  1. ^ abcdefghijklmn Даль, Оле-Йохан ; Мирхауг, Бьёрн; Найгаард, Кристен (1970). Общий базовый язык (PDF) (отчет). Норвежский вычислительный центр. Архивировано из оригинала 25 декабря 2013 г. Проверено 17 ноября 2020 г. .{{cite report}}: CS1 maint: неподходящий URL ( ссылка )
  2. ^ Nygaard, Kristen (1978). "Развитие языков Simula" (PDF) . Разработка .. SIMULA I и SIMULA 67... была под влиянием дизайна SIMSCRIPT ...
  3. ^ Кристен Нюгаард и Оле-Йохан Даль. 1978. Развитие языков SIMULA. История языков программирования. Ассоциация вычислительной техники, Нью-Йорк, США, 439–480. DOI:https://doi.org/10.1145/800025.1198392
  4. ^ Вонг, Уильям. «До C, что вы использовали?». Electronic Design . Получено 22 мая 2017 г.
  5. ^ Холмевик, Ян Руне (1994). «Составление Simula: историческое исследование технологического генезиса» (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. doi :10.1109/85.329756. S2CID  18148999 . Получено 12 мая 2010 .
  6. ^ Холмевик, Ян Руне. «Составление Simula». Осло, Норвегия: Институт исследований в области исследований и высшего образования. Архивировано из оригинала 20 апреля 2009 года . Получено 19 апреля 2017 года .
  7. ^ Лерманн Мэдсен, Оле (2014). «Построение абстракций безопасного параллелизма». Ин Ага, Гюль; Игараси, Ацуши; Кобаяши, Наоки; Масухара, Хидехико; Мацуока, Сатоши; Сибаяма, Эцуя; Таура, Кенджиро (ред.). Параллельные объекты и не только . Конспекты лекций по информатике. Том. 8665. Берлин: Шпрингер. п. 68. дои : 10.1007/978-3-662-44471-9. ISBN 978-3-662-44471-9. S2CID  1000741.
  8. ^ "GNU Cim".
  9. ^ "Portable Simula Revisited". GitHub . Получено 17 июня 2019 г.
  10. ^ "ACM Ole-Johan Dahl and Kristen Nygaard - Obituary". Acm.org. Архивировано из оригинала 19 июля 2011 года . Получено 14 января 2012 года .
  11. ^ "ACM Turing Award Lectures". Informatik.uni-trier.de . Получено 14 января 2012 г. .

Источники

Дальнейшее чтение

Внешние ссылки