python语言核心理念是什么_Python 编程语言的核心是什么?

article.php?pk=5f0c2caeb15ec04d7c36b407

作者 | 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 是否需要 REPL?

我真正开始思考这个问题是当我开始思考将 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 翻译,转载请注明来源出处。

更多精彩推荐

点分享

点点赞

点在看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值