时间:2022-10-09 18:00:38 | 浏览:424
作者 | Brett Cannon
译者 | 弯月,责编 | 王晓曼
头图 | CSDN下载自视觉中国
出品 | CSDN(ID:CSDNnews)
以下为译文:
我想要用Python实现WebAssembly,这并不是什么秘密。这不仅可以让Python进入浏览器,而且由于iOS和Android都支持将JavaScript作为应用的一部分运行,因此Python也可以进入移动开发。想到这些我就觉得兴奋。
但是每当想到创建一个新Python实现的艰巨任务时,我就会不断地问自己:
“Python究竟是什么?”
我们使用CPython已经很长时间了,以至于我怀疑我们大多数人都认为“ Python == CPython”。PyPy试图将兼容做到极致,所以他们打算实现CPython的实现细节。基本上,我所知道的大多数Python实现都会为通过CPython的测试套件而努力,并尽可能与CPython兼容。
这就有点可怕了。
CPython实现的Python非常动态,它公开了许多东西,只有当你以某种方式使用解释器实现Python才有意义。例如,PyPy有一个基本的解释器使用JIT,但是你可以通过Python中的很多东西来迫使PyPy关闭JIT并坚持使用字节码。仅凭REPL就让Python变得十分动态,因为输入到REPL的所有内容都会由解释器动态地解析、编译和执行。
因此我开始思考:Python到底是什么的问题?这门语言的核心究竟是什么?究竟Python实现需要覆盖到哪些基本功能,才能成为人们心目中认可的Python实现?还有以我来看,将Python直接编译成WebAssembly的实现需要付出多少代价?
我真正开始思考这个问题是当我开始思考将Python编译成WebAssembly都需要什么的时候。这并不是要实现另一个解释器,而是从Python源代码产生静态的WebAssembly,并且它依然可以称为“Python”。
我知道的,通过eva或compile进行动态编译可能不容易实现,因为WebAssembly的安全模型会在加载时验证模块。这意味着没有办法在其他代码的内存空间内运行任意代码,这可能会加剧实现REPL的难度。
但这让我思考:Python真的需要REPL吗?别误会我的意思,它非常方便,但是我的意思是,如果某个实现不包含REPL,那么它还是Python吗?我认为无REPL的Python仍然是Python,只是缺少(可能是关键的)功能。
这不禁让我思考必须将Python的哪些部分视为“ Python”的想法。
没有locals行不行?能够将定义的所有局部变量及其值都收集到一个字典中,这是非常动态的东西。如果你使用像CPython这种解释器,那么只需要从当前的执行帧里取一些东西就能获得locals。但在编译语言中,实现这一点需要大量工作,因为你必须知道应当何时收集这些信息,因为调用locals的时候并不一定所有信息都存在。
如果有人重载了locals怎么办?同样,在CPython中这也不是什么问题,因为builtins模块有一个__dict__属性,只需要重载它,就会向下传递到以后的调用中。但在编译语言中,做类似的检测需要大量的工作,最终会影响性能。
那么sys.settrace呢?它会触发每个字节的回调,而如果代码已经编译,这一点是无法实现的。尽管你可以通过检查每行末尾是否设置了跟踪函数来模仿这一行为,但这似乎有点过了,因为绝大多数情况下这种钩子并不存在(尽管可以实现为编译器开关)。
那么sys._getframe呢?编译语言并不一定能够直接访问每个执行帧,那么你还要不要模拟这一行为?由于任何函数都可以请求执行帧,你必须时刻准备着提供执行帧。
可见,Python中有很多东西加剧了编译的难度(因此Nuitka拥有更大的能力来应对这一挑战)。但是我敢打赌,上面提到的内容在99.9%的情况下都不会使用,因此,如果这些功能没有实现,那么是否仍可以将其视为“Python”?
这个问题我没有很好的答案。但是这个问题的答案标志着实现Python的难度以及与现有软件的兼容性。我会说,我认为WebAssembly不需要支持大量的Python软件。WebAssembly可以访问Rust和JavaScript等其他语言生态系统,因此你需要的某个东西完全有可能在其他语言中已经实现了。
也许我们可以开发一个将Python代码直接转换为WebAssembly并牺牲性能兼容性的编译器。也许我们可以开发针对WebAssembly设计的解释器,同时与先前已有的代码保持兼容性。也许可以仅在其WebAssembly工作中支持RustPython。也许Pyodide可以实现这一点。我认为这些都有可能,这些都有可能激发人们的兴趣,进而产生更好的结果。
对此,你怎么看呢?欢迎下方留言,分享你的想法。
原文:
https://snarky.ca/what-is-the-core-of-the-python-programming-language/
本文为 CSDN 翻译,转载请注明来源出处。
苹果的iPhone 14系列已经于9月9日正式开启了预售,目前距离预售已经过去了接近一个月的时间,但是最后一款iPhone 14 Plus还没有正式开售。虽然现在还没有上市,但是iPhone 14系列的热度已经下降下来了,只有iPhone
IT之家 9 月 8 日消息,Apple 今天宣布推出 iPhone 14 和 iPhone 14 Plus,在备受欢迎的 6.1 英寸显示屏基础上,新增 6.7 英寸显示屏;搭载全新双摄系统和车祸检测功能;具备 iPhone 最佳电池续航
你的钱准备好了吗?2018年款iPhone已经正式登场,在未来1年中你会挑选哪款iPhone陪伴你呢?如果目前已经拥有iPhone X是否有必要升级iPhone XS Max?现在是购买iPhone 7或者7 Plus的最佳时机?带着这些疑
明天凌晨,我们将正式迎来今年的新iPhone(iPhone X/8/8 Plus),对于iPhone而言,今年已经是第十周年,下面我们一同来回顾这十年来的12款iPhone。(图片引自搜狐科技)
苹果一年一度的手机发布会9月9日就亮相了,在我的印象里,自从iPhone4代开始,每一代的iPhone都会成为一代街机,当然这里的街机不是贬义词,因为无论是从外观,还是实用性还是逼格,iPhone都能满足。总觉得在中国,无论是月薪2000还
苹果手机非常的耐用相信iPhone用户都知晓,当目前为止,小编身旁还有很多在使用iPhone6、iPhone7,只不过最近他们都去换了一次电池,然后就像满血复活了一样,不过当下在售的iPhone手机有很多,但并不是每一款都值得入手,以下3款
2017-09-12 05:45:00 作者:邓旭明天凌晨,我们将正式迎来今年的新iPhone(iPhone X/8/8 Plus),对于iPhone而言,今年已经是第十周年,下面我们一同来回顾这十年来的12款iPhone。(图片引自搜狐科
央广网北京7月11日消息(总台央广记者李行健 韩雪莹)据中央广播电视总台中国之声《新闻纵横》报道,近年来,处于资本风口的少儿编程市场发展迅猛,从4岁到16岁的儿童都成为了少儿编程课程的潜在客户。与此同时,有关“儿童是否需要提早接触编程课?”
如今,与“少儿编程”有关的广告、宣传越来越多,已经成了一个明显趋势。6月5日,《新京报》的一篇深度报道,为读者展示了正在高速发展与扩张的儿童编程培训市场的一角。一家教育类垂直媒体发布的《2018年教育行业蓝皮书》显示,截至2018年8月,已