gpt4 book ai didi

c++ - C 和 C++ 标准对假设的三元硬件架构的适应性如何?

转载 作者:行者123 更新时间:2023-11-30 16:18:31 26 4
gpt4 key购买 nike

用 C 或 C++ 编写三进制计算机有多容易?

显然,标准逻辑运算符(如 &|^)仅在使用二进制逻辑时才有意义。

对于整数值,C 标准指的是值范围,而 C++ 标准则提到位长度(例如,long 必须至少为 32 位长)。这如何适用于使用 trits(即三进制位)的计算机?

一般来说,使用稍作修改的 C/C++ 版本在三元架构上进行编程是否可行,还是应该从头开始设计一种新的编程语言?

需要考虑的重点是向后兼容性(二进制假设程序是否可以轻松编译为三元架构,或者是否需要模拟二进制数据存储?)以及 C/C++ 标准设计中隐含的假设。

最佳答案

C++ 标准的措辞假定采用二进制架构:

[intro.memory]/1:

The fundamental storage unit in the C++ memory model is the byte. Abyte is at least large enough to contain any member of the basicexecution character set and the eight-bit code units of theUnicode UTF-8 encoding form and is composed of a contiguous sequenceof bits, the number of which is implementation-defined.

[basic/fundamental]/4:

Unsigned integers shall obey the laws of arithmetic modulo 2 [raisedto the power of] n where n is the number of bits in the valuerepresentation of that particular size of integer.

此外,位域填充位是经常使用的概念。

左移、右移等运算符也指位,按位与、按位或和按位异或根据定义是在位级别进行操作的运算,假设每个位为真或假。

如果标准适用于三元架构会怎样?

我们可以想象,该标准可以使用另一个术语来指定架构中最小的信息,其方式与字节(字节,尽管最常见的是 8 位)的方式类似。标准中没有这样定义,因此该标准可以很好地适用于具有 10 位字节的机器。

然而,后果将是可怕的:

  • 例如,在许多算法中,假设左移乘以 2 的幂,突然间,它会乘以 3 的幂。右移也是如此。所以很多现有的代码将不再工作。

  • 按位运算没有为 trits 定义:它们只为二进制位定义。因此,标准必须以某种方式重新定义它们(例如通过使用某种 2 数学幂来模拟原始行为)。同样,某些现有代码有可能被破坏,特别是与类次结合使用时。

补充说明

自从 Norbert Wiener 于 1948 年出版了富有远见的著作“控制论”(!!!)以来,二进制系统的替代品已经毫无疑问是存在的。在“计算机和神经系统”一章中,他很好地解释了为什么数值机器比模拟机器更准确、更高效,并且在数值机器中,二进制算术优于其他机器,因为它更简单,更快,此外easier and cheaper to implement 。目前,没有人能够证明相反的情况,因此很快就看不到三元计算机架构。

评论

Peter 在评论中指出,实现只需提供 C++ 标准中定义的抽象机的指定行为即可。根据 [intro.abstract]/5 的说法,这是正确的。但我的观点是,这只是三元机器的理论真理。

二进制模型在标准的许多地方都是如此强烈的假设,并且与寻址方案交织在一起,以至于我会假装不可能在三进制机器上以高效且一致的方式进行模拟。

只是为了说明字节定义的问题:它需要 6 个 trit 才能满足一个字节的要求。然而,6 个 trit 对应于 9.5 位。为了使一个字节对应于标准要求的连续位数,您需要它是 s trits,以便 pow(3,s) == pow(2,n)。该方程无解。或者,您可以说一个字节是存储在 6 个 trit 中的 9 位,并且您只是忽略一些三进制值。但由于字节用于存储指针,您也会忽略一些内存范围。因此,您需要一个映射函数来在字节存储的值和机器地址之间进行转换。但是硬件对齐限制又如何呢?这些可能与可以根据二进制模型表达的对齐不对应,等等......最后,您需要有一个缓慢的虚拟机,它完全通过软件模拟二进制架构(当然具有与二进制架构相同的性能水平)许多 x86 架构上的 MIPS 仿真器,因此可以用于教育目的)。我认为这可以符合标准,但不再符合我们的性能预期。

关于c++ - C 和 C++ 标准对假设的三元硬件架构的适应性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55877752/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com