Редактирование: Сравнение Языков Программирования

Материал из eSyr's wiki.

Перейти к: навигация, поиск

Внимание: Вы не представились системе. Ваш IP-адрес будет записан в историю изменений этой страницы.

ПРЕДУПРЕЖДЕНИЕ: Длина этой страницы составляет 172 килобайт. Страницы, размер которых приближается к 32 КБ или превышает это значение, могут неверно отображаться в некоторых браузерах. Пожалуйста, рассмотрите вариант разбиения страницы на меньшие части.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.

Текущая версия Ваш текст
Строка 868: Строка 868:
=== ОБЕРОН И ОБЕРОН-2 ===
=== ОБЕРОН И ОБЕРОН-2 ===
-
В Обероне-2 стандартная процедура NEW используется, чтобы распределить блоки данных в свободной памяти. Нет, однако, никакого способа явно освободить распределенный блок. Взамен Оберон-среда использует сборщик мусора чтобы найти блоки, которые больше не используются и сделать их снова доступными для распределения.
+
Модуль - совокупность объявлений констант, типов, переменных и процедур вместе с последовательностью операторов, предназначенных для присваивания начальных значений переменным. Модуль представляет собой текст, который является единицей компиляции.
 +
Модуль = MODULE идент ";" [СписокИмпорта] ПоследовательностьОбъявлений
 +
[BEGIN ПоследовательностьОператоров] END идент ".".
 +
СписокИмпорта = IMPORT Импорт {"," Импорт} ";".
 +
Импорт = [идент ":="] идент.
 +
 +
Список импорта определяет имена импортируемых модулей. Последовательность операторов после символа BEGIN выполняется, когда модуль добавляется к системе (загружается). Это происходит после загрузки импортируемых модулей. Отсюда следует, тот циклический импорт модулей запрещен. Отдельные (не имеющие параметров и экспортированные) процедуры могут быть активированы из системы. Эти процедуры служат командами.
 +
MODULE Trees; (* экспорт: Tree, Node, Insert, Search, Write, Init *)
 +
IMPORT Texts, Oberon; (* экспорт только для чтения: Node.name *)
 +
 +
TYPE
 +
Tree* = POINTER TO Node;
 +
Node* = RECORD
 +
name-: POINTER TO ARRAY OF CHAR;
 +
left, right: Tree
 +
END;
 +
 +
VAR w: Texts.Writer;
 +
 +
PROCEDURE (t: Tree) Insert* (name: ARRAY OF CHAR);
 +
VAR p, father: Tree;
 +
BEGIN p := t;
 +
REPEAT father := p;
 +
IF name = p.name^ THEN RETURN END;
 +
IF name < p.name^ THEN p := p.left ELSE p := p.right END
 +
UNTIL p = NIL;
 +
NEW(p); p.left := NIL; p.right := NIL; NEW(p.name, LEN(name)+1); COPY(name, p.name^);
 +
IF name < father.name^ THEN father.left := p ELSE father.right := p END
 +
END Insert;
 +
 +
PROCEDURE (t: Tree) Search* (name: ARRAY OF CHAR): Tree;
 +
VAR p: Tree;
 +
BEGIN p := t;
 +
WHILE (p # NIL) & (name # p.name^) DO
 +
IF name < p.name^ THEN p := p.left ELSE p := p.right END
 +
END;
 +
RETURN p
 +
END Search;
 +
 +
PROCEDURE (t: Tree) Write*;
 +
BEGIN
 +
IF t.left # NIL THEN t.left.Write END;
 +
Texts.WriteString(w, t.name^); Texts.WriteLn(w); Texts.Append(Oberon.Log, w.buf);
 +
IF t.right # NIL THEN t.right.Write END
 +
END Write;
 +
 +
PROCEDURE Init* (t: Tree);
 +
BEGIN NEW(t.name, 1); t.name[0] := 0X; t.left := NIL; t.right := NIL
 +
END Init;
 +
 +
BEGIN Texts.OpenWriter(w)
 +
END Trees.
 +
 +
Загруженный модуль может вызывать команду незагруженного модуля, задавая ее имя как строку. Специфицированный модуль при этом динамически загружается и выполняется заданная команда. Динамическая загрузка позволяет пользователю запустить программу как небольшой набор базисных модулей и расширять ее, добавляя последующие модули во время выполнения по мере необходимости.
 +
В Обероне-2 стандартная процедура NEW используется, чтобы распределить блоки данных в свободной памяти. Нет, однако, никакого способа явно освободить распределенный блок. Взамен Оберон-среда использует сборщик мусора чтобы найти блоки, которые больше не используются и сделать их снова доступными для распределения.
 +
Интерфейс модуля (объявления экспортируемых объектов) извлекается из модуля так называемым смотрителем, который является отдельным инструментом среды Оберон.
;Расширение типов
;Расширение типов
Наиболее важным добавлением(от-но Modula-2) является механизм расширенных типов записи. Он позволяет конструировать новые типы на основе уже существующих и задает определенную степень совместимости между новыми и старыми типами. Предположим, что у нас имеется тип
Наиболее важным добавлением(от-но Modula-2) является механизм расширенных типов записи. Он позволяет конструировать новые типы на основе уже существующих и задает определенную степень совместимости между новыми и старыми типами. Предположим, что у нас имеется тип

Пожалуйста, обратите внимание, что все ваши добавления могут быть отредактированы или удалены другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. eSyr's_wiki:Авторское право).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

Шаблоны, использованные на этой странице:

Личные инструменты
Разделы