作家
登录

Python转JavaScript编译器,天了噜!还能转代码,到底怎么做到的

作者: 来源: 2017-11-07 15:48:14 阅读 我要评论

转化后的JavaScript代码是:

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

侧重同构转化的局限性存在于细微之处,有时两个说话之间的差别是难以处理的。例如,Python中可以应用“+”操作符连接列表,而如不雅在JavaScript中同构地应用“+”操作符,不仅会导致列表被转化为字符串,并且字符串会粘连在一路。当然,a + b可以被转换为__add__ (a, b),,然则因为a和b的类型在运行时才能肯定,这会导致即使对于1 + 1如许简单的工作,也会生成函数调用和动态类型检查代码。再给出一个关于若何解释“真值(truthyness)”的例子。空列表在JavaScript中的布尔值是True(或者true),而在Python中则是False。要在应用中全局地处理这个问题,须要对每个if语句履行一次转换,因为在Python构件if a:中不克不及剖断a是一个布尔型,照样列表等其它类型。是以 if a:必须转换为if( __istrue__ (a))。如不雅在内财揭捉?环如斯应用,会再次导致机能不高。

在Transcrypt中,嵌入代码中的编译指令(即编译指导)用于编译本地控制这类构件。这许可了应用标准数学符号编写矩阵计算,例如

M4 = (M1 + M2) * M3,同时不会对perimeter = 2 * pi * radius如许的语句生成任何额外的开销。大年夜语法上说,编译指导仅是在编译时履行对__pragma__函数的调用,而非在运行时。导入包含def __pragma__ (directive, parameters): pass的桩模块(stub module),可许可该代码无需修改即可在CPython上运行。此外,编译指导可以置于注释中。在避免定名冲突的同时同一类型体系

即就是只有一个参数的接口,如不雅参数指向的是一个复杂的、动态类型的对象构造,该接口就无法包管稳定的存眷分别。固然这类“4W”(Who did What,Why and When)编程模式固然带来了极大年夜的灵活性,但同时也导致了设计的延后,影响到大年夜量已有的代码。

Transcrypt同一了Python和JavaScript的类型体系,而非让它们邻接而居并及时转换。数据转换须要花费一些时光,还增大年夜了目标代码的范围以及内存的应用,进而增长潦攀垃圾收受接收的包袱,使得Python代码和JavaScript库间的交互难以处理。

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

个中的编译指导语句是可选的,它许可字典键值忽视引号,只是为了便利。除此之外,代码看上去异常类似于响应的JavaScript代码。你可以留意一下代码中是若何应用列表解析式的,这是在JavaScipt中依然缺乏的特点。开辟人员不消关怀Python字典的字面量(literal)是若何映射为JavaScript字面量对象的,他们可以在编写Python代码时应用Plotly.js的文档。转化并非是在幕后完成的。在任何情况下,Transcrypt字典都是一个JavaScript对象。

同一类型体系时会产生定名冲突。例如,Python和JavaScript字符串都具有一个split()办法,然则两者在语义上有很大年夜不合。还存在很多类似的冲突情况,Python和JavaScript仍在成长演变,将来还会有其它的冲突。

别号也许可大年夜Python标识符生成JavaScript标识符。例如,在JavaScript中许可将$符号作为定名的一部分,而在Python中是不许可的。Transcrypt严格遵守Python的语法,应用原生CPython解沃圃祧解析,语法与CPython雷同。一部分JQuery代码看上去如下:

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

因为Transcrypt应用编译而非解释,为许可参加极简化(minification)和气及所有模块的交付,必须在编译前肯定导入的库。为此,Transcrypt还支撑C风格的前提编译,这可以大年夜下面的代码片段中看到:

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

在Transcrypt运行时中,对JavaScript 5和6的代码之间的转换应用了同一机制:

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

这种方法推敲了较新版本JavaScript中的优化,并保持了向后兼容。在一些情况下,优化的优先级要高于同构:

Python转JavaScript编译器,天潦攀类!还能转代码,到底怎么做到的

一些优化是可选的,例如是否能激活调用缓存。这会导致直接反复调用持续而来的办法,而非经由过程原型链(prototype chain)。

比较静态类型与动态类型:脚本说话正走向成熟

对静态类型长处的承认正在清醒,TypeScript就是一个很好的例子。与JavaScript不合,静态类型语法是Python说话弗成瓜分的一部分,Python原生解析器就支撑静态类型语法。然则类型检查本身却留给了第三方对象,最有名的就是mypy。这是Jukka Lehtosalo的一个项目,Python的创建者Guido van Rossum也是该项目标供献者。为实如今Transcrypt中高效地应用mypy,Transcrypt团队也为项目供献了一个轻量级API,无需经由操作体系直接大年夜另一个Python应用激活mypy。固然mypy依然在开辟中,它已经可以在编译时捕获为数不少的输入缺点。静态类型检查是可选的,可以在本地经由过程插入标准类型注解来激活。一个应用注解的例子是mypy的in-porcess API:


  推荐阅读

  双11选购攻略 最适合吃鸡的游戏本配置一览

比来一段时光,《绝地求生》的火爆程度可以说是空前的了,赓续刷新着游戏界的记录,不过这款游戏的优化始终不是那么完美,想要顺博得进行游戏,硬件设备也必须要跟得上。正好碰到了一年一>>>详细阅读


本文标题:Python转JavaScript编译器,天了噜!还能转代码,到底怎么做到的

地址:http://www.17bianji.com/lsqh/38569.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)