問題タブ [coreerlang]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2288 参照

javascript - コア Erlang 経由で Erlang を Javascript にコンパイルする

それで、LuvvieScript の進歩を開始し、Twitter ですべてが少し始まりました... https://twitter.com/gordonguthrie/status/389659700741943296

Anthony Ramine https://twitter.com/nokusuは、私のやり方が間違っていて、Erlang AST ではなく Core Erlang を介して Erlang から JavaScript にコンパイルするべきだと指摘しました。これは私にとって説得力のある選択肢ですが、魅力的ではありません... Twitterはその議論の適切な媒体ではないので、ここに書いてアドバイスを得ようと思いました.

戦略概要

LuvvieScript には 3 つのコア要件があります。

  • 同じパフォーマンスの Javascript にコンパイルされる Erlang の有効なサブセット
  • Javascript ではなく LuvvieScript でブラウザーでデバッグできるように、完全なソース マップ
  • LuvvieScript モジュールを実行するための「ランタイム」クライアント側 JavaScript 環境 (サーバー側通信を使用) (一種のページ内スーパーバイザ...)

これらのオプションの 3 番目は、この議論の範囲外ですが、最初の 2 つはコアです。

lazy-gits の当然の帰結があります - 私はできるだけ多くの Erlang および Javascript 構文ツール (レクサー、パーサー、トークナイザー、AST 変換など) を使用し、最小限のコードを記述したいと考えています。

現在の考え方

コードが現在次の構造として書かれている方法:

基本的に、次のような Erlang AST を取得します。

次に、次のような Javascript JSON AST に変換します。

エル プロブレモ

Anthony の主張はよくできています - Core Erlang は Erlang よりも単純化されたより正規の言語であり、単純な Erlang よりも Javascript へのトランスパイルがより容易になるはずですが、十分に文書化されていません。

Core Erlang の AST のような表現を簡単に取得できます。

ただし、行の列/番号はありません。したがって、JS を生成する AST を取得できますが、決定的に SourceMap は取得できません。

質問 1必要な行情報を取得するにはどうすればよいですか - (「通常の」Erlang トークンから列情報を取得できます...)

Erlang Core は、生成プロセスにおいて通常の Erlang とは少し異なります。これは、関数呼び出しで変数名を独自の内部変数に置き換え始めるためです。これにより、ソース マップの問題も発生します。例として、次の Erlang 節があります。

Erlang AST は名前を適切に保持します。

コア Erlang は、関数で呼び出されるパラメーターの名前を既に変更しています。

質問 2 Core Erlang で変数名を保存またはマップするためにできることはありますか?

質問 3コア Erlang が、Erlang にコンパイルやすく、Erlang コードを変更するツールを作成しやすいように明示的に設計されていることを高く評価しいます。

オプション

コアの erlang コードをフォークしてソース マッピング オプションを追加することもできますが、ここでは怠け者のカードをプレイします...

アップデート

Eric の回答に応えて、Core Erlang のセルレコードを生成する方法を明確にする必要があります。最初に、以下を使用して、プレーンな Erlang をコア erlang にコンパイルします。

次に、この関数でcore_scanとからニックネームを使用します。core_parsecompiler.erl

問題は、そのツールチェーンに注釈付きの AST を発行させる方法です。これらのオプションを自分で追加する必要があると思います:(