发布Gleam v0.11

2020-08-29 03:20:16

又到了发布“欢乐合唱团”的时候了!这一次,除了看看编译器中的新特性之外,我们还将看看更广泛的Gleam生态系统中的新特性。

以前,当我们想要更新记录中的一些字段时,我们需要创建一个新实例,并手动复制未更改的字段。

Pub FN Level_Up(精灵宝可梦:精灵宝可梦){let new_level=精灵宝可梦.Level+1 let new_moves=Moves_for(精灵宝可梦.Species,new_level)精灵宝可梦(Level:New_Level,Moves:New_Moves,Name:Pokemon.name,Species:Pokemon.Species,Item:Pokemon.item,)}。

这太冗长了!更糟糕的是,每次输入都容易出错,而且很烦人。

为了解决这个问题,Quinn Wilton向Gleam添加了记录更新语法,所以现在我们只需要指定更改的字段。

Pub FN Level_Up(精灵宝可梦:精灵宝可梦){let new_level=精灵宝可梦.Level+1让new_moves=Moves_for(精灵宝可梦.Species,new_level)精灵宝可梦(..。精灵宝可梦,级别:NEW_LEVEL,MOVES:NEW_MOVES)}。

Gleam中的所有数据都是不可变的,因此此语法不会更改现有记录的值,而是使用原始值和更新值创建新记录。

//4种写入INT的方式,15让十六进制=0xf让十进制=15让八进制=0 o17让二进制=0b00001111

这些在许多情况下可能很方便,比如在Gleam中实现虚拟机或俄罗斯方块游戏时。

这里我们说x是一个列表,但是我们没有说这个列表包含什么类型,让编译器来推断它。

当为文档添加批注或使用比编译器推断的更严格的类型时,这可能很有用,因为您可以省略对您不重要的任何批注部分。

格式化程序样式在几个方面都得到了改进,格式化程序的性能也得到了提高。一个流行的改变是它如何格式化不能放在一行上的赋值。

此外,还改进了几条错误消息,以包含有关如何修复该问题的更多信息,并且消除了一大堆错误。有关更多详细信息,请参阅更改日志。

在编译器之外,Gleam中的重大新功能是Gleam HTTP的第一个版本。受Ruby‘s Rack、Elixir’s RaxX和Haskell‘s Wai等现有库的启发,Gleam HTTP为创建Web应用程序和客户端提供了单一类型良好的界面,同时保持底层HTTP客户端和服务器代码的模块化。

在Gleam中,HTTP服务是接受HTTP请求并返回HTTP响应的常规函数,其中请求和响应是由http库定义的类型。

作为一个正常的Gleam功能,测试此服务很容易,不需要特殊的testhelper或测试服务器。

Import gleam/应导入my_app pub FN ECHO_TEST(){let response=http.default_req()|>;http.SET_req_body(";Hello,world!";)|>;my_app.service response.status|>;应.equal.body|>;应.equal.(";Hello,world!";)}。

Gleam的HTTP库还提供中间件,可用于向HTTP服务添加附加功能。

Import gleam/bit_builder import gleam/http/中间件pub fn service(){my_app.echo_service//添加头部|>;中间件.prepend_resp_header(";Made-With";,";Gleam&34;)//转换响应正文类型|>;中间件.map_resp_body(bit_builder.From_bit_string)//support patch,

一旦我们定义了服务,我们希望使用Web服务器运行该服务,这样它就可以处理来自外部世界的HTTP请求。为此,我们使用HTTP服务器适配器,例如用于Elli Erlang web服务器的适配器。

或者甚至使用Elixir的插件接口的适配器,这样就可以在Elixir Phoenix Web应用程序中挂载Agleam HTTP服务。

Defmodule MyAppWeb。UserController确实使用MyAppWeb,:Controller def show(conn,params)do conn|>;GleamPlug。CALL_SERVICE(params,&;:my_app.。服务/1)结束。

所有可用服务器适配器的列表可以在Gleam HTTP项目的自述文件中找到。

如果您想看到更多使用Gleam HTTP创建Web应用程序的示例,请参阅GitHub上的echo服务器。它包括上述所有内容以及路由和日志记录等其他概念。

HTTP服务只是故事的一半!我们还可以使用HTTP库发出自己的请求。

Import gleam/http import gleam/httpc pub FN get_my_ip(){try response=http.default_req()|>;http.SET_Method(http.Get)|>;http.SET_HOST(";api.ipify.org";)|>;httpc.Send OK(Response.body)}。

在这里,我们构建了一个HTTP请求,并使用httpc客户端适配器发送它,如果请求成功,则返回响应正文。

所有可用客户端适配器的列表可以在Gleam HTTP项目的自述文件中找到。

如果你想试用新版的Gleam,请前往安装页面。我很想听听你是如何找到它并得到你的反馈的,这样Gleam才能继续改进。

想要查看一些现有的Gleam项目吗?快去看看令人敬畏的闪光清单吧。想在Gleam里建点什么吗?查看建议跟踪器。

如果您希望帮助Erlang虚拟机上的强类型编程成为生产就绪的现实,请考虑通过GitHub赞助商计划赞助Gleam。

如果没有所有发起人和贡献者的支持,这次发布是不可能的,所以非常感谢他们。

最后,非常感谢“欢乐合唱团”自上次发行以来的贡献者和赞助商!