Jint: Ecma v6

创建于 2016-03-01  ·  13评论  ·  资料来源: sebastienros/jint

jint 会支持 ecma version6 吗?

最有用的评论

为了实现对此的支持,我将打字稿源代码传递给 jint,并将我的源代码传递给它。 它实际上没有我预期的那么慢,而且我有 es6 支持(以及打字稿!)

一些伪代码

var typescript = File.ReadAllText("js/typescript/typescript.js");
var mc = engine.Execute(typescript);
var tsc = mc.GetValue("ts");
var cc = tsc.AsObject().Get("transpile");
var c = cc.Invoke(YOURACTUALSOURCECODESTRING).AsString();
var result = engine.Execute(c);

所有13条评论

最终。 这是一个非常受欢迎的问题/请求,所以我认为它应该值得考虑,更重要的是当前的实现看起来非常完整且没有错误。 新规范将在接下来的几周内发布,所以为什么不开始呢。

计划可能是一一添加对特定功能的支持,并在它们准备就绪时发布。 解析器和对象模型可以首先作为一个整体来完成,就像我在 ES5 中所做的那样,然后处理每个 ES6 特性。 甚至可以是一个共同的努力。

我还需要找到一个好的测试套件来验证功能。

Create 将看看我是否有时间制作 puæl requst :)

为了实现对此的支持,我将打字稿源代码传递给 jint,并将我的源代码传递给它。 它实际上没有我预期的那么慢,而且我有 es6 支持(以及打字稿!)

一些伪代码

var typescript = File.ReadAllText("js/typescript/typescript.js");
var mc = engine.Execute(typescript);
var tsc = mc.GetValue("ts");
var cc = tsc.AsObject().Get("transpile");
var c = cc.Invoke(YOURACTUALSOURCECODESTRING).AsString();
var result = engine.Execute(c);

想过,但从来没有尝试过,太棒了。 我们甚至可以想象一种模式,Jint 会自动加载 typescript 来执行 Ecma2015。 只有一个选择。

或者类似的东西:

var engine = new Engine();
var result = engine.Execute(someScript, Version.Ecma2015);

在第一次调用此选项时,我们只需要从资源文件中加载 TypeScript。 它将在引擎调用中重复使用,并且不会影响当前性能,因为这将按需注入。

我已经取得了相当大的成功。 最初的转译命中很粗糙,但它产生的代码是干净和高性能的。 可能是一个有趣的标志,你只需要跟上不断变化的打字稿版本。

ES6 方面的一些新闻。 在过去的几个月里,我一直在积极致力于实现对 ES6 的支持。 这是一项巨大的工作,我取得了一些进展。

计划是这样的:

  • 将 ES6 版本的 Esprima 解析器移植到 C#,就像我为当前在 Jint 中使用的 ES5 所做的那样。
  • 更新 Jint 2 以使用新的 ES6 解析器,并弃用旧的解析器。
  • 并行实现每个 ES6 功能。

新的解析器可能会作为一个单独的包发布,只是为了确保人们可以自己使用它,用 JS 操作做一些疯狂的事情。

好消息是,今天早上我有一个完整的 ES6 解析器。 它还不是可打包的形式,但 Esprima 的所有单元测试都在工作。 它包括语法错误和范围/位置信息。
一旦解析器被集成,每个人都将能够帮助实现新功能,并从中受益。

它现在在 github 上: https :

创建 :) 谢谢 :)

@dested :我尝试了建议的代码来导入打字稿并使用转译器。
执行 typescript.js 文件(版本 2.6.2)时,我收到此“消息:Esprima.ParserException:第 27 行':对象文字中不允许重复的 __proto__ 字段

还有其他人像这样使用打字稿吗?

@dested你能提供一些演示项目吗?

总的来说:我喜欢在 Jint 中支持打字稿的想法。
但是,我确实认为这不是它的主要关注点。

所以也许应该有一个额外的 jing-typescript 包

例如

  • 金特
  • jint.typescript(取决于 jint, typescript)

@gentledepp

那是 2016 年年中,我使用的是 TypeScript 1.6,我还没有在更高版本上尝试过。 代码工作是这样的

var typescript = File.ReadAllText("js/typescript/typescript.js");
var typescriptProgram = engine.Execute(typescript);
var tsc = typescriptProgram.GetValue("ts");
var transpileFunc = tsc.AsObject().Get("transpile");
var jsOuput = transpileFunc.Invoke(typeScriptProgram).AsString();
var jsProgram= engine.Execute(jsOuput);

请按照 #343 获取更新,事情正在进展中,更新已发送到那里。

此页面是否有帮助?
0 / 5 - 0 等级