闲聊八卦,朋友来了一句:
.net的泛型和Java的泛型有啥区别,为啥.net可以做基元类型的泛型,而Java不可以,以及跟C++的模板啥区别?
然后我就懵了,这。。。毕业后一直摸的是动态语言,菜菜的我因为最近正好也要熟悉下我们这边服务端(Java),就认真的查了查朋友的问题
(PS:朋友的后续聊天:C++的模板也会有问题,他带来了代码的膨胀,他带来了代码的膨胀;Java的泛型也有自身的问题,Java的泛型做的是类型擦除,这样对于基元类型要做一次装箱;.Net的泛型我觉得好看,但是Java之所以没有这么做,我觉得是因为历史原因;所以千万别只局限js;所以有时候真要追求性能,我们就会自己写数据结构)

泛型编程是自 STL(标准模板库)纳入到 C++ 标准以后才逐渐流行起来的新范式,核心思想是“一切皆为类型”,或者说是“参数化类型”“类型擦除”,使用模板而不是继承的方式来复用代码,所以运行效率更高,代码也更简洁。
在 C++ 里,泛型的基础就是 template 关键字,然后是庞大而复杂的标准库,里面有各种泛型容器和算法,比如 vector、map、sort,等等。

论文指路:

http://stepanovpapers.com/genprog.pdf

TypeScript-文档指路:

https://www.tslang.cn/docs/handbook/generics.html