Парадигмы | Мультипарадигма : процедурная , императивная , структурированная , объектно-ориентированная |
---|---|
Семья | АЛГОЛ |
Разработано | Оле-Йохан Даль |
Разработчик | Кристен Найгаард |
Впервые появился | 1962 |
Стабильный выпуск | Симула 67, Симула I |
Печатная дисциплина | Статический , именительный падеж |
Сфера | Лексический |
Язык реализации | АЛГОЛ 60 (в первую очередь; некоторые компоненты Simscript ) |
Операционные системы | Unix-подобный , Windows , z / OS , TOPS-10 , MVS |
Веб-сайт | www |
Под влиянием | |
АЛГОЛ 60 , Simscript | |
Под влиянием | |
Языки объектно-ориентированного программирования |
Симула это название двух моделирования языков программирования , Симула 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 world в Simula:
Begin OutText («Привет, мир!»); Outimage ;Конец ;
В Simula регистр не учитывается .
Классы, подклассы и виртуальные процедуры [ править ]
Более реалистичный пример с использованием классов, [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
Заметки [ править ]
- ^ 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 ( ссылка )
- ^ Найгаард, Кристен (1978). «Развитие Simula языков» (PDF) .
На разработку .. SIMULA I и SIMULA 67 ... повлиял дизайн SIMSCRIPT ...
- ↑ Кристен Найгаард и Оле-Йохан Даль. 1978. Развитие языков SIMULA. История языков программирования. Ассоциация вычислительной техники, Нью-Йорк, штат Нью-Йорк, США, 439–480. DOI: https://doi.org/10.1145/800025.1198392
- ^ Вонг, Уильям. "До C, что вы использовали?" . Электронный дизайн . Дата обращения 22 мая 2017 .
- ^ Holmevik Ян Руна (1994). «Компиляция Simula: историческое исследование технологического генезиса» (PDF) . IEEE Annals of the History of Computing . 16 (4): 25–37. DOI : 10.1109 / 85.329756 . Проверено 12 мая 2010 года .
- ^ Holmevik Ян Руна. «Компиляция Simula» . Осло, Норвегия: Институт исследований в области исследований и высшего образования. Архивировано из оригинального 20 апреля 2009 года . Проверено 19 апреля 2017 года .
- ^ Lehrmann Madsen, Оле (2014). «Построение безопасных абстракций параллелизма». В Аге, Гюль; Игараси, Ацуши; Кобаяси, Наоки; Масухара, Хидехико; Мацуока, Сатоши; Шибаяма, Эцуя; Таура, Кенджиро (ред.). Параллельные объекты и за их пределами . Берлин: Springer. п. 68. DOI : 10.1007 / 978-3-662-44471-9 . ISBN 978-3-662-44471-9.
- ^ "GNU Cim" .
- ^ "Portable Simula Revisited" . GitHub . Проверено 17 июня 2019 .
- ^ "Лекции Премии Тьюринга ACM" . Informatik.uni-trier.de . Проверено 14 января 2012 года .
- ^ "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