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 |
Автор: | 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 А какие ваши варианты? |
Страница 1 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |