Gleam v1.17.0 发布
Gleam 是一种类型安全且可扩展的语言,适用于 Erlang 虚拟机和 JavaScript 运行时。今天,Gleam v1.17.0 已经发布。Gleam Gathering 但首先:首个全 Gleam 会议的第一批视频已经发布!您可以在 Gleam Gathering 的 YouTube 账户查看。这次活动非常成功,充满乐趣。请关注 2027 年下一次活动的消息!好了,回到发布的内容。BEAM escripts 在 Erlang 虚拟机上运行时,Gleam 代码被编译成一系列 .beam 文件,每个文件包含一个 Gleam 模块的字节码。这对于使用包管理器、容器或其他系统分发或安装的程序非常有效,但分享小型命令行程序时,必须共享多个文件有点不方便。在 JavaScript 领域,这个问题通过一个“打包器”解决,该程序将多个 JavaScript 模块组合成一个单一文件。这个单一文件可以被复制到任何安装有 JavaScript 运行时(如 NodeJS、Deno 或 Bun)的计算机上并运行。Erlang 也有类似的解决方案:escripts。与 JavaScript 打包类似,escript 是一个单一文件,包含程序的所有模块以预编译的字节码形式,可以在任何安装有 Erlang 的计算机上运行。Erlang 构建工具提供了一个方便的命令来创建 escript,但对于 Gleam 程序员来说,escript 的创建过程并不那么简单。此次发布带来了 gleam export escript 命令,该命令将编译项目,验证其拥有有效的 main 函数,并从编译的字节码构建 escript 文件。louis ~/src/my_project $ gleam export escript 正在编译 gleam_stdlib 正在编译 my_project 编译完成,耗时 0.48 秒 您的 escript 已生成到 /home/louis/src/my_project/my_project。louis ~/src/my_project $ ./my_project 你好,来自 my_project!引用高亮 Gleam 的语言服务器为所有实现语言服务器协议的编辑器提供 IDE 功能。此次发布新增对 textDocument/documentHighlight 功能的支持,可高亮显示所有对选定变量的引用。例如,在此代码中,光标悬停在 vec 的任何实例上将产生以下高亮:fn to_cartesian (vec) { // ^^^ let x = vec.rho * cos (vec.theta) // ^^^ ^^^ let y = vec.rho * sin (vec.theta) // ^^^ ^^^ #(x, y) } 感谢 Gavin Morrow 的这一补充!常量 todo 表达式 Gleam 的 todo 关键字是一个占位符表达式,程序员可以在有未完成的代码时使用,以便进行类型检查或运行。在编译时,它会输出一条警告,表明代码未完成,如果运行包含 todo 表达式的代码路径,则会出现 panic,退出程序。todo 现在也可以在常量表达式中使用。由于常量表达式在编译时被评估,当在常量中使用 todo 时,程序将无法运行,但仍然可以进行类型检查和分析。这也使我们能够升级“填充标签”代码操作,使其也适用于常量。运行时,它将填充记录构造函数中缺失的标记参数。例如:pub type Pokemon { Pokemon (number: Int , name: String , hp: Int ) } pub const cleffa = Pokemon (number: 173 ) 在这段代码中,我们没有指定 name 和 hp 字段,这是一种错误!触发“填充标签”代码操作将产生以下结果:pub const cleffa = Pokemon (number: 173 , name: todo , hp: todo ) 感谢 Giacomo Cavalieri!记录更新悬停 在您的编辑器中悬停是获取更多信息的好方法,语言服务器会显示悬停对象的类型、文档和其他详细信息。Gleam 的记录更新语法用于从现有记录创建新记录,但更新了一些字段的新值。当在这些记录上悬停时,语言服务器现在还将显示尚未给出新值的剩余字段,避免您导航到定义以查看其他可以设置新值的字段。pub type Person { Person (name: String , age: Int ) } pub fn happy_birthday_mom () { let mom = Person (name: "Antonella" , age: 60 ) Person (..mom, age: 61 ) // ^^^^^ 悬停此处将显示:// 未更改字段:// - name } 感谢 Giacomo Cavalieri!未知值导入建议 在 Gleam 中,来自其他模块的函数几乎总是以合格的方式使用,写作 dict.fold 而不仅仅是 fold。这是为了使读者更清楚函数的定义位置和功能,并防止在函数名称中添加冗余后缀以表明它们适用于何种类型。有时程序员可能会忘记写模块限定符,导致编译错误,因为在范围内没有与该名称匹配的值。当发生这种情况时,编译器现在将在导入的模块中搜索具有该名称的适当值。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡