为 Hare 引入 for-each 循环

主要观点:2024 年 4 月 2 日 Lorenz(xha)引入了 for-each 循环到 Hare 开发分支,包括编译器、标准库、规范和教程的补丁,介绍了设计 for-each 循环的背景及相关挑战。
关键信息

  • 之前迭代数组/切片需使用索引,现可使用 for-each 循环,如foreach (x in [1, 2, 3]) { fmt::printfln("{}", x)!; };
  • 标准库中已使用迭代器概念,如逐行读取文件,但之前实现较繁琐for (true) match (bufio::read_line(file)!) {... };,新的 for-each 迭代器循环更简洁for (let line => bufio::read_line(file)!) { fmt::printfln("{}", strings::fromutf8(line)!)!; };
  • 讨论了 for-each 循环的语法,决定引入新的for语法,包括值循环for (let x.. [1, 2, 3]) { fmt::printfln("{}", x)!; };和引用循环for (let x &.. [1, 2, 3]) { fmt::printfln("{}", *x)!; };,以及迭代器循环的实现细节和挑战。
    重要细节
  • Hare 的RFC 流程用于讨论和达成对 Hare 较大更改的共识,for-each 循环的 RFC 经过三次修订达成解决方案。
  • for-each 迭代器循环在每次循环开始时执行绑定初始化器bufio::read_line(file)!,其返回带done类型的标记联合,io::EOFdone类型,循环根据返回值决定是否终止。
  • 仍有很多 Hare 代码需更新以使用新的 for-each 循环,特别是扩展库尚未更新,计划在工作中处理。
阅读 31
0 条评论