OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 24 Август, 2019 18:32

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




Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 17:48 

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

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 18:38 

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 18:46 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9134
Откуда: Россия, Орёл
Оберон-2 не имеет смысла, это транзитный вариант до КП.
Диссертационный эксперимент, из которого реально боевой инструмент уже получился в КП.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 21:49 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1200
Не понимаю этих наездов на Оберон-2. Он имеет не меньше смысла, чем КП. По крайней мере, совместим с Обероном.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 22:29 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Ну а Оберон имеет не меньше смысла, чем Оберон-2 :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Среда, 21 Декабрь, 2016 22:32 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Rifat писал(а):
Как отобразить вызов данной функции в Обероне?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 01:49 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Транслятор в Go может оказаться полезным как вспомогательное средство, если желательно иметь общую кодовою базу для разнородных платформ. Нужен транслятор именно с Oberon-2, или для Oberon-07 подойдёт?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 14:25 

Зарегистрирован: Воскресенье, 04 Январь, 2009 12:00
Сообщения: 52
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:28, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 14:26 

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 15:34 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 16:04 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Доделать без гемора не получится имхо. Go и C - это сильно разные языки. Синтаксис другой. Семантика другая.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 16:40 
Аватара пользователя

Зарегистрирован: Вторник, 19 Сентябрь, 2006 21:54
Сообщения: 2309
Откуда: Россия, Томск
perloid писал(а):
в Go много чего есть ну и что.
...
дальше накрутить используя в том числе готовые либы Go, можно что угодно.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 16:41 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
ilovb писал(а):
Доделать без гемора не получится имхо. Go и C - это сильно разные языки. Синтаксис другой. Семантика другая.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 17:17 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
Коллеги, рекомендую забить на Go и сделать ставку на LuaJit.
Это будет проще и эффективнее. Lua очень гибкий язык. LuaJit очень эффективный компилятор.
Кроме того LuaJit имеет удобный FFI. Транслятора можно написать на Lua с использованием гениальной библиотеки LPEG.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 17:36 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
Трансляторы Оберона делаются не для того, чтобы писать на Lua или на чём другом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 18:17 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1200
ilovb писал(а):
Коллеги, рекомендую забить на Go и сделать ставку на LuaJit.

Тогда уж на JavaScript.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 18:22 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 18:31 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1549
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 посредством виртуальных модулей и все.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 18:51 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 805
Откуда: Казань
Если так уж охота использовать чужую инфраструктуру, то можно реализовать какой-нибудь модуль для обмена сообщениями (pipe, shared memory, tcp ip, etc.) на Go и на Oberon-2. Тогда если захочется использовать какой-нибудь полезную библиотеку, то достаточно будет скомпилировать модуль, который использует библиотеку и содержит модуль для обмена сообщениями на Оберон-2, и запустить Go с необходимой библиотекой и модулем, который обеспечивает обмен сообщениями, и все будет работать и без всяких новых трансляторов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Транслятор кода
СообщениеДобавлено: Четверг, 22 Декабрь, 2016 19:28 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 882
Откуда: Киев
ilovb писал(а):
Comdiv писал(а):
Трансляторы Оберона делаются не для того, чтобы писать на Lua или на чём другом.

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


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

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


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB