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

Твердыня модульных языков
Текущее время: 28 мар 2024, 12:11

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




Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 11:17 
Не в сети

Сообщения: 35
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/ )?

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 12:38 
Не в сети

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 12:41 
Не в сети

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 12:46 
Не в сети

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 13:16 
Не в сети

Сообщения: 35
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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 13:54 
Не в сети

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

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

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

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

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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 16:24 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 06 мар 2019, 19:57 
Не в сети

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

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 07 мар 2019, 16:39 
Не в сети

Сообщения: 146
Ага, разобрался.


Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Oberon-07/16
СообщениеДобавлено: 11 мар 2019, 23:20 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

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


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

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


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

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