Благоприятная для JavaScript дилемма препроцессора

Я продолжал работать (почти законченный) проект JavaScript немногим больше 14 месяцев теперь. Проект начался как взлом, который я ожидал заканчивать в течение ночи, но со временем часть JavaScript выросла 68 отдельными файлами и 10 314 непустыми строками, печально в настоящее время зависящими от препроцессора C для создания.

Трудно объяснить, как я закончил тем, что использовал cpp для JavaScript: это было только взломом, и мне было нужно что-то, что дало мне, макрорасширение, ifdef, определяет, и включает без слишком большого усилия. Приблизительно после 3 секундных соображений я понял, что cpp "идеально подходил" для задачи:

  • Обеспечьте ЖУРНАЛ () макрос, который исчезает в режиме выпуска.
  • Обеспечьте УТВЕРЖДЕНИЕ () макрос, который исчезает в режиме выпуска и генерирует исключения, отмеченные с исходным файлом и номером строки.
  • ЖУРНАЛ подкачки () и УТВЕРЖДАЕТ () реализации для кода, который позволяет производить "проверенную" сборку, которая регистрирует события в компактной форме, как они происходят, которые сообщены к серверу, если катастрофический отказ происходит.
  • Замена 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, и хранит те двоичные файлы в репозитории проекта.

На помощь!

12
задан Brian Tompsett - 汤莱恩 21 February 2016 в 11:37
поделиться

1 ответ

Вы уже пробовали MCPP ? Это «портативный препроцессор C Preprocessor»

должен, что вы можете попробовать использовать универсальный макро-процессор (например, GEMA ) и построить достаточно CPP сверху.

3
ответ дан 2 December 2019 в 23:43
поделиться
Другие вопросы по тегам:

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