Я работаю над (почти законченным) проектом Javascript чуть более 14 месяцев. Проект начался как хак, который я ожидал закончить за одну ночь, но со временем часть Javascript выросла до 68 отдельных файлов и 10 314 непустых строк, к сожалению, в настоящее время зависящих от препроцессора C для сборки.
Трудно объяснить, как я в итоге использовал cpp для Javascript: это был всего лишь взлом, и мне нужно что-то, что давало мне расширение макроса, ifdef, define и включало без особых усилий. Примерно через 3 секунды я понял, что cpp "идеально" подходит для этой задачи:
- Предоставьте макрос LOG (), который исчезает в режиме разблокировки.
- Предоставляет макрос ASSERT (), который исчезает в режиме выпуска и генерирует исключения, помеченные исходным файлом и номером строки.
- Перестановка реализаций 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 файлах, приближается к объему работы, необходимой для простого переопределения препроцессора.
Я весьма удивлен, что когда-либо делал это, полагаясь на препроцессор C; эта задача более эффективна для понимания, чем полезна для ума. Другой вариант, который мне открыт, - это статическая сборка версий cpp-4.1 для Linux, Darwin-i386, Win32 и сохранение этих двоичных файлов в репозитории проекта.
Помощь!