私は(ほぼ完成した)Javascriptプロジェクトに14か月余り取り組んできました。プロジェクトは私が一晩で終了することを期待していたハックとして始まりましたが、時間の経過とともにJavascriptの部分は68の個別のファイルと10,314の空でない行に成長し、残念ながら現在はCプリプロセッサに依存しています。
Javascriptにcppを使用することになった経緯を説明するのは難しいです。これは単なるハックであり、マクロの拡張、ifdef、定義、およびインクルードをあまり手間をかけずに行うことができるものが必要でした。約3秒間検討した後、cppがこのタスクに「完璧」であることに気付きました。
- リリースモードで消えるLOG()マクロを提供します。
- リリースモードで消え、元のファイルと行番号でタグ付けされた例外を生成するASSERT()マクロを提供します。
- LOG()とASSERT()の実装をコードと交換して、「チェック済み」ビルドを生成できるようにします。これにより、イベントが発生するとコンパクトな形式でログに記録され、クラッシュが発生した場合にサーバーに報告されます。
- Pythonバックエンドと共有されている構成ファイルに基づいて、PROJECT_SOME_CONFIG_VAR_NAMEを「1」に置き換えます。
すべての真のハックと同様に、このハックはプロジェクトにハードコードされているため、それを置き換えるために必要な作業について考えることすら本当に嫌です。私のプロジェクトは、コードベースを(ラップトップではなく)専用のテストサーバーに移動する段階に達していますが、Linuxインスタンスをセットアップすると、4.1以降のGNUcppバージョンではJavascriptが前処理されなくなることがわかりました。エラーでクラッシュします。
ビルド要件のリストに特定のバージョンのGCCを追加するのではなく、この混乱を本当に修正するのに今が良い時期だと思いました。しかし、私の問題は、cppと同じパワーと機能を備えた代替のプリプロセッサが見つからないことです。私はm4を検討しましたが、m4はそれ自体が苦痛の世界です。私が見つけた他のJavascript固有のプリプロセッサには、現在依存しているすべての機能が欠けています。例:
__FILE__
&__LINE__
- 可変個引数マクロ
- 警備員を含める
- トークンの連結
- 条件付きコンパイル
私は、Javascript専用の新しいプリプロセッサを実装することを真剣に検討しています。これは、Cプリプロセッサの構文が非常にうまく機能しているため、完全に借用しています。そうする前に、もっと良いオプションがあるかどうか疑問に思っています。:)おそらく、私が交換できるcppのような汎用プリプロセッサがすでにありますか?これらの68個のファイルのすべてのプリプロセッサ構文を置き換えるために必要な作業は、単にプリプロセッサを再実装するために必要な作業量に近づきます。
これまでCプリプロセッサに依存して成功したことに非常に驚いています。心が理解することは健康よりもこの仕事でより効果的です。私が利用できるもう1つのオプションは、Linux、Darwin-i386、Win32用のcpp-4.1のバージョンを静的にビルドし、それらのバイナリをプロジェクトのリポジトリに保存することです。
ヘルプ!