左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180928 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

32 | 编程范式:类型系统和泛型的本质

抽象化
代码的可读性
编译器的优化
程序语言的安全性
C++的复杂性
C语言、Java和Python的取舍
控制底层细节与关注业务逻辑的平衡
C++的技术实现
标准化类型上特有的操作
标准化数据容器的操作
标准化类型的操作
类型的抽象
类型检查系统
类型问题
静态类型检查
强类型与弱类型
类型检查系统
类型问题
动态类型检查
类型的功能
类型约束
抽象类型
内建类型
编程语言设计的取舍
泛型的本质
静态类型语言
动态类型语言
类型系统
泛型编程

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
前面,我们讨论了从 C 到 C++ 的泛型编程方法,并且初探了更为抽象的函数式编程。正如在上一讲中所说的,泛型编程的方式并不只有 C++ 这一种类型,我们只是通过这个过程了解一下,底层静态类型语言的泛型编程原理。这样能够方便我们继续后面的历程。
是的,除了 C++ 那样的泛型,如果你了解其它编程语言一定会发现,在动态类型语言或是某些有语法糖支持的语言中,那个swap()search() 函数的泛型其实可以很简单地就实现了。
比如,你甚至可以把swap()函数简单地写成下面这个样子(包括 Go 语言也有这样的语法):
b, a = a, b;
在上一讲后面的 Reduce 函数中,可以看到,在编程世界中,我们需要处理好两件事:
第一件事是编程语言中的类型问题。
第二件事是对真实世界中业务代码的抽象、重用和拼装。
所以,在这一讲中,我们还是继续深入地讨论上面这两个问题,着重讨论一下编程语言中的类型系统和泛型编程的本质。

类型系统

在计算机科学中,类型系统用于定义如何将编程语言中的数值和表达式归类为许多不同的类型,以及如何操作这些类型,还有这些类型如何互相作用。类型可以确认一个值或者一组值,具有特定的意义和目的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了编程范式中类型系统和泛型的重要性,以及不同编程语言中的实现方式。作者首先介绍了泛型编程的普遍性,不仅限于C++,而是涉及到各种编程语言中的类型问题。通过C++的例子,探讨了底层静态类型语言的泛型编程原理,并指出在动态类型语言或支持语法糖的语言中,泛型函数可以更简单地实现。文章强调了对类型系统和泛型编程的深入理解的重要性,以及编程语言设计中的取舍。通过学习C++,读者可以了解到一个比较完整的泛型编程里所涉及的编程范式,这些编程范式在其他语言中都会或多或少地体现着。总的来说,本文对于想要深入了解编程范式的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(47)

  • 最新
  • 精选
  • 云学
    意犹未尽啊,比追剧还痛苦

    作者回复: 哈哈

    2018-01-12
    3
    42
  • lostsquirrel
    python 不能这样用吧, x=5,x="hello", python 可以说是强类型吧

    作者回复: 当然可以。强类型和动态类型是两码事,前者是判断不同的类型是否可以互转,后者是变量的类型可以动态调整。

    2018-03-27
    7
  • lostsquirrel
    谢谢指正,是我记错了,是 x = 5, y = "hello", x + y 会报错,随便吐槽下这app到处坑,留言不能回复,昨天在小程序听音频,不知道在哪停止。。。

    作者回复: 我帮你转答池建强

    2018-03-27
    1
  • shougao
    “类型是对内存的抽象,不同的类型会有不同的内存分布和内配策略”,见识了,用范型这么多年真是白用了。
    2018-01-19
    75
  • saiyn
    “C 语言偏向于让程序员可以控制更多的底层细节,而 Java 和 Python 则让程序员更多地关注业务功能的实现。而 C++ 则是两者都想要,导致语言在设计上非常复杂” —多么简单而又深刻的诠释,大赞
    2018-05-31
    24
  • W_T
    类型是对内存的一种抽象。这是我在这篇文章中最大的收获
    2018-02-03
    24
  • 易轻尘
    自己的总结:任何编程语言都有类型系统,因为它们都需要在内存中表示数据,不同类型可能具有不同的内存布局和内存分配问题。特别是计算机底层还区分大小端、浮点数、整型等等,再加上用户自定类型,如何处理不同类型间的运算、判断不同类型间的运算是否合法就更为复杂。 有的语言将这个任务放在编译时进行(静态类型系统),有的语言放在运行时进行(动态类型系统)。 而泛型的主要目的就是提高代码的复用性,能够使某个算法能在不同的类型上正确运行,而无需程序员为每个类型都写出相应的算法。怎么做呢,加中间层呗,这个中间层的作用还是自己根据具体不同类型选择内存的操作方式以及进行必要的数据类型转换。
    2019-08-27
    15
  • OutOfMemory1024
    本来说就看10分钟,一不小心就从一看到三了,耗哥快更新^_^。 这个系列除了了解不同的编程范式,最关注的是不同的编程范式如何设计,解决了什么问题。这些皓哥都点到了。我个人喜欢Scala这门语言,觉得它的设计非常优美,函数式编程和类型系统都是它的特点,希望皓哥这个系列或者答疑中能写写您的看法。 对于皓哥掌握那么多不同的编程范式,每种起源发展娓娓道来,我也是钦佩不已,不知道皓哥能不能介绍下是怎么学习和了解的,谢谢!
    2018-01-11
    1
    10
  • Edward Lee
    有时候,人们就喜欢将动态语言变成静态,将静态语言变成动态。如 JavaScript 中的 TypeScript,Java 中的 Scala Groovy Kotlin
    2020-04-27
    2
    7
  • edisonhuang
    所有编程语言都需要解决两个件事情: 第一件事是编程语言中的类型问题。 第二件事是对真实世界中业务代码的抽象、重用和拼装。 使用数据类型,可以帮助程序员忽略掉底层系统对资源的操作,但同时也带来代码和类型的绑定。因此泛型就是采用合适的策略,解决掉对底层系统资源访问,内存的分配和释放问题。解决数据的移位变换问题,解决数据容器的访问问题。 可以看到,由于程序语言是业余系统和计算机底层硬件之间的粘合剂,因此任何程序语言都不可能避免数据类型,区别只在于类型是编译时指定,还是运行时检查。通过泛型可以带来代码的重用,同时保证类型的安全
    2019-06-19
    6
收起评论
显示
设置
留言
47
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部