185 похожих чатов

Есть направление Lang2Lang - конвертация одного ЯП в другой. Понятно,

что конвертацию невозможно сделать полностью корректной из-за различного синтаксиса, семантики, фичей, инфраструктуры, API у разных языков. Даже для таких похожих как C# и Java. А есть ли направление по преобразованию какого-то упрощенного универсального представления в конкретный ЯП, пусть и с ограниченным количеством фич? Какие-нибудь есть библиотеки для этого? Есть движки шаблонов (в частности, https://github.com/antlr/stringtemplate4), но они работают на текстовом представлении, что имеет свои недостатки - невозможность настройки форматирования, дублирование логики в шаблонах. А что насчет обработки непосредственно деревьев?

12 ответов

26 просмотров

Кажется фейсбук уже делал подобную работу. Я тока забыл ее название. И там даже вполне себе результаты были, если мы говорим про транспиляцию кода

Сразу предупреждаю, что написанное ниже — просто то, что [неизвестные мне люди] пишут в интернетах. > Понятно, что конвертацию невозможно сделать полностью корректной Так вот есть те, которые утверждают, что им это непонятно. ;) К примеру, http://www.semanticdesigns.com/Products/Services/NorthropGrummanB2.html Цитируя оттуда (выделения мои): "the automated OFP conversion achieved 100% accurate translation, including replacement of all JOVIAL programming and data declaration constructs and calls on the legacy operating system. The SD translation tool converts the entire OFP application in a few CPU hours with no manual interaction of any kind.". И один из авторов — Ira Baxter (как на этом сайте, так и на stack overflow и т.п.) вообще любит [самоуверенно] давать понять, что решения, которые достигают, например, всего лишь 95% автоматической конвертации — просто "игрушки". ;) С другой стороны, лично мне (по примерам кода) кажется, что результаты их автоматической трансляции похожи на "Настоящий Программист может программировать на Фортране на любом языке программирования!".

> Мне кажется, это немного разные задачи Я прокомментировал одну из посылок автора сообщения. > Понятно, что можно написать 100% корректную трансляцию А вот автору сообщения кажется (казалось) иначе, нет ("Понятно, что конвертацию невозможно сделать полностью корректной из-за различного синтаксиса, семантики, фичей, инфраструктуры, API у разных языков. Даже для таких похожих как C# и Java.")? > Но вот когда мы обобщаем задачу до N-to-M трансляции То, опять-таки (имея в виду " компиляторы именно этим и занимаются") эта задача "теоретически" сводится к "N:1, 1:M", как в compiler collections, нет (и на сайте по ссылке как раз и продают решения для подобного, между прочим)? > сложность стремительно возрастает, а точность — падает Тем не менее, этим [более-менее успешно] занимаются, если я правильно понимаю (но, видимо, немногие — вот тут, например, некоторые пытаются собирать информацию об этом: http://www.program-transformation.org/ ).

Yaroslav Schekin
> Мне кажется, это немного разные задачи Я проком...

> То, опять-таки (имея в виду " компиляторы именно этим и занимаются") эта задача "теоретически" сводится к "N:1, 1:M", как в compiler collections, нет (и на сайте по ссылке как раз и продают решения для подобного, между прочим)? Так на практике при этом сложность стремительно растёт, а точность падает. Или у GCC с LLVM не осталось открытых багов в трекерах? 😉 Не говоря даже о том, что оказалось невозможно написать удовлетворительный LLVM backend к GHC. Да что там, даже Rust регулярно вскрывает баги в LLVM.

Alexander Chichigin
> То, опять-таки (имея в виду " компиляторы именно...

Ну так "Optimizing compilers are so difficult to get right that we dare say that no optimizing compiler is completely error-free!" © Т.е. "открытые баги" есть [почти] везде, и их количество, скорее, говорит об интенсивности разработки и использования программы. Или Вы имеете в виду, что есть доказательства того, что сам подход compiler collections [намного] более сложный и менее точный?

Yaroslav Schekin
Ну так "Optimizing compilers are so difficult to g...

Я не редставляю, что Вы признаёте "доказательством" при подходе > "открытые баги" есть [почти] везде, и их количество, скорее, говорит об интенсивности разработки и использования программы 😊

Alexander Chichigin
Я не редставляю, что Вы признаёте "доказательством...

Эээ... а что Вас не устраивает в этом утверждении (сложность разработки [любых практических] компиляторов в нём подразумевалась, т.к. речь шла о них)? А так — например, то, что для достижения того же результата в подходе "N:1, 1:M" требуется [намного] больше усилий, и/или дефектов в трансляторе при этом получается (непропорционально) больше.

А какие проблемы у GHC с llvm? Ocaml'овский llvm проект тоже заморожен по какой-то причине.

Konstantin Romanov
А какие проблемы у GHC с llvm? Ocaml'овский llvm п...

Я уже не помню, на что конкретно жаловались, но какие-то оптимизации выразить было нельзя, и "ручной" C-- бэкенд был быстрее в большинстве случаев.

Konstantin Romanov
А какие проблемы у GHC с llvm? Ocaml'овский llvm п...

Ну так llvm под сишку заточен, я папир видел где его прямо си-бекэндом называли.

Nutritional Rabbit
Ну так llvm под сишку заточен, я папир видел где е...

Насколько я понял из обсуждений - основные проблемы с GC и с доп. стеком в GHC. Цитируя lpw25: "The problem is that you cannot have GC roots in registers across points where the GC might run." То есть, если я правильно понимаю, везде, где МОЖЕТ запускаться GC, нужно "выплёвывать" (kak eto po-russky? выгружать?) по крайней мере часть переменных в стек.

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
8
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта