Я работаю над проектом (почти законченным) Javascript уже более 14 месяцев. Проект начинался как хака я ожидал, чтобы закончить всю ночь, но со временем часть Javascript выросла быть 68 отдельными файлами и 10,314 непустых строк, к сожалению, в настоящее время зависит от C препроцессора для построения.
Трудно объяснить, как я закончил использовать cpp для Javascript: это был только взлом, и мне нужно было что-то, что дало мне макрорасширение, ifdef, определить и включить без особых усилий. После приблизительно 3-секундного рассмотрения я понял, что cpp был "идеальным" для задачи:
- Предоставьте макрос LOG(), который исчезает в режиме деблокирования.
- Предоставить макрос ASSERT(), который исчезает в режиме деблокирования и генерирует исключения, помеченные исходным файлом и номером строки.
- Реализации Swap LOG() и ASSERT() для кода, который позволяет создавать "проверенную" сборку, которая регистрирует события в компактной форме по мере их возникновения, которые сообщаются на сервер, если происходит сбой.
- Замена PROJECT_SOME_CONFIG_VAR_NAME на "1" на основе файла конфигурации, общего с бэндом Python.
Как и все истинные хаки, этот хак теперь настолько жестко закодирован в проект, что я действительно ненавижу даже думать о работе, которая потребуется для ее замены. Мой проект достигает стадии, на которой я хочу, чтобы переместить базу кода на свой собственный выделенный тестовый сервер (а не мой ноутбук), однако по настройке экземпляра Linux, я обнаружил, что GNU версии CPP после 4.1 больше не предобработки Javascript с сбоем с ошибкой.
Вместо того, чтобы добавить определенную версию GCC в список требований к сборке, я решил, что сейчас самое подходящее время, чтобы по-настоящему исправить этот беспорядок. Моя проблема заключается в том, что я не могу найти заменяющий препроцессор с той же мощью и функциями, что и cpp! Я рассмотрел m4, но m4 - это мир боли для себя. Другие препроцессоры, зависящие от Javascript, я обнаружил, что у меня нет всех функций, которые я сейчас в зависимости от, например:
-
__FILE__
и__LINE__
- Макросы Variadic
- Включить защиту
- Конкатенация токена
- Условная компиляция
Я серьезно подумываю о внедрении нового препроцессора только для Javascript, который полностью заимствует синтаксис препроцессора C, так как он работал так хорошо. Мне просто интересно, есть ли лучшие варианты, прежде чем делать это.:) Может быть, уже есть cpp-подобный общий препроцессор, в который я мог бы поменяться? Работа, необходимая для замены всего синтаксиса препроцессора в этих 68 файлах, подходит к объему работы, требуемой для просто переопределения препроцессора.
Я очень удивлен, что когда-либо делал это, полагаясь на препроцессор С; он более эффективен в этой задаче, чем здоровый для ума, чтобы понять. Другим вариантом, открытым для меня, является статическое построение версий cpp-4.1 для Linux, Darwin-i386, Win32 и сохранение этих двоичных файлов в репозитории проектов.
Help!