OberonCore https://forum.oberoncore.ru/ |
|
Транслятор кода https://forum.oberoncore.ru/viewtopic.php?f=30&t=5983 |
Страница 3 из 3 |
Автор: | perloid [ Воскресенье, 25 Декабрь, 2016 10:27 ] |
Заголовок сообщения: | Re: Транслятор кода |
ilovb писал(а): perloid писал(а): ilovb писал(а): Коллеги, рекомендую забить на Go и сделать ставку на LuaJit. Это будет проще и эффективнее. Lua очень гибкий язык. LuaJit очень эффективный компилятор. Кроме того LuaJit имеет удобный FFI. Транслятора можно написать на Lua с использованием гениальной библиотеки LPEG. проблема в том что в lua нет типов. придется самому пилить статический анализатор. потом еще чтото потом еще чтото - уходит много времени в пустую. а в Go уже есть проверка типов и т.п. - он наиболее близок по идеологии. разве что добавлены ненужные сущности и конструкции Вы уверены, что понимаете какой должен получиться результат в итоге? Проверка типов будет в вашем трансляторе. От целевого языка тут ничего не зависит. имено что это транслятор и проверка типов и все тулы будет в компиляторе Go - по крайней мере на первых этапах. это же эксперимент. |
Автор: | Comdiv [ Воскресенье, 25 Декабрь, 2016 17:41 ] |
Заголовок сообщения: | Re: Транслятор кода |
perloid писал(а): хорошо, ознакомился - но выглядит он как будто был переведен с C. Сначала Вы пишите, что не хочется погружаться в Си, так как это слишком затратно, что говорит о плохом знании Си. Затем Вы находите для себя в программе на Обероне признаки перевода с Си, что требует хороших знаний Си. Мне кажется, или налицо противоречие? Также было бы интересно узнать, что именно Вам показалось похожим на перевод с Си? Может быть вложенные процедуры, многоветочный WHILE, расширенные записи или множества? |
Автор: | perloid [ Среда, 28 Декабрь, 2016 09:17 ] |
Заголовок сообщения: | Re: Транслятор кода |
ilovb писал(а): Comdiv писал(а): Так зачем же тогда его писать на Lua? Чтобы избавиться от всей лишней чепухи. У вас будет LuaJit.exe и один файлик O2.lua (транслятор) Поддерживать нужно только этот небольшой исходник на Lua (который всегда готов к правке и выполнению). А вы предлагаете таскать за собой (и поддерживать) еще и парсер (на другом языке). ps. Я надеюсь вы не считаете, что конкретная наличная реализация чего-либо сразу имеет некую ценность? ок возможно для начала можно попробовать и транслтор в lua - если есть готовый. где его можно скачать ? а для проверки типов - использовать компилятор xds - типа "программа скомпилировалась - значит все ок". |
Автор: | ilovb [ Среда, 28 Декабрь, 2016 09:41 ] |
Заголовок сообщения: | Re: Транслятор кода |
Сначала его нужно написать. |
Автор: | Димыч [ Среда, 28 Декабрь, 2016 10:23 ] |
Заголовок сообщения: | Re: Транслятор кода |
perloid писал(а): это же эксперимент. Покажите уже код какой-нибудь? |
Автор: | albobin [ Среда, 28 Декабрь, 2016 11:13 ] |
Заголовок сообщения: | Re: Транслятор кода |
Кода не будет - будет вечная музыка |
Автор: | perloid [ Четверг, 29 Декабрь, 2016 11:10 ] |
Заголовок сообщения: | Re: Транслятор кода |
Вам так сразу код выдать - новый проект на Oberon горит? Т.к. имеется коммерческий интерес - код обязательно будет выложен в открытом доступе, но только когда что то будет реально готовое (к Новому Году - но точную дату не скажу). Пока что все на этапе ресерча, пункты будут уточнятся. Работа ведется в свободное время. # Рабочее название "Portal" ## Исходный язык - Oberon-07 Исходя из прочитанной информации был выбран Oberon-07. Мотивы думаю пояснять не надо, т.к. все тут очевидно должно быть. Важное примечание - если в Oberon-07 есть привязанные к типу процедуры (не до конца еще разобрался) - эта возможность не реализуется - как ненужная сущность. ## Требования к реализации Транслятор должен быть написан на Oberon - чтобы было тру (по крайней мере его первая версия). Необходимо найти подходящую реализацию - чтобы любой желающий без проблем мог установить инструменты и подключится к разработке. Зависимости минимальны - модули In, Out (и возможно какойто модуль для работы с файлами). На данный момент этим условиям соответствует XDS x86. - Модуль tokenizer - преобразует символы в токены (типизирванные записи) - Каждая реализация транслятора отдельный исполнимый файл (типа portal2go, portal2php и т.д) - преобразует токены в конструкции целевого языка и выдает код. ### Этапы работы транслятора Cкрипт на bash или makefile - опционально - проверка исходного кода Oberon, реализуется средствами какого-то сущесвующего компилятора, например XDS - если ошибок компиляции нет - запускается транслятор, читает c входного потока код Oberon, выводит в выходной поток код целевой платформы. В дальнейшем доработка до вывода AST скорее всего в XML, может в json (надо разобратся какие есть пути получения кода целевого языка из ast тогда реализовывать нужный формат) ## Возможные целевые языки ### Основные требования - какие то пункты могут отсутствовать для конкретного целевого языка - достаточно низкоуровневый - простой и распространенный - кроссплатформенный - средства компиляции в исполнимые файлы не требуют установки (распаковываются в любую папку и настраиваются необходимые переменные окружения) т.е. не требует прав администратора и доступа к пакетному менеджеру и его наличия. - не требует установки рантайма - возможность формировать читабельный исходный код ### Основные языки - с чем точно планируется продолжатся работа #### Go - golang-book.ru - достоинства - отличные средства для реализации приложений работающих с сетью и масштабирование многопоточных программ из коробки. - основной недостаток языка и что мне лично не нравится в Go есть "типа ООП", но не ООП (это собственно и является причиной необходимости транслятора) - видимо сказалось портирование наработок гугла на "С с классами" в стиле языка Oberon-2. и вся библиотека Go принуждает писать в таком виде (пример https://golang.org/pkg/net/url/) #### С - clang.llvm.org - достоинство - в отличии от gcc есть готовые сборки компиляторов под различные платформы, не требующих установки http://releases.llvm.org/download.html, так же есть уже готовые проекты транслятора oftont+ или voc - подключится к проекту и адаптировать при необходимости под clang под свои требования сборки ### Дополнительные #### PHP - php.net - простая широкораспространненная платформа для web - добавлена типизация http://php.net/manual/ru/functions.argu ... ion.strict - активное развитие и усовершенствование языка, ведутся работы над JIT - так же через компилятор для .NET peachpie.io - получаем исполнимый код для .NET #### Rust - rust-lang.org - более безопасный и низкоровневый, без ООП. как целевая платформа более персективен чем Go - недостаток - не достаточно стабилен и пока сложен для освоения #### Kotlin - kotlinlang.org - достоинства - присутcтвуют функции как отдельная сущность - что позволит упростить реализацию транслятора нежели чем транслировать в java - так же уже есть возможность и для браузера компилировать в js - в перспективе может улучшат качество генерируемого кода - недостаток - требует наличия jvm (и возможно sdk) ## Конечная цель В идеале должно получится что то типа http://haxe.org/use-cases/, но на тру-языке. Распространение Oberon в массы и коммерческое применение для широкого круга задач. |
Автор: | Comdiv [ Четверг, 29 Декабрь, 2016 14:24 ] |
Заголовок сообщения: | Re: Транслятор кода |
perloid писал(а): - Модуль tokenizer - преобразует символы в токены (типизирванные записи) Уровень проработки архитектуры не очень высок, но радует, что токенайзер будет выдавать токены в типизированных записях.- Каждая реализация транслятора отдельный исполнимый файл (типа portal2go, portal2php и т.д) - преобразует токены в конструкции целевого языка и выдает код. Цитата: - опционально - проверка исходного кода Oberon, реализуется средствами какого-то сущесвующего компилятора, например XDS Входным языком должен же быть Oberon-07? Тогда проблемка - XDS не поддерживает Oberon-07.Цитата: - более безопасный и низкоровневый, без ООП. как целевая платформа более персективен чем Go ООП там своебразное, но так не любимые Вами связанные методы там есть.Цитата: В идеале должно получится что то типа http://haxe.org/use-cases/, но на тру-языке. На всякий случай спрошу, Вы с Филипповым Евгением никак не связаны?Цитата: OBERON_AXE inspired by HAXE http://haxe.org/ but with OBERON as the primary programming language for the source code
This repository and all files in it Copyright © 2016 Евгений Григорьевич Филиппов. All Rights Reserved. |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |