Сообщения: 1019 Откуда: Днепропетровская обл.
|
Вдобавок к "правильному" FOR мне хотелось бы видеть в Обероне (в XDev) константные массивы, которые являются незаменимой возможностью простого включения в модули ресурсов и статичных данных, вместо предлагаемого Оберон-парадигмой хранения данных в виде кода и присваивания их неконстатному массиву: Код: "OBERON" VAR m: ARRAY 100 OF INTEGER; BEGIN m[0] := 10; m[1] := 50; ... m[98] := 100; m[99] := 500;
Но сейчас из всех стандартов Оберона константные массивы имеются только в Amiga-Oberon и Active Oberon. Что же теперь предоставляют нам в этом смысле другие Оберон-реализации? Ну можно конечно же немножечко изголиться: Код: "OBERON" InitArray(adr, "0E1FBA0E00B409CD21B8014CCD21546869732070726F6772616D2063616E6E6F"); InitArray(adr, "742062652072756E20696E20444F53206D6F64652E0D0D0A2400000000000000"); InitArray(adr, "5DCF9F8719AEF1D419AEF1D419AEF1D497B1E2D413AEF1D4E58EE3D418AEF1D4");
(что не решает поставленную проблему никак, только скрашивает). Остаётся способ хранить данные системными (непереносимыми) средствами. Ну вот, например, как это можно сделать в BlackBox: Код: "OBERON" IMPORT SYSTEM; PROCEDURE [code] rsrc1 01H, 02H, 03H, 04H, 05H, 06H, 07H, 0FFH, 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FFH, 01H, 02H, 03H, 04H, 05H, 06H, 07H, 0FFH, 08H, 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FFH, ... 0FH, 0EH, 0DH, 0CH, 0BH, 0AH, 09H, 08H, 07H, 06H, 05H, 04H, 03H, 02H, 01H, 00H; PROCEDURE Rsrc1; BEGIN rsrc1 END Rsrc1; PROCEDURE Do* ; VAR i: INTEGER; x: BYTE; BEGIN FOR i := 0 TO Rsrc1_size - 1 DO SYSTEM.GET(SYSTEM.ADR(Rsrc1) + i + Proc_offset, x); StdLog.Char(" "); StdLog.IntForm(x MOD 256, 16, 2, "0", FALSE); END; END Do;
Оберон позиционируется как хорошее средство разработки для микроконтроллеров (уточню: для 32-битных и выше микроконтроллеров), но как быть с этим моментом? Читать ресурсы предлагается из файлов. Но ведь в контроллере даже может не быть реализованной файловой системы! Остаётся двойное хранение данных — как кода, и потом присваивание и хранение уже в неконстантном массиве, что неэффективно. А если объём данных большой, а памяти мало? Нужно же экономить ресурсы. Внешние (подгружаемые из файлов) ресурсы, а также двойное хранение данных в виде кода и присваивание: a) медленнее в работе; b) мало подходит для использования во встроенке, например, в регуляторе температуры аквариума или медицинском приборе для снятия кардиограммы, где весь софт прошит в микросхему ПЗУ. Сейчас при работе в XDev для включения ресурсов в модули я использую средства языка Си. Тут подумалось, что если мы хотим получить ревизию Оберона с поддержкой символа "_" в идентификаторах, "правильным" FOR и с константными массивами, а, возможно, и с другими доработками, то нужно придумать ей какое-то отличительное имя и позиционировать как новый диалект (ревизию) Оберона.
|
|