为什么问这个问题?

我们需要一个用于WebAssembly的Python实现,这已经不是什么秘密了。它不仅将Python引入到浏览器中,而且由于iOS和Android都支持将JavaScript作为应用的一部分运行,它也将Python引入到移动端。这一切都让我兴奋。

但是,当想到创建一个新的Python实现这一令人生畏的任务时,我的大脑也开始问这个问题:Python到底是什么?我们与CPython一起生活了这么长时间,我怀疑我们中的大多数人只是简单地认为“Python == CPython”。PyPy试图做到兼容,以便实现CPython的实现细节。基本上,我所知道的大多数Python实现都努力通过CPython的测试套件,并尽可能地与CPython兼容。

这是令人生畏的。由CPython实现的Python是非常动态的,并且暴露了许多只有在使用解释器实现Python时才有意义的东西。例如,PyPy有一个用于JIT的基线解释器,但是在Python中可以使用许多东西来强制PyPy关闭JIT并坚持使用字节码。仅靠REPL就可以使事情变得非常动态,因为解释器会立即对进入REPL的所有内容进行动态解析、编译和执行。

这让我开始思考Python到底是什么?这门语言的核心是什么?所有的Python实现需要涵盖什么样的基线,才能真正能够将自己称为人们仍能认出的Python实现?或者从我的角度来看,一个人需要实现多少才能直接编译Python到WebAssembly,并且仍然被认为是Python实现?

Python需要REPL吗?

真正让我开始思考这个问题的是当我开始思考如何将Python编译成WebAssembly?没有实现另一个解释器,但实际上发出静态WebAssembly从Python源代码,并仍然合理地称为“Python”。

我知道的一件事是,通过eval()或compile()进行动态编译可能不太容易,因为WebAssembly的安全模型在加载时验证模块。这就意味着在其他代码的内存空间中并不存在运行任意代码的结构,这可能会使REPL的实现变得棘手。

但这让我思考:Python真的需要REPL吗?不要误解我的意思,它非常方便,但是如果一个实现没有REPL,它就不再是Python了吗?我认为没有应答的Python仍然是Python,它只是缺少一个(潜在的关键)特性。

这让我开始思考Python的哪些部分需要被认为是“Python”?

没有当地人你能生活吗?它是一个非常动态的事情,能够任意地收集所有定义的局部变量和它们的值到一个字典。如果你在一个像CPython这样的intepreter中,你只需要从当前执行框架中获取一些局部变量。但是在编译语言中,这需要做更多的工作,因为您必须知道何时收集所有这些信息,因为调用local()时,这些信息并不一定是到处都有的。

或者人们重写local()本身怎么样?在CPython中,这不是什么大问题,因为builtins模块有一个dict,你可以覆盖它,它将简单地传播到任何未来的调用。但是在编译语言中,进行这种检测需要花费更多的精力,而且这样的检查最终会降低性能。

关于sys.settrace ()呢 ?它实际上会触发每个字节码的回调,如果代码被编译,它就不能正常工作。您可以通过检查是否在每一行后面设置了跟踪函数来伪造它,但是当您大多数时候没有设置这样的钩子时,这样做似乎有点过分(不过,它可能是在这种支持下编译的编译器标志)。

那么sys._getframe()呢?编译语言并不一定要直接访问执行框架,所以您需要费心去模拟它吗?由于执行帧可以被任何函数请求,所以您需要随时准备按需提供执行帧。

正如您所看到的,Python中有很多东西使得编译变得困难(Nuitka因此更有能力接受这个挑战)。但我敢打赌,我上面提到的东西你在99.9%的时间里都不会用到,所以如果一个实现没有使用它们,它还能被认为是“Python”吗?

有多少兼容性是有用的?

我对这个问题没有很好的答案。但是它的答案说明了实现Python的难度以及它与现有软件的兼容性。我想说的是,我认为WebAssembly不需要支持大量的Python软件就可以发挥作用。WebAssembly可以访问其他语言生态系统,比如Rust和JavaScript,所以用其他语言实现需要的东西的可能性绝对大于零。

我没有答案

开发一个将Python代码直接转换为WebAssembly并牺牲一些兼容性以提高性能的编译器可能是有意义的。开发一个以WebAssembly的设计为目标,同时又能保持与现有代码的兼容性的解释器可能是有意义的。在他们的WebAssembly努力中,简单地支持RustPython可能是有意义的。也许Pyodide能帮我们到达那里。我不认为这些可能性在本质上都是错误的,它可能只会归结为引起人们足够兴趣的那一个,从而看到它对别人有用。

python语言的核心理念是_Python编程语言的核心是什么?相关推荐

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

    01 Python 编程语言的核心是什么? ​ 为什么要问这个问题? 我想要用Python实现WebAssembly,这并不是什么秘密.这不仅可以让Python进入浏览器,而且由于iOS和Androi ...

  2. python语言的特点支持中文_Python编程语言特征

    详细内容 Python编程语言特征 1.Python语法优雅,程序编码简单易读. 2.Python易上手,通过简单的操作就能让你写的程序运行.Python非常适合用来做原型开发或其他专门的编码任务,同 ...

  3. python语言编程中的保留字_Python语言程序设计整理

    第一周:Python基本语法元素 1.3 实例1:温度转换 例:将摄氏度和华氏度互换 利用转换公式如下: C=(F-32)/1.8,F=C*1.8+32 代码: 1.4Python程序语法元素分析 1 ...

  4. python语言之父 是谁_Python之父与Python发展简史

    Python之父是Guido van Rossum,他从阿姆斯特丹大学取得了数学与计算机专业的硕士学位.虽然他可以称得上是一位数学家,但他却说自己更倾向于做计算机方面的工作,因为他享受计算机给他带来的 ...

  5. python语言能做游戏吗_python语言能做什么

    python和java区别 首先,python虚拟机没有java强,java虚拟机是java的核心,而python的核心,实际上就是更好的方便了用户对于c语言函数或者是c++库的使用: 其次,java ...

  6. python语言案例教程张太红_Python程序代码相似度检测

    实践与经验 现代计算机 2014.12 上 Python 程序代码相似度检测 赵明洪,张太红,王正敏 (新疆农业大学计算机与信息工程学院,乌鲁木齐 830052) 摘要:代码剽窃是程序语言课程中经常出 ...

  7. python语言句块的标记_Python语言语句块的标记是()

    [简答题] [单选题]Listen( 1.1-1) and answer: Karen Wood is ___________. [单选题]下列说法正确的是 ( ). [判断题]旅游的实质实人类追求自 ...

  8. python语言特点依赖平台吗_python语言的特点

    Python既支持面向过程编程,也支持面向对象编程.在"面向过程"的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的.在"面向对象"的语言中,程序是由数据 ...

  9. python语言的变量特点随时_python程序设计——基本语言特性

    参考<Python程序设计(第2版)> 清华大学出版社 董付国 ##### 除特殊说明外,以下代码示例,均为python 3.6版本 ##### 一.Python语言特性 1.python ...

  10. python语言是学什么的_Python语言应该学习什么?

    Python语言,作为一门计算机语言,必须承担求解问题的基本职责.计算机语言,是用来描述表达人类的问题求解思路而约定的语法集合. 计算机语言,是计算机用来理解和执行人类的问题求解思路实现问题求解的工具 ...

最新文章

  1. Ymal格式转Properties格式
  2. android 微信登录点击没翻译,[android] 微信登录,没有唤起微信,直接返回ERR_AUTH_DENIED...
  3. vue全局路由守卫beforeEach
  4. 关键字驱动小例子_example2
  5. Spring Boot中@ConfigurationProperties与@PropertySource的基本使用(读取指定的properties文件)
  6. HUAWEI USG6000系列 NGFW Module V100R001 典型配置案例
  7. lua牛牛算法和大小比较
  8. 常见游戏外挂分类及原理概述
  9. Unity打包篇:Unity 导出 Gradle 工程出现release builds have to be signed when using Gradle解决办法
  10. php的radio怎么设置默认是勾选的,php实现select、radio和checkbox默认选择的实例参考...
  11. 超级爆笑小学生作文大全,这孩子太搞了
  12. BJTU1940 铁憨憨骑士团的回文对称
  13. ssh怎么ftp上传文件到服务器,ssh ftp上传文件到服务器
  14. 18 - Transformer原理及其PyTorch源码讲解
  15. 标称型数据和数值型数据_数据的来源与类型以及数据的特征抽取
  16. 万亿级数据,如何高效进行数据治理
  17. IT痴汉的工作现状28-刀客许三爷(上)
  18. linux字体加粗,CSS Fonts(字体)介绍
  19. android crosswalk闪退,Crosswalk 首次启动闪烁一下的处理办法(Xamarin.Android)
  20. 探索区块链C端市场 艺术品、卡牌、音乐皆可NFT

热门文章

  1. 深度解析MySQL启动时报“The server quit without updating PID file”错误的原因
  2. 超级有用的git reset --hard和git revert命令
  3. 【POJ】【2699】The Maximum Number of Strong Kings
  4. 等待事件之日志等待事件解决的方法
  5. 邮件服务器最常见的安全问题及解决办法
  6. QQ2006 界面编程
  7. ActiveMQ(二)——常用api、持久化、签收模式、以及常见问题
  8. 数组转ArrayList的正确方式
  9. 存储在U盘中的文件被误删后怎么免费恢复
  10. Sublime Text 中配置 Eslint 代码检查和自动修复