Python 还是 JavaScript?虽然不少朋友还在争论二者目前谁更强势、谁又拥有着更为光明的发展前景,但毫无疑问,二者的竞争在 Web 前端领域已经拥有明确的答案。立足于浏览器平台,如果放弃 JavaScript,我们也就没什么可选择的项目了。

好吧,也许答案也不是这么绝对。JavaScript 已经成为众多其它编程语言争相选择的转换目标(相关实例包括 TypeScript、Emscripten、Cor 以及 Cheerp)。而 Python 则拥有庞大的追随者群体,另外现有的强大库资源则使其成为面向 JavaScript 的理想待转换或者说转译选项。

下面来看四个能够顺利将 Python 带入 JavaScript 世界的项目:

Transcrypt

这是一款新近崛起的 Python 到 JS 转译器。Transcrypt 对于自身所生成代码的质量水平做出了令人印象深刻的承诺。首先,它会尽可能多地保留原始的 Python 代码结构,包括多重继承以及 lambda 表达式。Python 源代码也可以直接对 JavaScript 中命名空间内的对象进行调用。如果大家尝试访问 Python 中的 document.getElementById,则转换后的代码也将在JavaScript 当中切换使用 document.getElementById。

根据说明文档的介绍,Transcrypt 是利用 CPython 的抽象语法树模块完成这些转译任务的,其能够根据 Python 对自身代码的解析方式进行编程访问。尽管该项目目前仍处于 alpha 测试阶段,但已经显示出了非常惊人的吸引力。

Jiphy

所谓 Jiphy,代表的是“JavaScript 入,Python 出”——也就是能够对二者进行双向转换。另外,来自两种语言的代码都能够在被转换为另一种语言之前进行混合。

Jiphy 目前的最大短板在于其仅支持 Python 的一部分功能集。类以及默认参数尚不受支持,不过装饰器与例外机制已经可以正常使用。这主要是因为 Jiphy 坚持在源代码与目标代码之间采用行对行直接转译方式,不过其开发人员也开始着眼于 ES6 中的新功能,旨在将更多高级 Python 功能纳入支持范畴。

Brython

也许有一天,当 WebAssembly 设想成为现实,那么我们将能够选择任何自己偏好的语言进行 Web 开发。而 Brython 对此——或者说至少适用于 Python 3——有着自己的理解:为什么要等?

Brython 通过一套 JavaScript 库对 Python 3 中的全部关键字以及大多数内置插件进行模拟,从而实现了将 Python 3 版本作为客户端 Web 编程方案的目标。由 Python 编写的脚本可以被直接添加到网络页面当中,而 Brython 还支持一套高级 Python模块界面(browser),用于同 DOM 进行执行协作,且该浏览器通常可在 JavaScript 中直接完成。

然而,Brython 也保持了浏览器给 JavaScript 代码带来的限制——例如不支持对本地文件系统进行处理。

RapydScript

RapydScript 承诺“让 Python 式 JavaScript 代码不再糟糕。”该项目在概念上类似于 CoffeeScript:以 Python 形式进行代码编写,生成 JavaScript 代码,并同时发挥二者的最佳特性。在 Python 方面,其拥有清晰的语法规则; 而在 JavaScript 方面,其拥有匿名函数、DOM 操作并能够使用 jQuery 或者 Node.js 内核等现有 JavaScript 库。

http://www.qytang.com/cn/list/28/576.htm
http://www.qytang.com/cn/list/28/523.htm
http://www.qytang.com/cn/list/28/499.htm
http://www.qytang.com/cn/list/28/488.htm
http://www.qytang.com/cn/list/28/466.htm
http://www.qytang.com/cn/list/28/463.htm
http://www.qytang.com/cn/list/28/458.htm
http://www.qytang.com/cn/list/28/455.htm
http://www.qytang.com/cn/list/28/447.htm
http://www.qytang.com/cn/list/28/446.htm
http://www.qytang.com/cn/list/28/445.htm
http://www.qytang.com/cn/list/28/444.htm
http://www.qytang.com/cn/list/28/442.htm

最新文章

  1. Any changes made by a writer will not be seen by other users of the database until the changes have been completed
  2. 利用a标签特性解析地址(附加属性说明)
  3. jQuery和Ajax的使用(杂记)
  4. 说一说vector<bool>
  5. iOS-UIView-设置背景图片4种方式
  6. 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。[手稿]
  7. BIRT使用1:简介、概念、元素、报表设计器组成
  8. 搜索提示時jquery的focusout和click事件沖突問題完美解决
  9. 维基百科上—数据仓库、数据挖掘、OLAP三者之间的区别
  10. 第十九篇 js高级知识---词法分析和AO 链
  11. Java多线程小总结
  12. __http原理__02__HTTP请求方法
  13. 15.3-uC/OS-III资源管理(多值信号量)
  14. Spring再接触 IOC DI
  15. 解决yum安装ftp提示仓库 的 GPG 密钥已安装,但是不适用于此软件包。
  16. ElasticSearch 6.x head插件安装
  17. 关于形如--error LNK2005: xxx 已经在 msvcrtd.lib ( MSVCR90D.dll ) 中定义--的问题分析解决
  18. 装饰模式和它在JDK中的实现
  19. 【转载】vim 中如何替换选中行或指定几行内的文本
  20. sse 与 socket 摘录-推送常用技术

热门文章

  1. jmeter数据关联_后置处理器_正则表达式提取器
  2. Redis: Redis支持五种数据类型
  3. 使用SLF4J和LOGBACK (一 : 基本使用)
  4. 第十章 hbase默认配置说明
  5. ASP.NET MVC5入门指南
  6. javscript踩过的坑 - 记录
  7. python _/__/__**__区别
  8. WebService与WCF
  9. 爬虫之 图片懒加载, selenium , phantomJs, 谷歌无头浏览器
  10. ansible初识三