01

Python 编程语言的核心是什么?

为什么要问这个问题?

我想要用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可以实现这一点。我认为这些都有可能,这些都有可能激发人们的兴趣,进而产生更好的结果。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. Numpy之N维数组-ndarray
  2. spark sql中的窗口函数
  3. 小学学校计算机教室使用计划,小学电脑室工作计划
  4. 餐厅点餐系统:测试与部署
  5. php循环checkbox,php循环删除checkbox | 学步园
  6. 原版英文书籍《Linux命令行》阅读记录1 | 什么是shell?
  7. java 调用枚举种方法_Java中枚举类型的一种使用方式
  8. 开源新要求压迫下,正在撤退的维护者们!
  9. iOS开发中常见的一些异常
  10. C. Oh Those Palindromes
  11. Ubuntu18.04 orb-slam3编译出现的错误 undefined reference to symbol ‘_ZN3MPI8Datatype4FreeEv‘ libmpi_cxx.so
  12. SecureCRT连接Ubuntu,centos失败解决
  13. 提高计算机访问硬盘的速度慢,嫌电脑速度不够快?教你5招提升硬盘性能!
  14. 怎么将CAD图纸快速导入转换成常见的黑白JPG格式?
  15. 如何成为嵌入式软件工程师_成为高效软件工程师的三个关键
  16. ACM入门之新手入门
  17. 吃透Kafka六:topic 创建过程
  18. iOS性能优化之耗电量
  19. Mac相关配置(本地host,端口被占用)
  20. vue-loader无法解析vue里的stylus的style,外部引入styl文件可以解析,引入VueLoaderPlugin也没用

热门文章

  1. Android textedit 背景,Android EditText 的使用及值得注意的地方
  2. java.io下载_java io 文件下载
  3. 关于mysql的项目_项目中常用的MySQL 优化
  4. 吴恩达机器学习笔记五之神经网络
  5. Adobe illustrator 论文图形编辑和排版 - 连载 1
  6. 科研福利!北京超算获通用CPU算力第一,2000核时免费领取
  7. 信奥中的数学:孙子定理 中国剩余定理
  8. window下tomcat 按天生成日志_Tomcat原理(一)
  9. react中@withrouter_为什么 withRouter 高阶组件应该 处于最外层?
  10. qt 复制字符串_Qt字符串处理 QString用法总结(一)