预定于2022年2月1日发布的Go 1.18中的Go类型参数(泛型)

2020-11-21 20:27:04

未读,1:28 AM(昨天)1:28 AM this该组的电子邮件地址是匿名的,或者您需要查看成员电子邮件地址的权限才能查看原始消息

大家好,冻结进展顺利,我们期待着在发布开始时窗口打开时准备合并大的更改,就像我们对所有大的更改一样。在编译器中,我们正在进行两个不同的大更改:

-在Go 1.17开始时注册ABI工作以着陆(2021年2月1日工作开始,2021年8月1日发布)

-类型参数在Go 1.18开始时着陆(2021年8月1日开始工作,2022年2月1日发布)

我们将在dev.regabi中登陆寄存器ABI,在dev.typeparams中登陆类型参数。前者是新的。到目前为止,我们正在将master合并到dev.typeparams中。从现在开始,我们将master合并到dev.regabi中,并将dev.regabi合并到dev.typeparams中。当Go 1.17打开时,我们会将dev.regabi合并到master中,然后又回到dev.typeparams。

类型参数将需要在编译器前端中进行大量新工作,并且我们已经对cmd / compile进行了一些原型清理,这将使此操作变得更加容易且不易出错。粗略地说,清理工作是(1)用go / constant包替换Mpint,Mpfloat等;(2)用type2替换cmd / compile / internal / types;以及(3)用更具体的数据结构和接口替换Node。同样,进行这些更改的理由是使typeparams更容易工作并且不易出错,因此更改也仅限于此。

清理将编辑cmd / compile / internal / gc中的几乎每一行代码。如果将工作放到dev.typeparams上,那么我们将不得不将所有dev.regabi工作以及所有Go 1.17开发合并到该已编辑的代码中,这将容易出错。相反,我们计划将清理工作放到dev.regabi中,以便它们将在Go 1.17开始时着陆。同样,无论何时我们可以在cmd / compile中添加新功能以支持在Go 1.17中有意义的类型参数,我们都将在dev.regabi分支中进行,以减少Go 1.17和dev.typeparams之间的差异,因此未来8个月所需的合并工作量。

我们将这些分支限制为仅限于上述工作。请不要将CL发送到与注册工作,类型参数工作或(有限范围)清理无关的dev.regabi或dev.typeparams。当主树打开时,此类无关的工作应直接合并到master。

再说一遍,这封邮件的目的只是为了让那些密切关注Gerrit并想知道接下来一段时间内两个分支机构开展活动的理由的人们感到震惊。无需采取任何措施。

未读,5:02 PM(3小时前)5:02 PM this该群组的电子邮件地址是匿名的,或者您需要查看成员电子邮件地址的权限才能查看原始消息

GO具有一流的功能,它将实现类型 参数在实际编译器中非常复杂。看一下C#:Microsoft 几年前承诺将编译器从MSIL转换为本机 机器码。这个想法失败了,因为该语言具有 参数和委托。如果您会发现 解决方案,但恐怕是不可能的。

您将实施 C样式宏命令而不是在非常复杂的时间上浪费时间 问题。两遍编译器将提供更加灵活的解决方案 用于创建容器和与之比较的通用函数 参数化类型。此外,您可以使用以下解决方案 在GCC编译器的来源中发布。