Python 3.14 新特性学习(第一部分)

在 AI FIRST 的年代到底还要不要对每个所用语言新特性有所了解呢?就像有了 AI 还需要升级  Python 吗?虽然如今在 ChatGPT 中问一句话就能出来一篇比我想要写的好的多的博客,但不多思考怕会退化。

Python 3.14 于 2025 年 10 月 7 日发布,也就是前天,比起 Java 的发布节奏还是慢半拍,所以才能跟得上它的步伐。还是老方法,在官方的 What's new in Python 3.14 中吸收最原始的滋味,完后再去参考别人家的总结。

Python 官方说 Python 3.14 最大的变化包括 t-string(模板字符串),注解的延迟求值,和子解释器的支持(用以使用自由线程)。再就是标准库的变化 asyncio 的内省功能,支持 Zstandard 压缩,以及 REPL 有了语法高亮了.

总体来说这个版本比 Python 3.13 新特性更有亮点,在 Python 3.13 中自由线程是实验性的,在 Python 3.14 可通过子解释器来使用,和自由线程一样,Python 3.13 中的 JIT 需以源代码通过编译选项获得,在 Python 3.14 中 JIT 仍为实验特性,但官方发布的 Python 3.14 二进制版已包含实验性的 JIT 编译器。

REPL 支持语法着色高亮显示

为什么首先说这个特性,没有为什么。在 IDE 普遍的年代其实 Python 的 REPL 使用场景不多。在 Python 3.13 的 REPL 中首先使用了紫色的提示符,换行自动退格,块编辑,和错误信息的着色显示,代码的关键字等没有高亮显示。在  Python 3.14 中把这一块补齐了,还有更自然的 <Tab> 建议提示,如 import 时多用 <Tab> 键试试; 语法高亮的主题也可以选择。

阅读全文 >>

Java 19, 20 新特性学习

之所以把 Java 19 与 20 放一块是因为这两个版本都没有一个算得上正式的特性。都是些预览的,孵化中的,唯有一个支持 Linux 下 RISC-V 指令集与我们基本无关。所以 Java 19 和  Java 20 纯粹的过度版本,根本不该被正式项目采用,在 IntelliJ IDEA 中也是标它们为 No new language features。在我们的实践中正式项目只用 LTS 版。

还是分别从 https://openjdk.org/projects/jdk/19/https://openjdk.org/projects/jdk/20/ 抓关注点

Java 19 新特性

Java 20 新特性

从上面可以挑几个稍加了解,详细的介绍应该在学习 Java 21 时。它们是 阅读全文 >>

Python 3.13 新特性学习

相比于 Java 的每半年一个版本, 跟踪学习 Python 每年一版本要轻松一些. 虽然实际上 Java 是每两年一个 LTS 版, 但它的新特性却是逐个版本释放出来. 也终于赶在 Python 3.14 将在预计的 2025-10-07 发布之前能够学习总结一下当前的 Python 3.13 的新特性.

还是老办法, 从官方的 What's New In Python 3.13 中学习, 所以写作本文的目的就是阅读 What's New In Python 3.13 的学习笔记.

Python 3.13 最大的变化就是 REPL(Read-Evaluate-Print Loop) Python 控制台交互界面, 还有实验性的支持自由线程模型(free-threaded mode) - 即所谓的可禁用全局解释锁(Global Interpreter Lock), 和JIT(Just-In-Time) 编译器. 禁用 GLI 和使用 JIT 都可以让 Python 的执行性能得到提升.

更友好的 REPL 交互界面

Python 3.13 的 python 控制台一下子把早先的 bpythonipython 的饭碗给抢了, 虽然 bpython 和 ipython 比 Python 3.13 的 REPL 要强很多, 但毕竟控制台下只是用来随手简单测试 Python 代码, 也就更不太可能单独安装第三方的 bpython 和 ipython 了. 阅读全文 >>

学习 Java 18 的新特性

有了 AI 是不是就用不着了解语言特性本身呢?用 Vibe Coding 难道就无所不能呢?如果是的话那些找工作的也就无需刷 LeetCode 了。试想 Vibe Coding 产生了成堆的代码,即使创建了 Pull Request, 也不是给人 Review 的,也只能由 AI 来 Review, 到头来就是 AI 与 AI 自己玩,有 Bug 也只有 AI 看得懂。以后的屎山代码是一车一车的来。

除了从 JDK 官方每个版本的 What's New in JDK 18 - New Features and Enhancements, 还可以看 OpenJDK JDK 18 列出的更简明的新特性。自 JDK 10 之后,每一版的新特性由链接 https://openjdk.org/projects/jdk/<version>/ 查看,如 JDK 10 新特性链接为 https://openjdk.org/projects/jdk/10/

https://openjdk.org/projects/jdk/18/ 列出了 JDK 18 如下新特性

找几个有代表性的着重加了学习 阅读全文 >>

Python 3.12 新特性

继续感受新特性系列,这次看看于 2023 年 10 月 2 日发布的 Python 3.12 给我们带来了什么新特性。Python 3.14 预计在今年 10 月份推出,一定要对每年一个正式版的新东西有所了解。依旧是由官方的 What's New In Python 3.12 阅读进行展开。

Python 3.12 从编程上的观感变化不大,主要是移除了 distutils, 增加了 f-stringstype 提示,其他对诸如迭代推导等的字节码优化,对性能的提示是不具有直接感受的。

Python 3.12 移除了 distutils(Distribution Utilities)

distutils 是一个 Python 内建的构建,打包和分布 Python 模块/包的工具集,其实对于多数应用开发人员对此也是感的。能与此能顺利建立关联的就是有些 Python 项目中的那个 setup.py 文件,那也是史前的产物。随着 Python 的快速流行,Python 的包管与构建工具也多了起来, 像 Poetry, PDMuv, 尤其是 uv(Rust 编写的) 的闪电速度及全能表现有望成为 Python 界的 Maven。 阅读全文 >>

演示 MCP 服务与 Claude 桌面版或 LM Studio 的集成

AI 领域真是风头正劲,各种概念扑面而来,像 AGI, RAG, AI Agent, Agentic AI 等,目前的 MCP(Model Context Protocol, 模型上下文协议) 又随处可见。MCP 是 Anthropic 于 2024 年 11 月底推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 使用 LLM 应用能安全的访问和操作外部资源,轻松的实现了 Function Calling 的功能。

试想一下,以前问大语言模型一个复杂一点的计算题

12345 的 6.7 次方是多少?

光语言模型只会在自己的向量数据库里找简单的碰到过的计算题,如 100 的 2 次方,但看到偏门的计算就会出现幻觉了,因为它没有实际的计算引擎。下面是在 LM Studio 中使用 qwen2.5-7b-instruct-mlx 模型时的结果 阅读全文 >>

Java 17 新特性

昨天单列了 Java 17 新特性之密封类型, 继续刷 What's New in JDK 17 - New Features and Enhancements.

switch 模式匹配(预览)

在 Java 21 才正式放出,主动就是原来的 switch...case 语句可以写成表达式的方式,有返回值, 无需每个分支的 break, 并增加模式匹配功能,比如匹配类型,带约束子条件,匹配 record 的字段值等,这里不展开说明,待到详细了解 Java 21 新特性时再深入研究。

新的 macOS 渲染管道

英文是 New macOS Rendering Pipeline, 主要是 Swing API 如果配置系统属性 -Dsun.java2d.meta=true 就可以用 Apple Metal 替代 OpenGL 加速渲染界面,很少写 Java Swing 桌面应用的略过。

新的 API 可访问大图标 

同样是在对 Swing 的改进,可用 FileSystemView 加载解析度的图标 阅读全文 >>

Java 17 新特性之密封类型

工作中所有项目都已升级到了当前的 LTS 版 Java 21, 眼看 Java 快要来到了下一个 LTS 版本 - Java 25,将于今年 9 月份发布。四年前记录过一篇 Java 10 ~ 16 一路向前冲(新特性一箩筐),其中夹杂着孵化,预览中的以及正式的特性。现在继续跟随着 Java 16 之后版本的特性,主要讲述正式的,可直观体验到的特性,孵化与预览中的特性只会简单提及。

先还是看下 Java 的发布日期安排 Oracle Java SE Support Roadmap

版本                     发布日                        原定支持至               延期支持至
Java 17(LTS)      2021/9                       2026/9                      2029/12
Java 18-20         2022/3 - 2023/3      2022/9 - 2023/9     N/A
Java 21(LTS)      2023/9                       2028/9                     2031/9
Java 22               2024/3                       2024/9                      N/A
Java 23               2024/9                       2025/3                      N/A
Java 24               2025/3                       2025/9                      N/A
Java 25(LTS)      2025/9                       2030/9                     2033/9

也就是每两年(9月份)会有一个 LTS 版本,中间若干过度版本。在正式项目中尽可能只用 LTS 版本,因为 LTS 版更稳定,且有长期的补丁,不能项目进行中不得不在进行非 LTS 主版本升级。 阅读全文 >>

SpringBoot 中自定义 Filter 支持 gzip 压缩的请求体

SpringBoot Web 项目要支持响应数据的自动压缩只需要在 application.properties 中配置 server.compression.enabled=true 即可,默认为 false. 这样对于默认 server.compression.min-response-size=2KB 达到 2KB 大小的响应,并且请求头中有 Accept-Encoding: gzipdeflate 就会压缩响应数据。

相关的配置请参考:SpringBoot Server Properties

  1. server.compression.enabled: 默认为  false
  2. server.compression.excluded-user-agents: 针对哪些 user-agents(逗号分隔) 不压缩,默认为空
  3. server.compression.mime-types: 会对哪些响应的 content-type 进行压缩,默认为 text/html, text/xml, text/plain, text/css, text/javascript, application/javascript, application/json, application/xml
  4. server.compression.min-response-size: 默认为 2KB

文本数据压缩比可达到百分之七八十,对于节约网络消耗来说是非常可关的,不过要些许 CPU 资源。说完了响应的自动压缩,如果请求数据较大也应考虑对请求进行压缩。比如客户端发送请求时带上 Content-Encoding:gzip, 并且请求内容是 gzip 压缩的。

提示:如果 SpringBoot Web 是放在 AWS API Gateway 后端,那么 AWS API Gateway 会在看到请求头 Content-Encoding 的值为 gzip, compress, deflate, 或 br, 会自动解压缩请求数据,然后转发解压缩后的数据到后端,这时候 SpringBoot Web 无需进行请求数据的解压处理。不过对响应数据的压缩是 SpringBoot Web 要做的,AWS API Gateway 并无该功能。

SpringBoot 默认不支持自动解压缩请求内容,如果手动在 Controller 方法中,可以接收字节数组,然后自行解压缩。比如定义如下的 Controller 方法 阅读全文 >>

Python 3.11 关键新特性之其他

前面整一篇只讲了 Python 3.11 的新语法特性,异常组与 except*, 这篇说其他的。

可为异常添加备注

在 BaseException 上新加了一个实例方法 add_note(self, note),在捕获到异常后可进一步润色而无需创建一个新的异常再次抛出。

内置 tomllib 支持 TOML 配置文件

TOML 是 Tom's Obvious Minimal Language, 像 INI 文件,但表述性更强,支持丰富的数据类型。现代新型的 Python 项目依赖管理构建工具都使用了 pyproject.toml 文件,如 Poetry, uv, 以及 PDM。pyproject.toml 在 Python  3.6 就引入了,见 PEF 518,但似乎一直被顽固的 Python -m venv 忽略。

从 Python 3.11 开始新加了对 TOML 配置文件的编程接口,像使用 JSON 和 Pickle 一样的 load() 和 loads() 反序列方法,没有序列化方法 阅读全文 >>