12

私は(ほぼ完成した)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のバージョンを静的にビルドし、それらのバイナリをプロジェクトのリポジトリに保存することです。

ヘルプ!

4

2 に答える 2

3

すでにmcppを試しましたか?これは「ポータブルCプリプロセッサ」です

それが失敗した場合は、汎用マクロプロセッサ(gemaなど)を使用して、その上に十分なcppを構築してみてください。

于 2010-01-15T16:00:30.460 に答える
0

同様の質問への回答に基づいて、cppと他のいくつかの候補を調べました。それから私が断然最良の答えだと思うものを見つけました-PHP。検討:

1)PHPは確かにプリプロセッサです(頭字語で)。

2)PHPはほとんどのサーバーで使用できるようになっています。ファイル拡張子を「.js」から「.php」または「.js.php」に変更するか、(私の好みで)サーバー構成ファイルを簡単に編集するだけです(詳細は他の場所で確認できます)。 )。

3)多くのJavaScript開発者は、すでにPHPに精通しているか専門家です。

4)PHPは、他の多くのプリプロセッサとは異なり、チューリング完全です。

5)多くの利益を得るには、基本的なPHPの知識だけが必要です。

6)PHPには、他のプリプロセッサよりもはるかに多くのドキュメント/チュートリアル/フォーラムがあります。

しかし、ほとんどの場合、それはとても奇妙でクールです。私にアイデアをくれた人に感謝します-私は現在彼らの投稿を見つけることができません。

于 2017-11-18T07:00:43.470 に答える