近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置大量机器学习算法,Python 在开发者中逐渐流行起来。
尽管如此,我们却很难在移动设备中看见用 Python 开发的应用程序。
基于此,Python 之父 Guido van Rossum 和部分 Python 开发者都希望未来有天能看见用 Python 编写的应用能在 iOS 和 Android 设备上运行。其中 Russell Keith-Magee 发起了BeeWare 项目,该项目旨在将 CPython 移植到 Android,即用 Python 编写的应用可以在 Android 上本地运行。
按理说,在 BeeWare 项目取得了初步成功后应值得庆贺,但 Guido van Rossum 却清晰地认识到:Python 在移动设备和浏览器领域中都存在“痛点”。
1、在 Android 上运行纯 Python 应用障碍重重
BeeWare 项目成立的目标是让开发者能用 Python 编写应用程序,而在去年 2 月,这一目标初步实现了第一个里程碑:一个纯 Python 应用程序在可以在 Android 设备上运行!
彼时,Russell Keith-Magee 就指出:“这不是项目的结束——而是开始。”如他所说,BeeWare 项目的追求,绝对不仅仅是 Python 应用可以运行在 Android 上就满足了。
BeeWare 的目标是让开发者能用 Python 编写的应用程序,在包括 iOS、Android、Windows、macOS、Linux、浏览器和 tvOS 上都能很好地运行。但问题在于,Python 无法像台式机系统那样应用于移动设备。
为了解决这个缺点,Python 软件基金会去年向 BeeWare 项目给予了 50000 美元的资助,以使其对 Android 的支持水平有所提高,而 CPython Android 端口必须支持运行 4.4 或更高版本的大多数现代 Android 设备。
对此,MongoDB 工程师兼 Python 贡献者 A Jesse Jiryu Davis 表示:“BeeWare 的策略是将 Python 编译为 Java 字节码,但如今 Android 设备足够快,并且 Android 内核足以运行 CPython 本身。”
不过 Davis 指出这项计划的一个主要障碍就是用 Python 编写的 Android 应用程序的规模。因为 Python 应用需要自己的运行环境副本,所以这就意味着 Python 需要缩小规模以顺利运行在移动设备。对此,有些人建议可以通过创建一个简化内核版本的 Python 以解决该问题。
另外,构建 Python 应用程序对普通的 Python 开发者而言也是完全陌生的领域。Davis 解释道:“没有子进程;套接字和信号行为都与常规 Unix 有所不同;并且禁止许多 syscall。”
除此之外,资金和人才也是一大难题。Python 软件基金会中的 Ned Deily 认为,相比许多其他 Python 计划,提供移动支持需要更多的资金和人力。Davis 也表示,由于 Python 不支持移动设备,因此没有公司为移动设备上的 Python 提供资金,也没有人愿意依靠移动设备来为 Python 筹集资金。
2、Python 在浏览器和移动设备上不成功的原因
对于 Python 在移动设备上艰难的发展,近日 Python 之父 Guido van Rossum 也给予了正面回应:“许多人都觉得,如果移动应用程序可以用 Python 编写,那就太好了。实际上也有一些人在为此努力实现,但 CPython 已有 30 年的历史了,它最初是为工作站、台式机和服务器环境而诞生的。”
他补充道:“但那些设法让 CPython 能在移动设备上运行的人们发现,Python 消耗了太多的资源。”
Guido van Rossum 指出,与期待中在移动操作系统运行的情况相比,Python 又大又慢:运行 Python 编写的应用会迅速消耗电池电量和内存。
不仅如此,他还承认 Python 在浏览器中可能也没有前途。
“虽然 Python 在后端 Web 开发中很流行,但的确 JavaScript 在前端 Web 开发中占主导地位。”他表示,越来越多的 Web 开发人员都在使用微软的 JavaScript 超集——TypeScript。
Guido van Rossum 总结为:“Python 是一种非常流行的后端语言。在谷歌,我从事的项目都基于 Python 构建;在 Dropbox,整个 Dropbox 服务器都是基于 Python 构建的。但你如果看浏览器中运行的是什么代码,那必然是 JavaScript 的世界。”
不过对此 Guido van Rossum 并不气馁,他认为 Python 应该专注于有利的应用领域,包括后端网络和科学数据处理。
除此之外,Python 之父也对 Julia(一种可能在科学计算和机器学习领域跟 Python 竞争的编程语言,但没有如 Python 那般丰富的机器学习和数据科学库)发表了一些看法:Julia 是一种非常像 Python 的有趣作品。
他认为,Julia 在很多的细节上与 Python 非常相似,并且在其编译器优化代码方面更胜 Python 一筹。但总体看来,Julia 还颇有不足,属于一种“小众语言”。