我对所有编程爱好者都有疑问。 指针一直存在于编程世界中。 就像在C,C ++中得到明确的指针支持一样。 在java中,显式指针支持不存在,但Java系统内部使用指针。 在实际世界中,是否可以开发一种编程语言来完全没有指针别名?
答案 0 :(得分:7)
Stack based languages是图灵完整但没有指针且没有内存别名。
面向堆栈的编程语言是依赖于堆栈机器模型来传递参数的语言。有几种编程语言符合这种描述,特别是Forth,RPL,PostScript,BibTeX风格设计语言
如果基于堆栈的语言允许您将堆栈上的值解释为堆栈上的一个点,则可能会出现类似于指针别名引入的问题,但这不一定是允许的操作。
答案 1 :(得分:3)
Programming without Pointer Variables描述了使用递归定义的数据类型而不是算法中的指针。
高级别指针变量的存在 编程语言最初构成了一个工件 介绍支持代表 递归数据结构。
答案 2 :(得分:2)
如果您的语言有数组,并且您可以使用整数值索引这些数组,则实际上在数组中存在别名。
通常,将键映射到值的任何关联结构都是如此(数组是一种特殊情况)。实际上,如果您的程序具有Turing功能且可以生成密钥,则无法证明生成的密钥不会“别名”。
我认为没有某种类型的关联查找的语言在实践中可能毫无用处。
如果您不想被此咬伤,您必须使您的关联结构不可变。在这种情况下,您仍然会有别名,但您不会对获取的值感到惊讶。
答案 3 :(得分:0)
如果你想消除别名问题,我建议你研究一些禁止变异结构的纯函数式编程语言,比如Haskell,或者是集合是写时复制的语言,比如J。