Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 21 ноя 2017, 15:58

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Amiga и модульные языки (Modula, Oberon)
СообщениеДобавлено: 26 ноя 2012, 20:16 
Не в сети
Аватара пользователя

Сообщения: 843
Откуда: Днепропетровская обл.
Недавно с интересом узнал, что в своё время для компьютера Amiga много писали на модульных языках. Существовал даже Amiga Modula & Oberon Klub (AMOK), который зарелизил более сотни с лишним флоппи дисков с исходниками на Модуле и Обероне. Всё это доступно для скачивания. Некоторые исходники оттуда я скомпилировал практически без изменений в GPCP, Ofront и BlackBox Component Builder.

Ссылка, из которой я сам узнал об AMOK

Транслятором Оберона для сборки этих исходников значится Amiga-Oberon v3.11, F. Siebert / A+L AG. В исходниках присутствуют очень интересные расширения языка Oberon-2, о которых я может чуть позже расскажу подробнее. Сейчас пока по самым верхушкам:

При описании констант разрешено использовать функции из модуля SYSTEM:
Код: "OBERON"
  1. CONST
  2. idFTXT = SYSTEM.VAL (LONGINT, 'FTXT');
  3. idCHRS = SYSTEM.VAL (LONGINT, 'CHRS');

Опции компилятора внутри комментариев (как в Turbo Pascal). Препроцессор с условными директивами:
Код: "OBERON"
  1. (* $IFNOT GarbageCollector THEN $Implementation- $END *)
  2.  
  3. (* $SET Sorted $SET Sublists $SET SaveLoad $SET MultiUser (* $SET Check *) *)
  4. (* $StackChk- $NilChk- $RangeChk- $OvflChk- $ClearVars- *)

Возможность явно разрешить компилятору не копировать при передаче параметров строковые массивы (необходимость этого расширения отпала в языке Компонентный Паскаль с появлением IN/OUT-параметров):
Код: "OBERON"
  1. PROCEDURE Request(Text: ARRAY OF CHAR); (* $CopyArrays- *)

Явное освобождение указателей (на месте авторов я бы вынес это расширение в SYSTEM.DISPOSE):
Код: "OBERON"
  1. DISPOSE (arg);
  2. DISPOSE (currentdir)

А вот ALLOCATE наоборот вынесен в SYSTEM.ALLOCATE (не разобрался чем отличается от NEW; вероятнее всего, ALLOCATE и DISPOSE — это явное выделение и освобождение памяти, а NEW — только для работы со сборщиком мусора):
Код: "OBERON"
  1. SYSTEM.ALLOCATE(gstore, GStoreSize);

Секция деинициализации модуля (также присутствует в языке КП):
Код: "OBERON"
  1.  
  2. BEGIN
  3. NEW(RD);
  4. CLOSE
  5. IF RD # NIL THEN
  6. d.FreeArgs (RD)
  7. END;
  8. END PCD.

Наряду с ключевым словом RECORD присутствует также слово STRUCT (не разобрался, чем отличается от RECORD):
Код: "OBERON"
  1. SockAddrBase *= STRUCT
  2. len *: (* UNSIGNED *) SHORTINT; (* total length *)
  3. family *: (* UNSIGNED *) SHORTINT; (* address family *)
  4. END;

Нетрассируемые указатели:
Код: "OBERON"
  1. TYPE
  2. DataPtr = UNTRACED POINTER TO ARRAY 18 OF LONGINT;
  3.  

На закуску наиболее понравившееся мне расширение: типизированные константные массивы. По-моему, этого средства сильно не хватает Оберон-языкам, что заставляет эмулировать константные массивы через кодовые процедуры, читать из файлов, ресурсов и проч. Имею сильное желание подать эту идею авторам GPCP:
Код: "OBERON"
  1. TYPE TheClocks = ARRAY 10 OF INTEGER;
  2. CONST AnimClockData = TheClocks(
  3. 00400, 00070, 00000, 00700, 00100, 00380, 00000, 00700, 03008, 00000);


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Amiga и модульные языки (Modula, Oberon)
СообщениеДобавлено: 11 фев 2013, 13:42 
Не в сети

Сообщения: 58
Там-же и исходники компилятора Oberon-A ftp://ftp.uni-stuttgart.de/pub/systems/ ... k/amok104/


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB