Hacker News 中文摘要

RSS订阅

Zig的新作家是否不安全? -- Is Zig's New Writer Unsafe?

文章摘要

文章讨论了Zig语言中新的*std.Io.Reader在写入stdout时可能存在的安全问题。作者指出,无论缓冲区大小如何设置,该函数的行为都是未定义的,因为读取器和写入器可能对缓冲区大小有特定要求。通过一个示例代码,作者展示了当缓冲区过小时,程序在调试模式下会失败,在发布模式下则会陷入无限循环,强调了这一问题的严重性。

文章总结

标题:Zig的新写入器是否不安全?

文章探讨了在Zig编程语言中使用新的*std.Io.Reader进行数据输出时可能遇到的安全性问题。作者通过一个示例函数展示了如何将*std.Io.Reader的内容写入标准输出(stdout),并提出了关于缓冲区大小的疑问。作者指出,无论选择多大的缓冲区,该函数的行为都是未定义的,因为读取器(Reader)可能对写入器(Writer)的缓冲区大小有特定要求。

通过一个具体的代码示例,作者展示了当缓冲区大小设置为64时,程序在调试模式下会触发断言失败,而在发布模式下则会陷入无限循环。作者强调,这不仅仅是文档问题,因为在某些情况下,读取器的性质是未知的或难以确定的。例如,读取器的类型可能基于HTTP响应头等条件,或者库开发者可能将读取器作为输入并输出自己的读取器,这种情况下很难明确缓冲区的要求。

更糟糕的是,这种失败可能依赖于输入数据。作者通过修改输入数据展示了在某些情况下程序可以正常运行,这使得这种配置错误在早期阶段难以被发现。

作者最后表达了对这一问题的担忧,认为如果这不是自己的操作错误,那么这确实是一个需要解决的问题。

评论总结

评论主要围绕Zig语言的新特性是否安全及其价值展开,观点较为分散。

  1. 关于安全性的讨论

    • 有人认为新特性可能“不明智”,但不一定“不安全”。
      引用:This seems like it's maybe unwise but I can't see how it's unsafe?
      (这似乎可能“不明智”,但我不认为它“不安全”。)
    • 也有人认为问题可能只是某个bug,而非普遍的安全问题。
      引用:I think there's just a bug somewhere, not a general "safety" problem.
      (我认为这只是某个bug,而不是普遍的安全问题。)
  2. 关于Zig语言价值的讨论

    • 有人对Zig的价值提出疑问,认为其优势不明确,并猜测它是否类似于C语言的Kotlin,旨在提供更好的语法和现代特性。
      引用:What's the value proposition of Zig? It's not immediately obvious to me.
      (Zig的价值主张是什么?我并不立刻明白。)
      引用:Is it kind of like the Kotlin of C, going for a better syntax/modern features but otherwise being very similar?
      (它是否类似于C语言的Kotlin,追求更好的语法/现代特性,但其他方面非常相似?)
  3. 关于问题处理方式的讨论

    • 有人认为这个问题更适合提交到问题跟踪器,而非公开讨论。
      引用:Who cares? seems like something for the issue tracker no?
      (谁在乎?这似乎更适合提交到问题跟踪器,不是吗?)

总结:评论中对Zig新特性的安全性存在不同看法,有人认为只是bug,有人则认为其价值不明确。此外,部分评论者认为此类问题更适合通过技术渠道解决。