C和C ++标准对假设的三元硬件体系结构的适应性如何?

时间:2019-04-27 06:04:32

标签: c++ c architecture standards hardware

用C或C ++编程三元计算机的难易程度如何?

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

对于整数值,C标准是指值范围,而C ++标准是指位长(例如long必须至少为32bit长)。这对使用三叉戟(即三进制位)的计算机有何影响?

通常,使用经过稍微修改的C / C ++版本在三元体系结构上进行编程是否可行,还是应该从头开始设计新的编程语言?

要考虑的重要点是向后兼容性(是否可以很容易地为三元体系结构编译二进制假定程序,或者必须对二进制数据进行仿真?)以及C / C ++标准设计中隐含的假设。

1 个答案:

答案 0 :(得分:0)

C ++标准的措词采用二进制体系结构:

  

[简介内存] / 1:

     

C ++内存模型中的基本存储单元是字节。一种   字节至少要大到足以包含基本的任何成员   执行字符集和8位代码单元   Unicode UTF-8编码形式,由连续序列组成   数量,其数量由实现定义。

     

[基本/基本] / 4:

     

无符号整数应服从算术模2的定律   到] n的幂,其中n是值中的位数   该特定整数大小的表示形式。

此外,位字段填充位是常用的概念。

左移,右移之类的运算符也指的是位,按定义,按位和,按位或和按位或运算是在位级别进行操作(假定每个位为真或假)。

如果该标准适用于三元体系怎么办?

我们可以想象该标准可以使用另一个术语来指定体系结构中的最小信息,其方式与对 byte (字节,尽管通常为8位)的处理方式相似。在标准中没有这样定义,因此该标准可以很好地用于具有10位字节的机器。

尽管如此,后果将是可怕的:

    例如,
  • 左移在许多算法中都假定乘以2的幂,突然之间,它将乘以3的幂。因此,许多现有代码将不再起作用。

  • 按位运算未为Trit定义:它们仅针对二进制位定义。因此,该标准将不得不以一种或另一种方式重新定义它们(例如,通过使用2数学的某种能力来模拟原始行为)。同样,它们很可能会破坏某些现有代码,特别是如果与班次结合使用的话。

附加说明

自从1948年诺贝尔·维纳(Norbert Wiener)出版了有远见的书《 》以来,毫无疑问,二元系统的替代品已经成为现实。在“ 计算机和神经系统”一章中,他很好地解释了为什么数字机器比模拟机器更准确,性能更高,而在数字机器中,二进制算术的性能要优于其他机器。更简单,更快,另外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个Trits中的9位,而您只是忽略了一些三进制值。但是由于使用字节存储指针,因此您也将忽略某些内存范围。因此,您需要一个映射函数来在以字节为单位存储的值和机器地址之间进行转换。但是,硬件对齐约束又会怎样呢?这些可能不对应可以根据二进制模型表达的对齐方式,等等。最后,您将需要一个速度慢的虚拟机,该虚拟机可以通过软件完全模拟二进制体系结构(一定具有与Linux相同的性能水平)。 x86架构上有许多MIPS模拟器,因此可以用于教育目的)。我认为这可以符合标准,但不再符合我们的性能期望。