我的作业中有一个问题。机器上的帕斯卡变量如何表示?例如:在 C 中,在不同的机器和编译器上可能会有所不同,在 java 中有一个 VM,因此程序员可以假设他将在不同的机器上获得完全相同的表示。
我已经在谷歌上搜索了一段时间,找不到关于帕斯卡的答案。问题是关于帕斯卡的原始版本,如果它改变了一些东西。
谢谢!
我的作业中有一个问题。机器上的帕斯卡变量如何表示?例如:在 C 中,在不同的机器和编译器上可能会有所不同,在 java 中有一个 VM,因此程序员可以假设他将在不同的机器上获得完全相同的表示。
我已经在谷歌上搜索了一段时间,找不到关于帕斯卡的答案。问题是关于帕斯卡的原始版本,如果它改变了一些东西。
谢谢!
Original (J&W) Pascal 极为罕见,大多数人都不知道。它在 ISO 7185 标准中进行了一些清理,尽管 IIRC 的这些更改主要影响范围和类型等效性,而不是类型的类型。
原始(非 UCSD,比 Borland/Turbo 方言早了十多年)Pascal 几乎没有依赖于机器的类型。只有一种类型 INTEGER 和一种浮点类型 REAL 和非整数序数类型,如枚举、布尔值和字符。Char 不保证 8 位,它取决于机器字。
Pascal 在这里展示了他的大型机根源,其中单词具有 60 位等奇异大小,不允许子字访问(例如字节级访问,但这是一个延伸,因为他们可能不知道字节的概念),并且打包了多个字符成机器词。(见下面的打包数组)。C 是几年后的事,它的目标是 mini,因此避免了最糟糕的遗产。
整数类型是系统中最大的类型,往往是机器可以方便地做的最大类型。较小的整数大小是用子范围构造的,没有无符号类型,但是可以用相关的子范围来定义这些(并且由编译器/虚拟机来有效地实现这些)
例如字节= 0..255;
数组可以打包,并且必须在使用前解包(使用 pack() 和 unpack())。
没有字符串类型,通常使用打包的固定大小的 char 数组,用空格右填充来表示 endofstring(所以尾随空格很难,但这只是一个约定,并没有太多运行时支持,所以在特殊情况下,您只需破例)
联合包含所有组件作为单独的字段(不重叠)并且总是被命名。
它有指针,但不能获取任意符号的地址,并且只能使用 NEW 创建新指针。
所以总的来说,原始的 Pascal 是你所说的合理“安全”的语言,尽管它并没有完全设计成这样(而且理论上不是 100% 安全。它也比 TP 更适合 VMing(这发生在UCSD,尽管只是一个子集)。
Pascal 及其后继者可以被认为是对后来随 Java 普及的概念的侦察。
In C it can be different on different machines and compilers, so are they in Pascal, of course.