Из Википедии, бесплатной энциклопедии
  (Перенаправлено с Simula67 )
Перейти к навигации Перейти к поиску

Симула это название двух моделирования языков программирования , Симула I и Simula 67, разработанный в 1960 - е годы в Норвежском вычислительном центре в Осло , по Ole-Johan Dahl и Нюгорд . Синтаксический , это довольно верная надстройка из Алгола 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 году. Найгаард увидел потребность в лучшем способе описания неоднородности и работы системы. Чтобы развить свои идеи о формальном компьютерном языке для описания системы, Найгаард понял, что ему нужен кто-то с большими навыками компьютерного программирования, чем у него. Оле-Йохан Даль присоединился к нему в его работе в январе 1962 года. Вскоре после этого было принято решение связать язык с АЛГОЛОМ 60 . К маю 1962 г. были определены основные концепции языка моделирования . SIMULA I родился язык программирования специального назначения для моделирования дискретных систем событий.

Кристен Найгаард была приглашена в конце мая 1962 года в корпорацию Eckert – Mauchly Computer Corporation в связи с маркетингом их нового компьютера UNIVAC 1107 . Во время этого визита Найгаард представил идеи Simula Роберту Бемеру , директору по системному программированию Univac . Бемер был большим поклонником Алгола и нашел проект Simula привлекательным. Бемер также был председателем сессии на второй международной конференции по обработке информации, организованной Международной федерацией обработки информации (IFIP). Он пригласил Найгаарда, который представил доклад «SIMULA - Расширение Алгола для описания сетей с дискретными событиями».

Норвежский вычислительный центр получил 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 реализована концепция общественности, защищен, и частные переменные и процедуры членов, которые впоследствии были интегрированы в Симуле 87. Симулу 87 являются последним стандартом и портирован на широкий спектр платформ. В основном есть четыре реализации:

  • Simula AS
  • Лунд Симула
  • GNU Cim [8]
  • Возвращение к Portable Simula [9]

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

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

Пример кода [ править ]

Минимальная программа [ править ]

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

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

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

Он начинает выполнение и сразу же завершается. В языке отсутствует какое-либо значение, возвращаемое программой.

Классический Привет мир [ править ]

Пример всемирной программы Hello в Симула:

Begin  OutText («Привет, мир!»); Outimage ;Конец ;

Симула это не чувствителен к регистру .

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

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

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

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

Звоните по имени [ править ]

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

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

Реальная  процедура сигма (k, m, n, u); Имя k, u; Целое число k, m, n; Настоящее u;Begin  Real s; k: = m; В то время как к <= п Do  Begin S: = s + и; к: = к + 1; Конец ; Сигма: = s;Конец ;

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

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

Следующие:

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

Z: = Sigma (i, 1, 100, 1 / (i + a) ** 2);

Моделирование [ править ]

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

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

Начать моделирование Класс FittingRoom; Begin  Ref (Head) дверь; Boolean inUse; Запрос процедуры ; Начать,  если в использовании, затем  начать Подожди (дверь); door.First.Out; Конец ; inUse: = True ; Конец ; Процедурный отпуск; Начать использовать: = False ; Активируйте door.First; Конец ; дверь: - Новая голова; Конец ;  Отчет о процедуре (сообщение); Текстовое сообщение; Начинать OutFix (Время, 2, 0); OutText (":" & сообщение); OutImage; Конец ;  Process Class Person (pname); Текст pname; Начало  Хотя  Правда  ли  начать Удерживать (Нормальный (12, 4, u)); отчет (pname & "запрашивает примерочную"); примерочная1.request; отчет (pname & "зашел в примерочную"); Удерживать (Нормальный (3, 1, u)); примерочная1.leave; отчет (pname & "покинул примерочную"); Конец ; Конец ;  Целое число u; Ref (FittingRoom) FittingRoom1;  FittingRoom1: - Новая Примерочная; Активировать  нового человека («Сэм»); Активировать  нового человека («Салли»); Активировать  нового человека («Энди»); Удерживайте (100);Конец ;

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

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

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

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

См. Также [ править ]

  • BETA (язык программирования) , современный преемник Simula

Заметки [ править ]

  1. ^ a b c d e f g h i j k l m n Даль, Оле-Йохан ; Myhrhaug, Bjørn; Найгаард, Кристен (1970). Общий базовый язык (PDF) (Отчет). Норвежский вычислительный центр. Архивировано 25 декабря 2013 года . Дата обращения 17 ноября 2020 .CS1 maint: неподходящий URL ( ссылка )
  2. ^ Найгаард, Кристен (1978). «Развитие Simula языков» (PDF) . На разработку .. SIMULA I и SIMULA 67 ... повлиял дизайн SIMSCRIPT ...
  3. Кристен Найгаард и Оле-Йохан Даль. 1978. Развитие языков SIMULA. История языков программирования. Ассоциация вычислительной техники, Нью-Йорк, штат Нью-Йорк, США, 439–480. DOI: https://doi.org/10.1145/800025.1198392
  4. ^ Вонг, Уильям. "До C, что вы использовали?" . Электронный дизайн . Дата обращения 22 мая 2017 .
  5. ^ Holmevik Ян Руна (1994). «Компиляция Simula: историческое исследование технологического генезиса» (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. DOI : 10.1109 / 85.329756 . Проверено 12 мая 2010 года .
  6. ^ Holmevik Ян Руна. «Компиляция Simula» . Осло, Норвегия: Институт исследований в области исследований и высшего образования. Архивировано из оригинального 20 апреля 2009 года . Проверено 19 апреля 2017 года .
  7. ^ Lehrmann Madsen, Оле (2014). «Построение безопасных абстракций параллелизма». В Аге, Гюль; Игараси, Ацуши; Кобаяси, Наоки; Масухара, Хидехико; Мацуока, Сатоши; Шибаяма, Эцуя; Таура, Кенджиро (ред.). Параллельные объекты и за их пределами . Берлин: Springer. п. 68. DOI : 10.1007 / 978-3-662-44471-9 . ISBN 978-3-662-44471-9.
  8. ^ "GNU Cim" .
  9. ^ "Portable Simula Revisited" . GitHub . Проверено 17 июня 2019 .
  10. ^ "Лекции Премии Тьюринга ACM" . Informatik.uni-trier.de . Проверено 14 января 2012 года .
  11. ^ "ACM Оле-Йохан Даль и Кристен Найгаард - Некролог" . Acm.org. Архивировано из оригинального 19 июля 2011 года . Проверено 14 января 2012 года .

Источники [ править ]

  • Сильвестр, Питер. «Компилятор IBM System 360/370 и историческая документация» (стандарт Simula и другая историческая документация).

Дальнейшее чтение [ править ]

  • Пули, Роб (1987), Введение в программирование в Simula , Alfred Waller Ltd, ISBN 0632016116, Архивируются с оригинала на 2004-09-19

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Возвращение к Portable Simula на GitHub