python编程的核心是什么?

为什么Python编程的核心是什么?
我想让python实现这一点,这已经不是什么秘密了。Webassembly不仅可以让python进入浏览器,而且两者都支持将Javascript作为应用程序的一部分运行,它还可以让python进入移动平台。所有这些都让我兴奋不已。
但当我想到创建python来实现这项艰巨的任务时,我的大脑也开始问它是什么。是python吗?我们一起生活了很长一段时间。我怀疑我们大多数人只是认为“Python==CPython“。皮皮试图这样做,他们将实现CPython的细节。基本上,据我所知,Python的大部分实现都试图通过CPython测试套件,并尽可能与CPython兼容。
这太可怕了。CPython实现的Python非常动态,暴露了很多只有在你使用解释器实现Python时才有意义的事情。例如,PyPy有一个基线解释器,它使用JIT,但很多东西可以在Python中使用,迫使PyPy关闭JIT并继续使用字节码。REPL本身使事情非常动态,因为您输入REPL的所有内容都是由解释器动态分析、编译和执行的。
这让我想起了什么是Python?语言的核心是什么?为了真正称自己为Python的实现,所有Python的实现都需要覆盖哪些基线,人们仍然会意识到这一点?或者从我的角度来看,直接将Python编译成Webasembly,仍然被认为是Python,需要实现多少?
Python需要REPL吗?
真正让我思考这个问题的是,当我开始思考如何将Python编译成Webasembly时?另一个解释器没有实现,但实际上静态Webasembly是从Python源发出的,仍然合理地称之为“Python”。
我知道的一件事是,Webasembly安全模型在加载时很难通过动态编译eval()或compile()来验证模块。这意味着在其他代码的内存空间中没有只运行任何代码的结构化结构,这可能会使REPL的实现非常困难。
但这让我想:Python真的需要REPL吗?不要误解我的意思。很方便,但是如果没有REPL,就不会变成Python吗?我觉得没有REPL的Python还是Python,只是缺少一个(可能的键)特性。
Python的哪些部分需要被视为“Python”?
你能活下去吗?locals()?在字典中随意收集所有定义的局部变量及其值是非常动态的。如果你在整数(如CPython)中,你只需要从当前的执行框架中收集一些内容就可以获得局部变量。但是在编译语言中,需要做更多的工作,因为你必须知道什么时候收集所有这些信息,因为你不一定只是在呼叫时躺在那里。locals().
还是别人locals()本身?再说一次,这在CPython中不是什么大问题,因为builtins模块有__dict__你可以覆盖它,它将简单地传播到任何未来的呼叫。但在一种编译语言中,做这个测试需要付出更多的努力,这样的测试最终会花费性能。
关于sys.settrace()?它实际上触发了每个字节码的回调,如果编译了代码,它就不起作用了。你可以检查每行后是否设置了跟踪函数来伪造它,但当大多数时候没有这样的钩子时,它看起来有点麻烦(但在这种支持下,编译可能是一个编译标志)。
你怎么想呢?sys._getframe()?编译后的语言可能不会直接访问执行框架,所以需要模拟吗?由于任何函数都可以要求执行框架,您需要随时准备提供执行框架。
正如你所看到的,Python中有很多东西使得编译变得困难(因此,它们如此强大,以至于努特卡接受了这一挑战)。但我敢打赌,我上面提到的——你不会在99.9%的时间内使用它们,所以如果一个忽略了它们,它也可以被认为是“Python”吗?
四、有用需要多少兼容性?
我对这个问题没有很好的答案。但它的答案决定了Python有多困难,以及它与现有软件的兼容性。我想说的是,我认为Webasembly不需要支持大量的Python软件。Webasembly可以访问Rust和Javascript等其他语言生态系统,因此您需要使用另一种语言来实现其他语言的可能性必须超过零。
我没有答案
开发一个直接将Python代码转换为Webassembly并为性能牺牲一些兼容性的编译器可能是有意义的。开发一个为Webasembly设计但与现有代码保持大量兼容性的解释器可能是有意义的。简单地支持Rustpython在他们的Webasembly努力中的努力。也许皮笛会把我们带到那里。我不认为这些可能性本质上是错误的。它可能归因于任何足以激发人们兴趣并看到它对他人有用的东西。
本文翻译BRETT CANNON《What is the core of the Python programming language?》
Python编程学习可查看:Python编程自学:一小时python入门教程
