OberonCore
https://forum.oberoncore.ru/

Транслятор кода
https://forum.oberoncore.ru/viewtopic.php?f=30&t=5983
Страница 1 из 3

Автор:  perloid [ Среда, 21 Декабрь, 2016 17:48 ]
Заголовок сообщения:  Транслятор кода

Подумываю написать транслятор из oberon-2 в Go - т.к. у него крутой тулинг и по философии более схож на oberon (сборщик мусора, нету исключениий и классов) и просто и кроссплатформенно собирать приложения web,cli, desktop и возможно даже мобильные устройства будут.

Что для этого нужно? парсер, лексер на oberon-2 - строим AST и конвертируем в Go код. Что есть готового?

люди пишут трансляторы лиспа и хаскеля в Go - почему бы не написать транслятор из oberon - веть это намного более простая задача. ввиду того что oberon простой язык.

Автор:  Rifat [ Среда, 21 Декабрь, 2016 18:38 ]
Заголовок сообщения:  Re: Транслятор кода

Написать транслятор из Оберона в Go не сложно, можно будет даже написать простую программу на Обероне, типа вычисления факториала и после запуска Go результат вычислится.
Сложности возникнут, когда захотите использовать уже готовые библиотеки, которые есть в Go, в этом случае, в этих библиотеках могут быть использованы такие конструкции, которые нельзя один в один отобразить в Оберон. И нужно будет городить огород, чтобы как-то их использовать.
Например, в Go функции могут возвращать несколько значений:
Код:
func f(a, b int) (int, string) {
   return a+b, "сложение"
}

Как отобразить вызов данной функции в Обероне?

Автор:  Илья Ермаков [ Среда, 21 Декабрь, 2016 18:46 ]
Заголовок сообщения:  Re: Транслятор кода

Оберон-2 не имеет смысла, это транзитный вариант до КП.
Диссертационный эксперимент, из которого реально боевой инструмент уже получился в КП.

Автор:  Trurl [ Среда, 21 Декабрь, 2016 21:49 ]
Заголовок сообщения:  Re: Транслятор кода

Не понимаю этих наездов на Оберон-2. Он имеет не меньше смысла, чем КП. По крайней мере, совместим с Обероном.

Автор:  ilovb [ Среда, 21 Декабрь, 2016 22:29 ]
Заголовок сообщения:  Re: Транслятор кода

Ну а Оберон имеет не меньше смысла, чем Оберон-2 :wink:

Автор:  ilovb [ Среда, 21 Декабрь, 2016 22:32 ]
Заголовок сообщения:  Re: Транслятор кода

Rifat писал(а):
Как отобразить вызов данной функции в Обероне?

VAR-параметры, не? :)

Автор:  Comdiv [ Четверг, 22 Декабрь, 2016 01:49 ]
Заголовок сообщения:  Re: Транслятор кода

Транслятор в Go может оказаться полезным как вспомогательное средство, если желательно иметь общую кодовою базу для разнородных платформ. Нужен транслятор именно с Oberon-2, или для Oberon-07 подойдёт?

Автор:  perloid [ Четверг, 22 Декабрь, 2016 14:25 ]
Заголовок сообщения:  Re: Транслятор кода

Rifat писал(а):
Написать транслятор из Оберона в Go не сложно, можно будет даже написать простую программу на Обероне, типа вычисления факториала и после запуска Go результат вычислится.
Сложности возникнут, когда захотите использовать уже готовые библиотеки, которые есть в Go, в этом случае, в этих библиотеках могут быть использованы такие конструкции, которые нельзя один в один отобразить в Оберон. И нужно будет городить огород, чтобы как-то их использовать.
Например, в Go функции могут возвращать несколько значений:
Код:
func f(a, b int) (int, string) {
   return a+b, "сложение"
}

Как отобразить вызов данной функции в Обероне?


в Go много чего есть ну и что.
смысл транслятора в том чтобы oberon-2 транслировать в Go
а не наоборот.

главное поддержка стандартного синтаксиса oberon-2.
дальше накрутить используя в том числе готовые либы Go, можно что угодно.

Автор:  perloid [ Четверг, 22 Декабрь, 2016 14:26 ]
Заголовок сообщения:  Re: Транслятор кода

Comdiv писал(а):
Транслятор в Go может оказаться полезным как вспомогательное средство, если желательно иметь общую кодовою базу для разнородных платформ. Нужен транслятор именно с Oberon-2, или для Oberon-07 подойдёт?


я не силен в различных диалектах. но если есть готовое для Oberon-07 я бы посмотрел.

Автор:  Comdiv [ Четверг, 22 Декабрь, 2016 15:34 ]
Заголовок сообщения:  Re: Транслятор кода

Если под готовым подразумевается транслятор в Си, который можно доделать для трансляции в Go, то можете глянуть этот проект: Восток. Собирается просто. Текущий объём исходного кода - около 9000 строк, из них треть - это GeneratorC.mod. Этот модуль можно скопировать под именем GeneratorGo.mod и подредактировать для языка Go. Полагаю, что его объём может сократиться в 2-3 раза из-за большей близости языков. Но есть и проблемы, например, схема экспорта в Go через заглавную 1-ю букву, эта идея прекрасна с любой стороны.

Автор:  ilovb [ Четверг, 22 Декабрь, 2016 16:04 ]
Заголовок сообщения:  Re: Транслятор кода

Доделать без гемора не получится имхо. Go и C - это сильно разные языки. Синтаксис другой. Семантика другая.

Автор:  Александр Ильин [ Четверг, 22 Декабрь, 2016 16:40 ]
Заголовок сообщения:  Re: Транслятор кода

perloid писал(а):
в Go много чего есть ну и что.
...
дальше накрутить используя в том числе готовые либы Go, можно что угодно.

- Ну и что?
- А то, что "готовые либы" будут использовать те фишки, которые вы из Оберона будете использовать "не готовы".

Автор:  Comdiv [ Четверг, 22 Декабрь, 2016 16:41 ]
Заголовок сообщения:  Re: Транслятор кода

ilovb писал(а):
Доделать без гемора не получится имхо. Go и C - это сильно разные языки. Синтаксис другой. Семантика другая.

Тут, скорее, важна близость Оберона и Go, а она выше, чем Оберона и Си. Кроме того, Go содержит возможности для грубой работы с памятью, которые позволяют воплотить и плохо стыкующиеся вещи, к примеру, систему расширения записей, которая в Go не позволяет просто и безопасно перейти от указателя на базовую к указателю на расширенную.

Автор:  ilovb [ Четверг, 22 Декабрь, 2016 17:17 ]
Заголовок сообщения:  Re: Транслятор кода

Коллеги, рекомендую забить на Go и сделать ставку на LuaJit.
Это будет проще и эффективнее. Lua очень гибкий язык. LuaJit очень эффективный компилятор.
Кроме того LuaJit имеет удобный FFI. Транслятора можно написать на Lua с использованием гениальной библиотеки LPEG.

Автор:  Comdiv [ Четверг, 22 Декабрь, 2016 17:36 ]
Заголовок сообщения:  Re: Транслятор кода

Трансляторы Оберона делаются не для того, чтобы писать на Lua или на чём другом.

Автор:  Trurl [ Четверг, 22 Декабрь, 2016 18:17 ]
Заголовок сообщения:  Re: Транслятор кода

ilovb писал(а):
Коллеги, рекомендую забить на Go и сделать ставку на LuaJit.

Тогда уж на JavaScript.

Автор:  Пётр Кушнир [ Четверг, 22 Декабрь, 2016 18:22 ]
Заголовок сообщения:  Re: Транслятор кода

Не нужно никаких трансляторов из одной экосистемы в другую. Это всё бесперспективно в плане сфер применения. Берите Go, если нужно использовать Go и всё. Или берите Оберон-2, если нужен Оберон-2. А то вы столкнётесь в первую очередь с variadic parameters, во вторую с множественными интерфейсами, и так далее. Ну, это никак не мешает сделать компилятор Оберон-2 на Go и реализовать какое-то подобие ffi в оберон-стиле, на сообщениях, например, но это будет долго, непривычно и неэффективно. Экосистемы отторгают друг друга, такой мир.

Автор:  ilovb [ Четверг, 22 Декабрь, 2016 18:31 ]
Заголовок сообщения:  Re: Транслятор кода

Comdiv писал(а):
Трансляторы Оберона делаются не для того, чтобы писать на Lua или на чём другом.

Транслятор на Lua будет искаропки работать везде, где работает LuaJit: http://luajit.org/luajit.html
А какие ваши варианты?

Trurl писал(а):
ilovb писал(а):
Коллеги, рекомендую забить на Go и сделать ставку на LuaJit.

Тогда уж на JavaScript.

Ага. И в него заодно можно. Языки довольно близкие.

Пётр Кушнир писал(а):
Не нужно никаких трансляторов из одной экосистемы в другую. Это всё бесперспективно в плане сфер применения. Берите Go, если нужно использовать Go и всё. Или берите Оберон-2, если нужен Оберон-2. А то вы столкнётесь в первую очередь с variadic parameters, во вторую с множественными интерфейсами, и так далее. Ну, это никак не мешает сделать компилятор Оберон-2 на Go и реализовать какое-то подобие ffi в оберон-стиле, на сообщениях, например, но это будет долго, непривычно и неэффективно. Экосистемы отторгают друг друга, такой мир.


Имхо, нужно вообще на нативную компиляцию забить. Сделать компилер в байткод и тупейшую стековую машину на Go и юзать по полной гошную экосистему. Дергать Go посредством виртуальных модулей и все.

Автор:  Rifat [ Четверг, 22 Декабрь, 2016 18:51 ]
Заголовок сообщения:  Re: Транслятор кода

Если так уж охота использовать чужую инфраструктуру, то можно реализовать какой-нибудь модуль для обмена сообщениями (pipe, shared memory, tcp ip, etc.) на Go и на Oberon-2. Тогда если захочется использовать какой-нибудь полезную библиотеку, то достаточно будет скомпилировать модуль, который использует библиотеку и содержит модуль для обмена сообщениями на Оберон-2, и запустить Go с необходимой библиотекой и модулем, который обеспечивает обмен сообщениями, и все будет работать и без всяких новых трансляторов.

Автор:  Comdiv [ Четверг, 22 Декабрь, 2016 19:28 ]
Заголовок сообщения:  Re: Транслятор кода

ilovb писал(а):
Comdiv писал(а):
Трансляторы Оберона делаются не для того, чтобы писать на Lua или на чём другом.

Транслятор на Lua будет искаропки работать везде, где работает LuaJit: http://luajit.org/luajit.html
А какие ваши варианты?
Если хочется запускать там, где работает Lua, то нужно написать генератор кода Lua. Это менее затратно, чем писать непосредственно на Lua.

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