问题标签 [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 - 通过 Core Erlang 将 Erlang 编译为 Javascript

所以开始在 LuvvieScript 上取得进展,然后一切都在 Twitter 上开始了...... https://twitter.com/gordonguthrie/status/389659700741943296

Anthony Ramine https://twitter.com/nokusu指出我做错了,我应该通过 Core Erlang 而不是 Erlang AST 从 Erlang 编译到 JavaScript。这对我来说既是一个引人注目但又不吸引人的选择...... Twitter 不是该讨论的正确媒介,我想我会在这里写下来并获得一些建议。

战略概述

LuvvieScript 具有三个核心要求:

  • Erlang 的有效子集,可编译为相同且高性能的 Javascript
  • 一个完整的 Source Map,以便可以在浏览器中使用 LuvvieScript 而不是 Javascript 进行调试
  • 一个“运行时”客户端 javascript 环境(带有服务器端通信),用于执行 LuvvieScript 模块(一种页内主管......)

这些选项中的第三个有点超出了本次辩论的范围,但前两个是核心。

有一个惰性 gits 推论——我想尽可能多地使用 Erlang 和 Javascript 语法工具(词法分析器、解析器、标记器、AST 转换等)并编写最少的代码。

目前的想法

代码的方式目前写成如下结构:

基本上我得到一个看起来像这样的 Erlang AST:

然后我将它转换成一个 Javascript JSON AST,如下所示:

问题

Anthony 的观点说得很好——Core Erlang 是一种比 Erlang 更简单且更常规的语言,并且应该比普通的 Erlang 更容易转译为 Javascript,但它的文档记录不是很好。

我可以很容易地获得类似 AST 的 Core Erlang 表示:

但没有行列/编号。所以我可以得到一个可以生成 JS 的 AST——但关键不是 SourceMaps。

问题 1如何获取我需要的行信息 - (我已经可以从“普通”Erlang 令牌中获取列信息......)

Erlang Core 在生产过程中与普通 Erlang 略有不同,因为它开始将函数调用中的变量名替换为自己的内部变量名,这也会导致一些 Source Map 问题。一个例子是这个 Erlang 子句:

Erlang AST 很好地保留了名称:

Core Erlang 已经改变了函数中调用的参数的名称:

问题 2我可以在 Core Erlang 中保留或映射变量名吗?

问题 3我很欣赏 Core Erlang 的明确设计是为了让编译Erlang 和编写改变 Erlang 代码的工具变得容易——但问题真的会让从Erlang编译出来更容易吗?

选项

我可以分叉核心 erlang 代码并添加源映射选项,但我在这里玩Lazy Man卡......

更新

作为对 Eric 的回应,我应该澄清我是如何生成 Core Erlang cerl 记录的。我首先使用以下方法将我的普通 Erlang 编译为核心 Erlang:

然后我在这个函数中使用core_scan和从:core_parsecompiler.erl

问题是我如何/我可以让该工具链发出带注释的 AST。我怀疑我需要自己添加这些选项:(

0 投票
1 回答
140 浏览

erlang - 将 Core Erlang 表单转换为 Erlang 源代码字符串

我有带有cerl模块的 Core Erlang 表单结构。我希望将它“反编译”成 Erlang 源代码字符串。

我虽然可以做这样的事情:

但是erl_syntax:form_list/1返回一个空列表。

0 投票
1 回答
127 浏览

erlang - 选择 AST 来为 Elixir 开发静态代码分析器?核心 Erlang 还是扩展 Elixir AST?

我们希望static code analyser为 Elixir 开发一个以检测并发问题(主要是死锁和竞争条件)。我们对分析器的结构有一些基本的想法,但我们的问题是哪种 AST 更适合这项任务。正如我们所了解的,Elixir 编译过程创建了 Expanded Elixir AST、Abstract Erlang Format 和 Core Erlang。

我的问题是扩展 Elixir AST 或 Core Erlang 是否更适合创建调用图和控制流图。如果我们使用 Core Erlang,是否有可能从 Core Erlang 向后工作,以在 Elixir 代码中找到分析器识别的问题的源代码?

如果有人对此有所了解,我们将非常感谢您的帮助。:)