
如何看待go语言泛型的最新设计?
1457个回答
2020-06-29
展开全部
虽然都称为泛型(generics),但是Go中的泛型(generics)仅是用于狭义地表达带有类型参数(type parameter)的函数或类型,这与其他编程语言中的泛型(generics)在含义上有相似性,但不完全相同。
从目前的情况来看,该版设计十分接近于最终接受的方案,因此作为Go语言鼓吹者这里就和大家一起看看最早将于Go 1.17版本(2021年8月)中加入的Go泛型支持究竟是什么样子的。由于目前关于Go泛型的资料仅限于这份设计文档以及一些关于这份设计的讨论贴,本文内容均来自这些资料。另外最终加入Go的泛型很可能与目前设计文档中提到的有所差异
从目前的情况来看,该版设计十分接近于最终接受的方案,因此作为Go语言鼓吹者这里就和大家一起看看最早将于Go 1.17版本(2021年8月)中加入的Go泛型支持究竟是什么样子的。由于目前关于Go泛型的资料仅限于这份设计文档以及一些关于这份设计的讨论贴,本文内容均来自这些资料。另外最终加入Go的泛型很可能与目前设计文档中提到的有所差异
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用 Jazayeri等人的话来说:泛型编程能够以通用类型的形式表示函数和数据结构。
那意味着什么呢?
举一个简单的例子,我们假设我们想要反转切片中的元素。这不是很多程序需要做的事情,但并不是那么不寻常。
个人还是挺喜欢 Go 的这个设计的,非常的平滑没有对之前的东西造成破坏,而且还有一定的想象空间,如果以后类型也能变成可计算、可编程的,那么 Go 语言将能实现更多复杂的功能,而且它的实现成本非常非常的低。
Java和C#的泛型设计都是一个路子采用 <> 的设计,这种设计我以前用的也是蛮多的,这是一种约定式的语法,这种语法在简单场景下还是挺好用的,但是在复杂场景下代码的可读性会非常差。Go 语言其实提供了一种完全不一样的路子,不约定而是创造,这种思路让你看到了泛型的实现过程同时保持了很高的灵活性,个人觉得还是很符合 Go 的大道至简的信条的~~
那意味着什么呢?
举一个简单的例子,我们假设我们想要反转切片中的元素。这不是很多程序需要做的事情,但并不是那么不寻常。
个人还是挺喜欢 Go 的这个设计的,非常的平滑没有对之前的东西造成破坏,而且还有一定的想象空间,如果以后类型也能变成可计算、可编程的,那么 Go 语言将能实现更多复杂的功能,而且它的实现成本非常非常的低。
Java和C#的泛型设计都是一个路子采用 <> 的设计,这种设计我以前用的也是蛮多的,这是一种约定式的语法,这种语法在简单场景下还是挺好用的,但是在复杂场景下代码的可读性会非常差。Go 语言其实提供了一种完全不一样的路子,不约定而是创造,这种思路让你看到了泛型的实现过程同时保持了很高的灵活性,个人觉得还是很符合 Go 的大道至简的信条的~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Go 语言是一个基于 CSP 模型原生支持并发的语言。在这篇文章中,我将通过几个例子,从其并发模型和并发程序的实现的角度,讨论一下 Go 语言设计的优劣。
传统的程序语言设计都不会将输入输出作为语言的核心,但 Tony Hoare 认为输入输出是基本的编程原语,且通信顺序进程(Communicating sequential processes,CSP)的并行组合(这里可能用「并发」会更为准确)是基本的程序组织方法。Go 语言的并发设计就是基于 CSP 模型的。
在最初的 CSP 模型中,程序总由若干个可以相互通信的进程构成,其中每一个进程内部是顺序执行的(这也就是 CSP 名称的含义)。注意这里的「进程」并不一定指操作系统中的进程,也不一定是操作系统的线程,它是一个抽象的概念,代表一组计算的序列,例如 goroutine 这种在应用层调度的计算序列也算 CSP 中的「P」。与 Go 语言不同的地方在于,这个最初的设计中并没有通信管道的概念,每个进程是直接和另一个进程进行通信的,但在 Go 语言中,goroutine 是匿名的,一个 goroutine 并没有办法直接将消息发给另一个 goroutine,为了实现 goroutine 之间的通信,Go 语言提供了 first class 的 channel,消息通过 channel 来从一个 goroutine 发到另一个 goroutine。
传统的程序语言设计都不会将输入输出作为语言的核心,但 Tony Hoare 认为输入输出是基本的编程原语,且通信顺序进程(Communicating sequential processes,CSP)的并行组合(这里可能用「并发」会更为准确)是基本的程序组织方法。Go 语言的并发设计就是基于 CSP 模型的。
在最初的 CSP 模型中,程序总由若干个可以相互通信的进程构成,其中每一个进程内部是顺序执行的(这也就是 CSP 名称的含义)。注意这里的「进程」并不一定指操作系统中的进程,也不一定是操作系统的线程,它是一个抽象的概念,代表一组计算的序列,例如 goroutine 这种在应用层调度的计算序列也算 CSP 中的「P」。与 Go 语言不同的地方在于,这个最初的设计中并没有通信管道的概念,每个进程是直接和另一个进程进行通信的,但在 Go 语言中,goroutine 是匿名的,一个 goroutine 并没有办法直接将消息发给另一个 goroutine,为了实现 goroutine 之间的通信,Go 语言提供了 first class 的 channel,消息通过 channel 来从一个 goroutine 发到另一个 goroutine。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我觉得这种语言是相当不错的,因为这种语言都是最新的设计,我记得是最早的时候,2009年的时候设计的首款当时出来的时候就轰动一时,你要知道它比那些非语言还有Java语言要新吸引很多越新颖的语言的话,它就越有它的优势所在,那么构语言就是这样子的,我一直都很喜欢这种新时代的语言,这种语言的话设计也是相当的不错的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
现在语言范型的最新设计都是比较广泛的,现在都已经抛弃了传统语言设计的一种方案,所以最新的款式能够让大家感受到语言设计的一种广泛性
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询