Оберон-клуб «ВЄДАsoft»
https://zx.oberon2.ru/forum/

Oberon-07/16
https://zx.oberon2.ru/forum/viewtopic.php?f=40&t=424
Страница 4 из 6

Автор:  akron1 [ 06 мар 2019, 11:17 ]
Заголовок сообщения:  Re: Oberon-07/16

geniepro писал(а):
Синтаксические деревья теоретически позволяют проводить весьма сложные оптимизации, правда, для реализации этих оптимизаций лучше использовать более высокоуровневые языки, чем оберон...

Теоретически, да. Но я реалистично оцениваю свои возможности. Блэкбокс и Patchouli строят дерево, но лучше бы они это не делали, если сложных оптимизаций всё равно нет и результат получается сопоставимый с моей поделкой.

geniepro писал(а):
Самые распространённые микроконтроллеры -- это 8-битные типа MCS51 или AVR, или 16-битные PIC (есть, правда, 32-битные PIC, но там ядро MIPS).
32-битные системы уже трудно назвать микроконтроллерами, в голову лишь Cortex-M приходят, а там уже конкуренция с Астробом. Ну и эти MIPS-овые PIC'и...

Понятно. 16 бит, конечно, тесно. Но поиграться с 16-битным контроллером, пожалуй, можно. Рассмотрю и такой вариант.

geniepro писал(а):
Кстати, рассматривалось ли использование сторонних бекэндов типа LLVM или QBE ( http://c9x.me/compile/ )?

Пока нет, может когда-нибудь попробую.

Автор:  Comdiv [ 06 мар 2019, 12:38 ]
Заголовок сообщения:  Re: Oberon-07/16

akron1 писал(а):
Практичней было бы взять Ваш транслятор и приспособить под свои нужды.
Достаточно было начать с кодогенерации для микроконтроллеров, а затем уже добиваться самодостаточности добавлением кодогенерации для х86. Предположу, что микроконтроллеры как конечная цель появились только для 2-й версии транслятора. Тогда становится понятно, почему так не было сделано - для начала Вы хотели применить свои уже имеющиеся наработки по 1-й версии.

Автор:  Comdiv [ 06 мар 2019, 12:41 ]
Заголовок сообщения:  Re: Oberon-07/16

akron1 писал(а):
Блэкбокс и Patchouli строят дерево, но лучше бы они это не делали
Я не видел, чтобы Блэкбокс строил дерево. Можете указать на место, куда посмотреть?

Автор:  Comdiv [ 06 мар 2019, 12:46 ]
Заголовок сообщения:  Re: Oberon-07/16

akron1 писал(а):
построением AST, которым это дерево не помогает, а скорее мешает (усложняет добавление нового бэк-энда)
AST не может усложнять добавление нового backend, так как оно никак не запрещает генерировать код из промежуточного низкоуровневого представления, которое может быть получено из AST

Автор:  akron1 [ 06 мар 2019, 13:16 ]
Заголовок сообщения:  Re: Oberon-07/16

Comdiv писал(а):
Достаточно было начать с кодогенерации для микроконтроллеров, а затем уже добиваться самодостаточности добавлением кодогенерации для х86. Предположу, что микроконтроллеры как конечная цель появились только для 2-й версии транслятора. Тогда становится понятно, почему так не было сделано - для начала Вы хотели применить свои уже имеющиеся наработки по 1-й версии.

Примерно, так.

Comdiv писал(а):
Я не видел, чтобы Блэкбокс строил дерево. Можете указать на место, куда посмотреть?


Модуль DevCompiler:

Код: "OBERON"
  1. PROCEDURE Module (source: TextModels.Reader; opt: SET; log: TextModels.Model; VAR error: BOOLEAN);
  2. VAR ext, new: BOOLEAN; p: DevCPT.Node;
  3. BEGIN
  4. DevCPM.Init(source, log);
  5. IF found THEN INCL(DevCPM.options, DevCPM.comAware) END;
  6. IF errorTrap IN opt THEN INCL(DevCPM.options, DevCPM.trap) END;
  7. IF oberon IN opt THEN INCL(DevCPM.options, DevCPM.oberon) END;
  8. DevCPT.Init(opt);
  9. DevCPB.typSize := DevCPV.TypeSize;
  10. DevCPT.processor := DevCPV.processor;
  11. DevCPP.Module(p);
  12. IF DevCPM.noerr THEN
  13. IF DevCPT.libName # "" THEN EXCL(opt, obj) END;
  14. (*
  15. IF errorTrap IN opt THEN DevCPDump.DumpTree(p) END;
  16. *)
  17. DevCPV.Init(opt); DevCPV.Allocate; DevCPT.Export(ext, new);
  18. IF DevCPM.noerr & (obj IN opt) THEN
  19. DevCPV.Module(p)
  20. END;
  21. DevCPV.Close
  22. END;


Как я понял:
DevCPP.Module(p) -- возвращает указатель на дерево (через параметр p)
DevCPV.Module(p) -- обход дерева, генерация кода

Comdiv писал(а):
AST не может усложнять добавление нового backend, так как оно никак не запрещает генерировать код из промежуточного низкоуровневого представления, которое может быть получено из AST

Можно и так, только это представление еще получить надо.

Автор:  geniepro [ 06 мар 2019, 13:54 ]
Заголовок сообщения:  Re: Oberon-07/16

akron1 писал(а):
Понятно. 16 бит, конечно, тесно. Но поиграться с 16-битным контроллером, пожалуй, можно. Рассмотрю и такой вариант.

В последние годы популярны платы Raspberry Pi, для устройств без требований к промышленной эксплуатации вполне годится, но это уже вполне себе мощный одноплатный 64-битный компьютер со "взрослыми" ОС типа линукса (даже A2 там вроде есть).

Также популярны платы семейства Arduino, там есть варианты с процессорами от 8-битного AVR до 32-битного Cortex-M, и даже ардуиноподобные платы с x86 (32-битный Intel Quark).

Из 16-битных также очень популярны MSP430.

Короче, выбор богатый.

Но есть нюанс. Для подобных микроконтроллерных систем софт, драйвера, примеры, библиотеки и тому подобное обычно поставляется в расчёте на использование языка Си, соответственно, у пользователей других языков могут быть проблемы с несовместимостью...

Автор:  SovietPony [ 06 мар 2019, 16:24 ]
Заголовок сообщения:  Re: Oberon-07/16

akron1 писал(а):
Блэкбокс и Patchouli строят дерево, но лучше бы они это не делали, если сложных оптимизаций всё равно нет и результат получается сопоставимый с моей поделкой.
Для простых оптимизаций профит от дерева тоже есть. Например для генерации по паттерну можно в любое время посмотреть как угодно далеко и назад без дополнитльных ухищерений, ведь это делается естественным образом.
Ну а строить дерево уж точно не сложнее и из дерева генерировать код можно точно так же дедовским способом, просто это происходит не напрямую из парсера.
geniepro писал(а):
Из 16-битных также очень популярны MSP430.
Хорошая простая архитектура. Я делал под них 16-битный варинт оберона-07 дедовским способом, правда на пол-пути застрал на логических & и OR, забил, а потом похоже пролюбил последнюю версию исходников когда разобрался как делать правильно. А если бы делал деревом, то было бы труднее запутаться.

Автор:  trurl [ 06 мар 2019, 19:57 ]
Заголовок сообщения:  Re: Oberon-07/16

Comdiv писал(а):
Я не видел, чтобы Блэкбокс строил дерево.

Там ведь все тот же op2.

Автор:  Comdiv [ 07 мар 2019, 16:39 ]
Заголовок сообщения:  Re: Oberon-07/16

Ага, разобрался.

Автор:  Zorko [ 11 мар 2019, 23:20 ]
Заголовок сообщения:  Re: Oberon-07/16

Антон, можно поинтересоваться, с какой целью Вы добавили в свой компилятор нестандартный тип LONGREAL? Он нужен для каких-то внутренних целей? Кстати, ведь можно было тип REAL сделать длинным (8-байтным).

Страница 4 из 6 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/