Автор Тема: Семейство Oberon и кодогенерация для LLVM  (Прочитано 6305 раз)

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Натолкнулся сегодня в интернете очередной раз на упоминание о LLVM и стал ходить вглубь по разным ссылкам. Решил не продолжать тему Oberon07 LLVM frontend, а создать новую.

В связи с тем, что в последнее время появился интерес к использованию различных платформ, отличных от x86, при том, что имеющиеся реализации Оберона в основном для x86, то стоит попробовать кодогенерацию LLVM как путь к новым платформам.

У сородича Оберона - Объектного Паскаля - имеются проекты по кодогенерации для LLVM.

Один из них - Object Pascal compiler for LLVM от бразильского ВУЗа IESB

Среди кода я обнаружил и довольно любопытные PDF документы, хотя и на португальском:
http://llvm-pascal.googlecode.com/svn/trunk/Doc/PPT%20LLVM-Pascal.pdf
http://llvm-pascal.googlecode.com/svn/trunk/Doc/TCC%20LLVM-Pascal.pdf

Наиболее вероятные варианты для реализации кодогенерации LLVM в порядке убывания: Oberon-07, Oberon-2, Component Pascal.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #1 : Июль 08, 2013, 12:13:13 pm »
Наиболее вероятен как раз последний (Component Pascal) просто потому, что работы уже ведутся.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #2 : Май 25, 2014, 06:15:07 am »
Наиболее вероятен как раз последний (Component Pascal) просто потому, что работы уже ведутся.
Есть новости?

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #3 : Май 25, 2014, 06:53:45 am »
А какие преимущества у кодогенерации в LLVM перед кодогенерацией в C?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #4 : Май 25, 2014, 09:03:58 am »
А какие преимущества у кодогенерации в LLVM перед кодогенерацией в C?
Проще, безопасней и точнее. Также не будет зависимости от сишных либ и рантайма.
Y = λf.(λx.f (x x)) (λx.f (x x))

akron1

  • Jr. Member
  • **
  • Сообщений: 76
    • Просмотр профиля
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #5 : Май 25, 2014, 10:53:59 am »
Проще? ИМХО, трансляция в C проще трансляции в кроссплатформенный, но все же по сути асм.
Безопаснее? Errare humanum est, но ведь код на C в данном случае пишет не человек, главное, чтобы не было ошибок в трансляторе и C-компиляторе.
Сишные либы? А какие операторы (операции, встроенные процедуры) O7 транслируются с использованием стандартной библиотеки C? В репорте я нашел только NEW (DISPOSE) и м. б. COPY, SYSTEM.MOVE, но соответствующие функции C реализованы для всех платформ. Всё остальное либо имеет прямые аналоги в языке C, либо легко реализуется средствами языка в виде функций без привлечения какой-либо библиотеки.

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #6 : Май 27, 2014, 07:23:33 am »
интеграция с кодом на других языках проще.

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #7 : Май 27, 2014, 10:14:53 am »
Вот тут чувак пилит компилер оберона в LLVM:
https://github.com/kpdev/TranslatorAlien2LLVM
https://github.com/kpdev/alien2llvm

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Семейство Oberon и кодогенерация для LLVM
« Ответ #8 : Июнь 05, 2014, 06:24:52 pm »
Подумал я тут, подумал... И, пожалуй, соглашусь с akron1.

У Оберона, имхо, есть только два пути:
1. Простой компилятор в натив. Вроде того, что в BlackBox или в Linz Oberon V4 или в ETH S3. Это собсна самый трушный оберонвэй.
2. Простой компилятор в байткод простой виртуальной машины + виртуальная машина, реализованная на C99 + транслятор в C99. Т.е. песочница в виртуальной машине для разработки, полноценной отладки и высокоуровневой профилировки, плюс возможность транслировать систему в C99 и собрать монолитное приложение.

Использовать LLVM как целевую архитектуру в первом варианте - это просто не в духе оберонов. Слишком монстрячая штука этот ваш LLVM.

Использовать LLVM во втором варианте вместо C99... ну... может быть и можно... Но смысла особого нет. Ни чем оно у C99 не выигрывает, а транслятор в C таки проще сделать.

Возможен еще и третий вариант. Использовать только транслятор в C99. Но, имхо, это будет дико неудобно.