编程语言的核心:类型系统(Type System)

编程语言的核心是其类型系统,只要掌握了其类型系统,对整门编程语言的掌握便事半功倍。

为啥这么说呢?

首先,在设计一门编程语言的时候,会针对该编程语言所作用的问题域 (Problem Domain) 和 解决域 (Solution Domain),进行设计。

由此,对于问题域和解决域的抽象,就行形成该编程语言的抽象模型 (Conceptual Model),而类型系统就是该抽象模型的正式表征 (Formal Representation),也就是说,通过类型检查 (Type Check) 的方式,约束了通过编程语言表达的程序行为,相对该抽象模型来说,是有意义的 (Type Check succeeded),哪些是没意义的 (Type Check failed)。

抽象模型就是通过一个模型统一了问题域与解决域的所有概念的描述,使得问题域与解决域里的所有概念及其关系等内容都可以在统一的抽象模型里进行表达及运算。

这就是类型系统是编程语言核心的底层逻辑:

        问题域和解决域 (Problem and Solution Domain) => 抽象模型 (Conceptual Model) => 类型系统 (Type System) => 语义 (Semantics) => 语法 (Syntax)

下面以 C语言为例子,通过上述的逻辑,分析一下 C语言的问题域和解决域,由此引申出其抽象模型,及类型系统。

C语言是一门基于 图灵完备图灵机 (Turing Complete Turing Machine) 抽象模型的通用 (General Purpose)编程语言。其创建是为了解决可移植 (Portable) 问题的。在没有C之前,针对操作系统的编写,会使用对应硬件指令集架构 (Instruction Set Architecture, ISA) 所给定的汇编语言 (Assembly) 来编写。如果,该操作系统要适配不同的指令集架构,就需要从写对应的汇编指令,这样会带来大量重复的工作量,即同样的运算逻辑,需要用不用汇编指令来实现,以支持不同的架构。由此,C就应运而生,使得用C程序来表达对应的运算逻辑,然后通过编译器,编译成对应指令集架构的运行程序即可。一套代码适配多个不同的指令集架构。同时这些指令集架构,如我们现在常见的 X86,ARM, RISCV,SPARC,POWER等,都是基于冯洛伊曼架构和哈佛架构的混合,在编程视角来看是冯洛伊曼架构,在CPU执行的视角来看是哈佛架构,这两种架构的核心还是图灵机,由此,C语言需要兼容这些指令集架构,其底层逻辑必须支持图灵机,即其抽象模型是图灵机,更确切地说,C语言的抽象模型是 寄存器机器(Register Machine),是一种图灵完备的图灵机。

下一步,就是讲述一下C语言的类型系统。从上面论述,C语言的抽象模型是寄存器机器,即除了有可随机访问的主存 (Random Access Main Memory)以外,还有通用或特用的寄存器,用来保存某些状态或数值的。这样,就很好地赋予了C语言类型系统的含义了。

首先,C语言里面有基础类型,包括 char, short, int, float等等,这些类型是直接匹配到寄存器的大小上面的。也就是说,例如通用寄存器的长度为 64bit,可拆分为 8bit,16bit,32bit, 64bit来使用,分别对应了 char, short, int, long的类型,具体的一一对应需要参考不同指令集架构的规定。而float, double则对应了 浮点寄存器的长度。这是C语言里面的最基础类型。

基于这些基础类型,C语言提供了类型建构机制,即给定一个类型,可以生成或组合成另一个类型。包括,struct, enum, union, array, pointer, function, function pointer, label 等,以及类型约束符(qualifier) const, volatile, restrict等。

其中,类型系统中,有个关键的类型就是 指针(pointer)及地址的概念。这个是由于C语言需要对地址进行直接访问(读写),这也是图灵机所要求的。由此可见,基于寄存器机器的抽象模型,派生出来了C的类型系统,从而使得C语言的语法需要把这些内容都表达出来,从而形成C语言。

另外,其他的类C语言都有着相似的类型系统,这个是因为其背后还是基于寄存器机器或相似的抽象模型导致的。如C++,就是基于C语言的基础上,增加了面向对象 (Object Oriented)的机制,以及 模板 (Template) 机制 (也叫泛型 (Generic) 机制)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值