Здравствуйте, bazis1, Вы писали:
B>Какое преимущество имеет генератор кода перед готовым языком, где все, что надо, уже реализовано? Возможность потрахаться с отладкой генератора? Вот недостатков целая куча:
Покажи мне язык в который встроена матричная или хотя бы веторная алгебра. Покажи мне язык, в который встроены операции над ГИС примитивами типа мультиполиногов в полярных координатах. Покажи мне язык в котором реализованы графы и трансформации над ними. Не покажешь, потому что в реальности в готовых языках НИЧЕГО нужного не реализовано. Максимум, есть тормозные библиотеки написанные на этом самом языке.
B>1. IDE не будет понимать синтаксис ваших расширений, которые парсит генератор.
С чего бы? На внешнем языке у меня валидные конструкции нормального языка типа python или java, например, a + b, а внутри эффективный алгоритм мерджа двух деревьев, при это ни аргументы ни результат во внешний язык не просачиваются иначе как в виде указателей. Поэтому я могу использовать тормозной python и все равно рвать C++, если не по производительности, то по скорости разработки.
При желании, я могу посмотреть реализацию "мяса" в любом редакторе который умеет С, взрослая IDE мне для этого не нужна.
B>2. Придется таскать за собой дополнительную утилиту для генерации, заморачиваться с dependencies, добавлением в проекты/скрипты и т.п.
Не вижу проблемы. Современные фереймворки типа Django, RoR, Play таскают с собой кодогенераторы, чем я хуже? Тем более что технологии кодогенерации не стоят на месте и с нуля писать генератор нет никакой необходимости.
Кстати, генератор совершенно необязательно хранить вместе с проектом. Можно держать его в секьюрном хранилище и тогда рядовые кодеры не смогут спереть кодовую базу проекта, или наоборот, можно держать его на машине разработчика и тогда работодатель не сможет заменить тебя на тупого индуса.
B>3. Отлаживать вы будете генерируемый код? Или вставлять в него #line и надеятся, что не пропадет читаемость?
Не буду, нафига? На уровень С выносятся достаточно изолированные функции которые без проблем можно покрыть юнит тестами. Этого, вместе с проверкой предусловий, постусловий и инвариантов в рантайме более чем достаточно.
B>Ну напишите мне на Node.js прошивку для микроконтроллера с 256 байтами (!) памяти. Или движок специализированной БД для хранения данных для рефакторинга с моментальным поиском.
Мы вообще-то начали с обсуждения многопорточности и интеграции со сторонними сервисами, а в контроллерах с 256 байтами ни того, ни другого нет. Зато там есть ардуина, где ты пишешь на нормальном языке из которого потом получается ассемблерная прошивка.