约束是好的:Python 的元数据困境
文章探讨了 Python 元数据系统过于复杂且缺乏约束的问题,并以 JavaScript 的元数据管理方式为例,说明了约束的益处。Python 过去和现在(`pyproject.toml` 时代)的元数据生成机制都存在问题,导致元数据不一致、缓存失效不明确、存储分散等诸多问题,这增加了工具开发的复杂性,也给用户带来了困扰。作者认为,尽管动态元数据有一定的灵活性,但其带来的成本过高,建议逐步移除动态元数据,并鼓励使用更具约束性的静态元数据。
阅读更多
文章探讨了 Python 元数据系统过于复杂且缺乏约束的问题,并以 JavaScript 的元数据管理方式为例,说明了约束的益处。Python 过去和现在(`pyproject.toml` 时代)的元数据生成机制都存在问题,导致元数据不一致、缓存失效不明确、存储分散等诸多问题,这增加了工具开发的复杂性,也给用户带来了困扰。作者认为,尽管动态元数据有一定的灵活性,但其带来的成本过高,建议逐步移除动态元数据,并鼓励使用更具约束性的静态元数据。
阅读更多
本文认为,对于大多数语言来说,async/await 是一种糟糕的抽象,线程才是更好的选择。作者对比了异步编程和线程模型,指出 async/await 存在无法自由挂起、未解决的 Promise 导致的问题、以及对调用栈的负面影响等缺点。文章以 Scratch 为例,说明了并发编程的直观性,并探讨了不同语言中 async/await 的起源和实现差异。作者主张,未来的语言设计应重新思考并发,借鉴 Java Loom 项目的虚拟线程模型,并结合结构化并发和通道等概念,提供更友好的并发编程原语。
阅读更多
本文探讨了在Python中实现多版本导入的思路,目标是让不同版本的库能够同时安装和使用。作者分析了Python导入系统和包管理机制的现状,提出了将不同版本的包安装到独立目录、通过导入钩子重定向模块名、利用元数据识别依赖版本等方案,并讨论了实现过程中遇到的挑战,例如C扩展模块的导入问题以及如何从模块名追溯到PyPI发行版名称。
阅读更多
本文是 Armin Ronacher 关于 Python 打包工具的博客文章。作者首先回顾了 Rye 的发展历程,继而介绍了 Astral 团队开发的 uv 工具。uv 在功能和性能上都取得了很大进步,作者认为 uv 有望成为未来 Python 打包的统治性工具,并呼吁社区团结起来支持 uv 的发展。作者还回顾了 Python 打包工具的历史,并建议维护重要 Python 项目的开发者尝试使用 uv。
阅读更多