]]> ]]>
Править | Обсудить | История

Oberon

Русское название:
Оберон
Дата создания:
1988
Создан под влиянием:
Повлиял на:
Парадигма:
Типизация:
Диалекты:
Реализации и версии (свернуть все | развернуть все):
Язык программирования

Oberon — язык общего назначения, созданый автором Pascal и Modula-2 Никлаусом Виртом (Niklaus Wirth) и его коллегами из Швейцарского федерального технического института г. Цюрих (ETH Zurich) в ходе разработки одноименной операционной системы для однопользовательской рабочей станции Ceres. Язык и операционная система названы именем одного из спутников планеты Уран — Оберона.

Имеет долгую историю создания, является наследником Algol 60 (1960), Pascal (1970) и Modula (1979). Oberon синтезировал более четверти века исследований Н.Вирта по методологии и языкам программирования. Ему с учениками удалось добиться точного синтеза “старых” достижений структурного и модульного программирования (представленных еще в Модуле-2) с “новыми” объектными методами (языки Simula, Smalltalk …). Вот, что говорил сам Вирт о своем “детище”: “Он (Оberon) включает в себя средства, необходимые для объектно-ориентированного программирования, сохраняя стиль Паскаля, и является результатом моего стремления к простоте без потери выразительности. В этом должна состоять сущность языка, равно пригодного как для учебной аудитории, так и для профессиональной деятельности.”

Неслучайно, что в качестве эпиграфа к сообщению о языке Oberon Н. Вирт выбрал высказывание А.Эйнштейна: “Сделай так просто, как возможно, но не проще того”. Наращивание мощи языка без его усложнения — принцип, которому неуклонно следует Н. Вирт. Если рассмотреть эволюцию соотвествующих языков программирования (Algol 60 -> Pascal -> Modula-2 -> Oberon) это становится очевидным. Каждый последующий язык существенно мощнее и совершенне предыдущего, но сложность синтаксиса (количество лексем) не только не растет, а уменьшается: 1085 -> 1012 -> 887 -> 765!

В 1992 году сотрудничество Н.Вирта с Ханспетером Мёссенбёком (Hanspeter Mössenböck) привело к добавлению в язык ряда новых средств. Новая версия получила название Оberon-2. Оберон-2 представляет собой почти правильное расширение Оберона и является фактическим стандартом языка, который поддерживается большинством современных Оберон-систем. Удивительным выглядит то, что Оберон-2 оказался проще Оберона, расширением которого является. В отношении размера определения синтаксиса так оно и есть (765 -> 726). Да и по существу нововведения Оберона-2 оформлены очень экономно.

Oberon (наряду с Modula-2, Forth, Smalltalk и Refal) включен в языковой базис разработки отечественной ОС нового поколения “Роса”.

IDE/Редакторы:

Примеры:

Hello, World!:

Пример для версий gpcp 1.3.4-JVM, gpcp 1.3.4-NET 1.1, gpcp 1.3.9-NET
MODULE Hello;
  IMPORT CPmain, Console;
BEGIN
  Console.WriteString("Hello, World!");
END Hello.

Hello, World!:

Пример для версий BlackBox Component Builder 1.5

О том как запустить программу на выполнение — см. Как запустить Блэкбокс и выполнить первую программу. Для запуска после конца описания модуля добавляется строка с коммандером и действием Hello.Do (см. скриншот). При нажатии на коммандер действие выполняется.

MODULE Hello;

IMPORT StdLog;

PROCEDURE Do*;
BEGIN
  StdLog.String("Hello World");
END Do;

END Hello.

Запуск программы в BlackBox
Запуск программы в BlackBox

Факториал:

Пример для версий BlackBox Component Builder 1.5

Используется рекурсивное определение факториала.

О том как запустить программу на выполнение — см. Как запустить Блэкбокс и выполнить первую программу.

MODULE Example;

IMPORT StdLog;

PROCEDURE factorial(n: INTEGER): LONGINT;
BEGIN
  IF n = 0 THEN
    RETURN 1;
  ELSE 
    RETURN n * factorial(n-1)
  END;
END factorial;

PROCEDURE Do*;
VAR 
  n: INTEGER;
BEGIN
  FOR n := 0 TO 16 DO
    StdLog.Int(n);
    StdLog.String('! = '); 
    StdLog.Int(factorial(n));
    StdLog.Ln; 
  END;
END Do;    

END Example.

Факториал:

Пример для версий gpcp 1.3.4-JVM, gpcp 1.3.4-NET 1.1, gpcp 1.3.9-NET

Используется рекурсивное определение факториала.

MODULE Example;

IMPORT CPmain, Console, RTS;

VAR 
  n: INTEGER;
  s: ARRAY 15 OF CHAR;

PROCEDURE factorial*(n: INTEGER): LONGINT;
BEGIN
  IF n = 0 THEN
    RETURN 1;
  ELSE 
    RETURN n * factorial(n - 1)
  END;
END factorial;

BEGIN
  FOR n := 0 TO 16 DO
    Console.WriteInt(n, 2);
    Console.WriteString('! = ');
    RTS.LongToStr(factorial(n), s);  
    Console.WriteString(s);
    Console.WriteLn;
  END;
END Example.

Числа Фибоначчи:

Пример для версий BlackBox Component Builder 1.5

Используется рекурсивное определение чисел Фибоначчи.

MODULE Fibonacci;

IMPORT StdLog;

PROCEDURE fibonacci(n: INTEGER): INTEGER;
BEGIN
    IF n < 3 THEN
        RETURN 1;
    ELSE
        RETURN fibonacci(n-1)+fibonacci(n-2)
    END;
END fibonacci;

PROCEDURE Do*;
VAR
    n: INTEGER;
BEGIN
    FOR n := 1 TO 16 DO
        StdLog.Int(fibonacci(n));
        StdLog.String(', ');
    END;
    StdLog.String('...');
    StdLog.Ln;
END Do;

END Fibonacci.
Fibonacci.Do

Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам