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-NETMODULE 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 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
]]>