Подтвердить что ты не робот

Javascript-дружественная препроцессорная дилемма

Я работаю над проектом (почти законченным) 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!

4b9b3361

Ответ 1

Вы уже пробовали mcpp? Это "портативный препроцессор C"

Если это не удается, вы можете попробовать использовать общий макропроцессор (например, gema) и построить достаточно cpp поверх него.

Ответ 2

Я посмотрел на cpp и несколько других претендентов, основанных на ответах на подобные вопросы. Потом нашел то, что, на мой взгляд, лучший ответ - PHP. Рассмотрим:

1) PHP действительно является препроцессором (его в сокращенном виде). ​​

2) PHP готов к работе на большинстве серверов. Все, что вам нужно сделать, это либо изменить расширения файлов с ".js" на ".php", либо ".js.php", или (мои предпочтения) сделать простое редактирование в конфигурационном файле сервера (вы можете найти подробности в другом месте).

3) Многие разработчики JavaScript уже знакомы с экспертом или экспертом на PHP.

4) PHP - это Turing-complete, в отличие от многих других препроцессоров.

5) Вам понадобятся только базовые знания PHP, чтобы много выиграть.

6) Существует больше возможностей для документации/учебников/форумов для PHP, чем для других препроцессоров.

Но в основном, это так странно, что это круто. Благодаря тому, кто дал мне эту идею, я не могу найти свой пост в данный момент.