Симула
Си́мула-67 (Simula 67) — язык программирования общего назначения, разработанный в конце 1960-х годов сотрудниками Норвежского вычислительного центра (Осло) Кристеном Нюгором и Оле-Йоханом Далем для моделирования сложных систем.

Симула традиционно не считается объектно-ориентированным языком в каноническом смысле этого слова, в частности, создатель языка Smalltalk Алан Кэй имел в виду под этим термином семантику акторов, впервые реализованную в языке Плэнер Карла Хьюитта, а не расширение алголоподобных языков «объектной» нотацией.

Стал первым языком со встроенной поддержкой основных синтаксических соглашений, принятых в современных языках объектно-ориентированного программирования. Считается, что язык в значительной степени опередил время, и программисты 1960-х годов оказались не готовы воспринять ценности языка, в связи с чем он не выдержал конкуренции с другими языками программирования. Прохладному отношению к языку способствовало и то обстоятельство, что его реализация была весьма неэффективна, не в последнюю очередь из-за использования сборки мусора.

Тем не менее, этот язык активно использовался в образовательном процессе в высших учебных заведениях, особенно в Скандинавии; о влиянии Симулы на разработку им C++ отмечал его автор — Страуструп (в том числе в книге «Дизайн и эволюция C++»).

В современной терминологии язык можно охарактеризовать как объектное расширение Алгола 60. Конструкции языка очень сходны с аналогичными в современных объектно-ориентированных языках.

Примеры

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

Hello, World 
Программа «Hello, World»:
 Begin
    OutText ("Hello, World!");
    Outimage;
 End;

Классы, подклассы и виртуальные процедуры 
 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;

Вызов по имени 
Вызов по имени
 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;

Симуляция 
 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;

Примечания

Ссылки 
 heim.ifi.uio.no/~kristen/FORSKNINGSDOK_MAPPE/F_OO_start.html — Страничка Кристена Нюгора (Архив).
 www.iro.umontreal.ca/~simula — раздел посвящённый Симуле-67 на сайте Монреальского университета.
 staff.um.edu.mt/jskl1/talk.html — Introduction To OOP In Simula
 www.volny.cz/petr-novak/cim — Cim 3.33 for MS Windows — компилятор Симулы c GPL лицензией.

Объектно-ориентированные языки программирования
Свободные компиляторы и интерпретаторы
Языки программирования семейства Алгола