硬件设计EBP/RBP, ESP/RSP, LEA和通用计算指令ADD/MOV等等都支持寻址,编程语言访问内存地址被抽象成指针。
- 汇编语言是机器语言的代号语言,自然不用多说。
- C语言几乎是汇编的最自然转译,也必然支持指针。
- ObjC本质是披着面向对象语法的C语言前端,兼容C语言,一样支持指针。
- C++除了大体兼容C,还引入了引用,本质上就是指针,只是换了一种形态,让程序员少写指针代码。
- Java/C#本身为了安全编写,对象默认就是引用类型,语言的预期是程序员永远不用写显式的指针。特例是C#还允许在特殊情况下用unsafe显式写指针代码。
- Python语言CPython解释器本身是C语言编写,但语言已经不需要程序员关注指针,解释器已经很好地封装了指针,尽管类成员函数需要显式写self指代自身,它仅仅是一个存在,程序员不需过多关注它的指向,只需要愉快地开发功能。
- JS解释器是C++编写,但语言本身也不需要程序员显式写指针,尽管指示对象的this依然会出现,它已经和Java/C#类似仅仅为了用它可以更方便访问成员和函数,而不是纠结指向哪里。
- SQL语言相比上面的语言更"高级", 语言像大白话,当然数据查询、增删改自然不需要关注"指针", 底层引擎已经屏蔽了"指针"。游标是比较像指针的概念,对应引擎内部可能会是一段内存buffer指针的体现,但使用者不需了解内部。
- Swift语言在设计上尽量避免了指针的使用,但也保留了
UnsafePointer和UnsafeMutablePointer来实现高效内存访问。 - Rust和Go语言因设计要求,保留了显式指针,为了简单、性能和明确。
