类型系统学习 篇3:从英语语言角度理解编程语言类型系统


https://www.cis.upenn.edu/~bcpierce/tapl/taplcover.jpg

2023-10-21 更
时隔一周,上周什么也没干。我开始在质疑自己学习c语言的合理性,反思自己学习c语言的必要性。我一直在说服自己这是成为高级程序员的第一步。

一、再聊数据类型与类型系统

https://zhuyinjun.me/2019/type_system_in_programming_languages/
以下主要从上述这篇文章中获得启发。
将数据类型,称为类型,表达一个数据集合。这是一套规则,事关如何表达、存储、计算。前面这句,大概是作者要表达的意思。也有举例,可以这样去理解,比如在c语言中,我们要去定义一个整型变量,int a =5 。 5是什么?5是个整数吧,你知道要用到int,就是这样。

类型系统把类型和计算的值关联起来,确保不会发生类型错误(type error)。类型系统通常是编程语言的一部分,构建在该语言的编译器或解释器中。无论在编译时还是运行时,或者无论通过手动注明还是自动推断,编程语言必须能够用类型系统中的规则做类型检查。
这一段,就是说,还是跟篇1一样。类型系统是一个语言,最核心的部分,它也是规则,它是更加全面的规则。

为什么需要类型?这个问题值得思考。 为什么需要?表达的需要,就是为了写程序更加方便。

笔记: 还是一样,就跟现在学习高等数学一样,学到微分,刚引入微分的时候,老师问大家还有什么疑问没有? 定义就是这样定义的,有什么疑问? 篇1提到了一个观点。 把类型系统理解成概念,相当于这里我们提出一个高等数学的”微分“的概念,这个高等数学的”微分“的概念(定义),就是C语言的类型系统的”XXX“细节。 这样去理解,对于理解类型系统还是很有帮助的。 刚开始,把类型系统看作是规则就行,熟悉这套规则的使用是很重要的,而后再说怎么具体去理解‘规则”的定义。

二、类型检查

笔记:这块我大概理解为,”执法者“。 当你在程序语言的世界中时,创世者创造了一套规则,称为”类型系统“,你在这个世界中,你要去”劳作“,比如你去造房子,什么的。 你符合不符合这个”规则“,创世者他不知道,怎么办? 他派出这个 ”执法者“,又叫” 类型检查“的小弟,说,你去看看,这个臭小子,到底有没有符合规则。 造房子不符合规则,就给他说哪里不对,让他去整改。 不整改,反正就是房子不让继续盖了。 这个”类型检查“大概就是干这个事情的,这对后面理解隐式类型、显式类型,有很大帮助。

三、隐式类型与显式类型

同样把一个字符串和一个整形拼在一起,PHP 并不会报错,而是正常执行。正是因为 PHP 解释器能理解你想把整数 20 转换成字符串并和另一个字符串拼在一起,所以它暗地里自动帮你转换类型了。
编译器/解释器自动地、隐式地帮你转换类型而不通知你,这种行为叫做隐式类型转换(implicit type change)或者叫type coercion。
与隐式类型转换相对应的是显示类型转换(explicit type change)或者叫type casting。
隐式类型转换,是弱类型语言的一个特征。 像 PHP 这种经常做隐式类型转换的语言,做类型检查的程度较轻,也较少抛出类型错误异常,所以可以被认定是弱类型的。
而在 Python 的例子中,运行时抛出了类型错误异常,意味着 Python 做类型检查较严格,所以可以被认定为是强类型。
另一个判断是否类型安全的角度是,该语言是否会阻止你访问你不应该访问的内存 。从这个角度来看,C 和 C++ 显然不满足。所以把类型强弱和类型安全关联在一起话,C 和 C++ 就是典型的弱类型。

上面这一段,对于隐式转换,显式转换,讲的很清楚了,没有必要再去解释。

四、从英语语言角度理解编程语言类型系统

有关类型系统的学习,差不多到这里就结束了,但是我感觉还是意犹未尽。借助ChatGPT,我问了 一个问题,就是, 如果从学习英语,就是从英语语言的角度去理解类型系统,是不是会更加直观一些?

C编程语言的类型系统可以类比为英语中的语法和词法规则。以下是类比的解释:

  1. 类型系统相当于语法规则:就像英语中有一套语法规则来定义句子的结构和组织方式,C编程语言有一套类型规则来定义如何构建和使用数据。这包括如何声明变量、分配内存、执行运算等。就像英语句子必须符合语法规则以便被理解,C程序必须遵循类型规则以便被编译和执行。
  2. 数据类型相当于词法规则:在英语中,不同的词汇有不同的词法规则。例如,名词、动词和形容词等具有不同的词法属性。在C语言中,不同的数据类型就像不同的词汇,它们具有不同的内部表示和操作。例如,整数、字符、浮点数等是C语言的数据类型,它们有不同的存储方式和可执行的操作。
  3. 类型检查相当于语法检查:在英语中,语法检查用来确保句子符合语法规则。在C编程中,类型检查是一种编译时或运行时的检查,以确保程序遵循类型规则。就像英语中的语法检查可以捕捉语法错误,类型检查可以捕捉类型错误。
  4. 错误处理相当于语法错误处理:在英语中,如果句子不符合语法规则,需要进行错误处理和修正。在C编程中,如果代码不符合类型规则,编译器或程序会生成错误消息。处理这些错误类似于在英语中处理语法错误。

综上所述,C编程语言的类型系统相当于英语中的语法和词法规则。它规定了如何构建和使用数据,以确保程序正确运行。就像理解英语句子需要遵循语法规则一样,编写C代码需要遵循C语言的类型规则。同时,错误处理也是类似的,它有助于捕捉和纠正类型和语法错误。

  1. 类型的定义:就像英语中有名词、动词、形容词等不同的词类一样,编程语言中的类型定义了不同的数据类别。例如,整数类型、浮点类型、字符类型就像英语中的名词,动词和形容词一样。理解每种类型的含义和如何使用它们就像理解词类一样。
  2. 数据的性质:英语中的名词可以表示人、地点或事物,而在编程中,不同类型的数据也有不同的性质。例如,整数可以用来表示计数,浮点数用来表示实数,布尔值用来表示真或假,字符串用来表示文本。了解这些性质将帮助您理解数据的类型。
  3. 类型转换:有时英语中的词类可以相互转换,例如将名词转换为动词。在编程中,类型转换也是可能的,但需要小心,因为这可能会导致数据的丢失或不确定的行为。就像在英语中不是所有名词都可以轻松地转换为动词一样,不是所有类型都可以轻松地转换为其他类型。

相关推荐

intel 8086 asm 基础1

1.进入debug模式 r 查看 2. mov指令测试 指令以CS:IP 格式进行读取,后跟8086 asm实 ...

暂无评论

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。