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

Твердыня модульных языков
Текущее время: 16 дек 2019, 14:46

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Константные массивы
СообщениеДобавлено: 05 мар 2013, 08:48 
Не в сети
Аватара пользователя

Сообщения: 988
Откуда: Днепропетровская обл.
Вдобавок к "правильному" FOR мне хотелось бы видеть в Обероне (в XDev) константные массивы, которые являются незаменимой возможностью простого включения в модули ресурсов и статичных данных, вместо предлагаемого Оберон-парадигмой хранения данных в виде кода и присваивания их неконстатному массиву:
Код: "OBERON"
  1. VAR m: ARRAY 100 OF INTEGER;
  2. BEGIN
  3. m[0] := 10;
  4. m[1] := 50;
  5. ...
  6. m[98] := 100;
  7. m[99] := 500;

Но сейчас из всех стандартов Оберона константные массивы имеются только в Amiga-Oberon и Active Oberon.

Что же теперь предоставляют нам в этом смысле другие Оберон-реализации? Ну можно конечно же немножечко изголиться:
Код: "OBERON"
  1. InitArray(adr, "0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F");
  2. InitArray(adr, "742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000");
  3. InitArray(adr, "5DCF9F8719AEF1D419AEF1D419AEF1D497B1E2D413AEF1D4E58EE3D418AEF1D4");

(что не решает поставленную проблему никак, только скрашивает). Остаётся способ хранить данные системными (непереносимыми) средствами. Ну вот, например, как это можно сделать в BlackBox:
Код: "OBERON"
  1. IMPORT SYSTEM;
  2.  
  3. PROCEDURE [code] rsrc1
  4. 01H, 02H, 03H, 04H, 05H, 06H, 07H, 0FFH, 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FFH,
  5. 01H, 02H, 03H, 04H, 05H, 06H, 07H, 0FFH, 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FFH,
  6. ...
  7. 0FH, 0EH, 0DH, 0CH, 0BH, 0AH, 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H, 01H, 00H;
  8.  
  9. PROCEDURE Rsrc1; BEGIN rsrc1 END Rsrc1;
  10.  
  11. PROCEDURE Do* ;
  12. VAR
  13. i: INTEGER; x: BYTE;
  14. BEGIN
  15. FOR i := 0 TO Rsrc1_size - 1 DO SYSTEM.GET(SYSTEM.ADR(Rsrc1) + i + Proc_offset, x);
  16. StdLog.Char(" "); StdLog.IntForm(x MOD 256, 16, 2, "0", FALSE);
  17. END;
  18. END Do;

Оберон позиционируется как хорошее средство разработки для микроконтроллеров (уточню: для 32-битных и выше микроконтроллеров), но как быть с этим моментом? Читать ресурсы предлагается из файлов. Но ведь в контроллере даже может не быть реализованной файловой системы! Остаётся двойное хранение данных — как кода, и потом присваивание и хранение уже в неконстантном массиве, что неэффективно. А если объём данных большой, а памяти мало? Нужно же экономить ресурсы.

Внешние (подгружаемые из файлов) ресурсы, а также двойное хранение данных в виде кода и присваивание: a) медленнее в работе; b) мало подходит для использования во встроенке, например, в регуляторе температуры аквариума или медицинском приборе для снятия кардиограммы, где весь софт прошит в микросхему ПЗУ.

Сейчас при работе в XDev для включения ресурсов в модули я использую средства языка Си. Тут подумалось, что если мы хотим получить ревизию Оберона с поддержкой символа "_" в идентификаторах, "правильным" FOR и с константными массивами, а, возможно, и с другими доработками, то нужно придумать ей какое-то отличительное имя и позиционировать как новый диалект (ревизию) Оберона.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Константные массивы
СообщениеДобавлено: 05 мар 2013, 09:14 
Не в сети

Сообщения: 74
Zorko писал(а):
с поддержкой символа "_" в идентификаторах
Это тоже есть в Active Oberon.
Вообще, компилятор Active Oberon последней ревизии (называется Fox, - полностью переписанный "с нуля" некоторое время назад) был изначально задуман как легко поддерживаемый, модифицируемый и кросс-платформенный компилятор (по сравнению с его предшественником - PACO). Правда, обещанных кодогенераторов под все мыслимые и немыслимые платформы не видно и поныне, но интерфейс кодогенерации из промежуточного представления можно изучить и написать нужный кодогенератор, при желании :)


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Константные массивы
СообщениеДобавлено: 05 мар 2013, 09:51 
Не в сети
Аватара пользователя

Сообщения: 988
Откуда: Днепропетровская обл.
Я иду по пути наименьшего сопротивления. Если бы для Fox хотя бы кодогенератор в Си был... Не говоря уж о LLVM или GCC.
Да и в качестве основы для "правильного" Оберона я взял бы скорее Оберон-2/КП, чем AO. Возможно, это дело вкуса или пристрастий.


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

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


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
© VEDAsoft Oberon Club