Является ли перевод моего собственного языка программирования на другой язык и его компиляция хорошей практикой? - PullRequest
0 голосов
/ 11 июля 2020

Моя грамматика готова и протестирована в Antlr4, на самом деле я хочу, чтобы исходные файлы моего языка стали исполняемыми и достаточно быстрыми, поэтому я думаю, что у меня есть следующие решения: * JVM

Создание исходного кода на другом языке, а затем компиляция сгенерированного файла (ов)

мой вопрос о решении номер 3

ваше мнение ? это плохая практика? какие проблемы? и отрицательные моменты? здесь есть какие-нибудь советы или предложения? насчет целевого языка, оптимизации, любых источников для чтения и т.д. c

спасибо

Ответы [ 2 ]

1 голос
/ 11 июля 2020

Чтобы быстро получить минимально жизнеспособный продукт (прототип, версия 0.01), я бы сделал 3-й. Например, переведите в C. Я где-то читал, что самое сложное при создании хорошего компилятора - это возвращать хорошие сообщения об ошибках и хорошо оптимизировать для предполагаемого процессора или виртуальной машины. Если вы выбрали третий вариант, вы получите (некоторую) оптимизацию бесплатно. И если окажется, что компилятор стоит улучшить, тогда LLVM и / или JVM и / или скомпилируйте напрямую в двоичный файл / сборку. Если у вас есть все время в мире. Что лучше, также зависит от того, какой язык вы создали, я думаю. Сначала я хотел бы проверить, есть ли у вас что-то уникальное и полезное, которого нет в других языках. Если нет, то какой смысл добавлять еще один язык в и без того очень длинный список?

0 голосов
/ 16 июля 2020

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

Если вы используете язык с расширенными возможностями метаданные, такие как LLVM IR (и да, это не намного ниже уровня C в любом случае), вы можете заполнить всю необходимую отладочную информацию. Нацелить LLVM почти так же легко, как и C.

. Другой альтернативой, если вы хотите извлечь выгоду из функций языка очень высокого уровня и создать свой новый язык поверх, является использование расширяемого языка в качестве основы - например, , реализуйте свой язык как расширение синтаксиса поверх Racket или Common Lisp.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...