curl 作者考虑升级 curl 使用的 C 语言标准


curl 创始人兼核心开发者 Daniel Stenberg 发表博客称,他正在考虑是否要将 curl 使用的 C 语言标准从 C89 升级到 C99

Daniel 表示,他观察到许多广受欢迎的 C 语言开源项目正在向前发展,并将所使用的 C 语言标准升级到 C99 或更高版本,例如 Linux、Git 等项目。而且在 curl 的邮件列表中也经常出现关于升级 C 语言标准的讨论,特别是现在已计划在 2023 年春季发布 curl v8,所以从理论上来讲,这可能是进行一些更改的好时机。

如果要升级 C 语言标准到 C99,那就要考虑哪些 C99 特性可以改进像 curl 这样的项目。Daniel 表示自己能想到的可能给 curl 代码带来积极影响的部分特性是:

  • //注释
  • __func__预定义标识符
  • <stdbool.h>中使用布尔类型
  • 指定的结构体初始值设定项
    空的宏参数
  • <inttypes.h><stdint.h>中使用扩展的整数类型
  • 灵活的数组成员 (zero size arrays)
  • 内联函数
  • 整数常量类型规则
  • 将声明和代码混合
  • long long类型和库函数
  • snprintf()函数家族
  • 枚举声明中支持尾随逗号
  • 可变参数宏
  • 长度可变的数组

当然,开发者还可以使用许多其他的特性,但问题是他们是否真的需要这些特性。而且对于上面提到的部分特性,Daniel 表示他们已经有了不错的替代方案,其他的特性要么就是无关紧要,要么就是可能会让人分心。

因此,Daniel 认为,如果马上为 curl 项目采用 C99 所有新特性,这会导致重写大部分代码,从而引入错误。此外还有一个问题,如果真的要升级 C 语言标准,是否应该直接升级到 C11,而不是停留在 C99

在 curl 社区对于升级 C 语言标准的讨论中,没有人能清楚地阐明升级之后能给 curl 项目带来的好处。Daniel 表示他们目前看到的风险是,大家都陷入了与项目非常不相关的讨论和变化中,而这些讨论和变化实际上可能不会使项目取得很大进展。无论是功能还是质量/安全性。

Daniel 认为还有很多更好的事情要做,还有更多值得付出的努力来投入精力,这实际上可以改进项目并将其推进。比如改进测试套件、增加测试覆盖率、确保更多代码由模糊器执行。

Daniel 决定从 curl 8 开始,他们将要求编译器支持 64 位数据类型,主要是为了查看它的运行情况。这不是原来的 C89 版本中存在的特性,而是在 C99 中引入的。目前没有不支持此功能的现代编译器。他认为,这也许是可以继续适应和使用特定的“后 C89 特性”的方式。通过挑选特定的特性,然后随着时间的推移慢慢适应它们。

最后,Daniel 表示不考虑使用任何其他语言重写 curl。


延伸阅读

  • Linux 内核升级 C 语言标准
  • Linux 5.18 内核 C 标准从 C89 升级到 C11/GNU11

相關推薦

2022-11-19

到 7.86.0 —— 离发布 7.100.0 只差十多个版本,但 curl 作者 Daniel Stenberg 不希望在次版本号中使用三位数,因为他担心这会引发不必要的问题(可参考 Chrome 为发布 100 版本时所做的准备),甚至可能会导致他人用于比较版

2021-11-19

curl 创始人兼首席开发者 Daniel Stenberg 昨日发表了一篇吐槽苹果的博客,原因是当用户向苹果寻求帮助时,苹果直接回复用户让他自行联系 curl,然后提供了 curl 的帮助页面地址。 Daniel 说道:“想象一下,一家价值万亿美

2022-01-23

cURL 作者 Daniel Stenberg 在邮件透露了为 cURL 添加原生支持 JSON 的计划。 Daniel 解释了为 cURL 添加原生支持 JSON 的理由: 在 REST APIs 等领域,发送 JSON 是十分普遍的做法许多人被问及选择 cURL 替代方案的考虑因素时,“易于

2023-04-01

curl 作者 Daniel Stenberg 在博客中宣布,以后将不再向各 Linux 发行版的邮件列表发送有关 cURL 安全漏洞的提前预告。 Daniel Stenberg 从 2011 年开始向发行版邮件列表(当时称为 linux-distros)发送有关"已发现但未解决"的 curl 安全漏洞

2023-03-03

我无法反馈此事或让他们对此采取什么行动。 这是 cURL 作者 Daniel Stenberg 近日发布的推文节选,直指微软不作为。 抱歉讲太快,现在让我们倒带 <<<<<<<<< 重新梳理一下故事的来龙去脉。 cURL 项目的作者 Dan

2023-04-20

trurl 是用于 URL 解析和操作的命令行工具,也是 cURL 作者 Daniel Stenberg 开源不久的新项目。 自上一版本以来的变化: --get 也支持[括号]中的变量 --get {query-all:key} 输出查询中 'key' 的所有值 换成了 test.py 来进行测试 --iterate

2023-02-17

curl 作者 Daniel Stenberg 宣布推出 7.x 系最后一个版本:7.88.0。「7」到此为止,下次更新将正式发布 curl 8。关于版本号「8」的来由,查看《curl 作者不想推出 7.100,为此制定了 curl 8 发布计划》。   此版本修复了 3 个安全漏

2022-09-10

curl 的作者 Danie 在博客中分享了 curl 持续了 23.9 年的 DOS 漏洞。 1998 年 10 月, curl 4.9 发布了,curl 4.9 是第一个带有“cookie 引擎”的版本,可以接收 HTTP cookie、解析、理解并在后续请求中正确返回 cookie。 当然,当时 curl

2022-04-29

重定向后向其他主机发送自定义的 auth 和 cookie,但没有考虑到端口号或协议,可能会将合理的信息泄露给错误的一方。 变化 实验性函数 引入了两个 新函数 curl_easy_header() 和 curl_easy_nextheader()。 它们允许应用程序获取特定

2022-10-28

并带来大量修复。 重点 已移除 NPN 支持 curl 不再支持使用 NPN 协商 HTTP/2。执行此操作的标准方法长期以来一直是 ALPN,且浏览器几年前就取消了对 NPN 的支持。 WebSocket API 此版本中包含一个实验性 WebSocket API ,它以三个新功

2022-03-07

MesaLink 的支持。这个库已经不再开发,所以不鼓励用户使用。 Bug 修复 对 bearssl 后端进行了三个值得注意的修复:针对证书过期、不完整的 CA 证书和会话恢复。 strlen 调用删除configure 要求 –with-nss-deprecated删除一些比较

2022-06-28

项目,提供一个库(libcurl)和命令行工具(curl),用于使用各种网络协议传输数据。这个名字代表了 "Client URL"。 cURL 7.84 正式发布,更新内容如下: 变化 -rate 这个新的命令行选项 rate 限制了每个时间段的传输次数。

2023-10-12

curl 8.4.0 已正式发布,创始人 Daniel Stenberg(社区称号 bagder)已提前一周预告了该版本——修复高危安全漏洞,并称该漏洞可能是很长一段时间以来 curl 遇到的最严重漏洞,同时影响到 libcurl 库和 curl 工具。 根据介绍,这个高

2022-12-22

项目,提供一个库(libcurl)和命令行工具(curl),用于使用各种网络协议传输数据。这个名字代表了 "Client URL"。 cURL 7.87 正式发布,更新内容如下: 变化 -url-query curl 的第 249 个命令行选项将数据添加到 URL 的查询部分。