Формулировка стандарта C ++ предполагает двоичную архитектуру:
[intro.memory] / 1:
Основная единица хранения в C ++Модель памяти - это байт.Байт, по крайней мере, достаточно большой, чтобы содержать любой элемент базового набора символов выполнения и восьмибитовых кодовых единиц формы кодирования Unicode UTF-8 и состоит из непрерывной последовательности битов , числаиз которых определяется реализацией.
[основной / фундаментальный] / 4:
Беззнаковые целые должны подчиняться законам арифметики по модулю 2 [возводятся в степень]n, где n - количество битов в представлении значения этого конкретного размера целого числа.
Кроме того, битовые поля и биты заполнения часто являютсяиспользуемые понятия.
Операторы, такие как сдвиг влево, сдвиг вправо, также относятся к битам, а битовые, битовые или битовые xor являются операциями по определению, которые работают на уровне битов, предполагая, что каждый бит является истинным илиложный.
Что, если стандарт будет адаптирован к троичной архитектуре?
Можно представить, что в стандарте можно использовать другой термин для обозначения наименьшего фрагмента информации в архитектуре, аналогично тому, как онбыло сделано для байта (байт, хотя чаще всего 8 битов не определены как таковые в стандарте, чтобы стандарт мог хорошо работать с машинами, имеющими 10-битные байты).
Тем не менее последствия будут ужасными:
Например, во многих алгоритмах левое смещение умножается на степень 2, и внезапно оно умножается настепень 3. То же самое для правого сдвига.Таким образом, большая часть существующего кода больше не будет работать.
битовые операции не определены для тритов: они определены только для двоичных битов.Таким образом, стандарт должен был бы переопределить их так или иначе (например, подражая исходному поведению с некоторой степенью силы 2 математики).Опять же, есть вероятность того, что некоторый существующий код будет сломан, особенно если он используется в сочетании со сдвигами.
Дополнительное замечание
Со времен провидческой книги Норберта Винера " Кибернетика ", опубликованной в 1948 году (!!!)больше нет сомнений в том, что альтернативы бинарным системам отсутствуют.В главе « Вычислительные машины и нервная система » он очень хорошо объяснил, почему числовые машины более точны и производительны, чем аналоговые, и что среди числовых машин двоичная арифметика превосходит другие, потому что она проще, быстрее и дополнительно проще и дешевле реализовать .В настоящее время никто не смог доказать обратное, поэтому в ближайшее время не будет видно никакой троичной компьютерной архитектуры.
Комментарии
В комментариях Питер указывает, что реализация просто должна предлагать заданное поведение абстрактной машины, определенное в стандарте C ++.Это верно в соответствии с [intro.abstract] / 5.Но я хочу сказать, что это только теоретическая истина с точки зрения троичных машин.
Бинарная модель является настолько сильным допущением во многих местах стандарта и переплетена с адресациейсхема, которую я буду притворяться, что невозможно эффективно и последовательно эмулировать на троичной машине.
Просто чтобы проиллюстрировать проблему с определением байтов: требуется 6 тритов для соответствия требованиям для байта. Однако 6 тритов соответствует 9,5 битам. Чтобы байт соответствовал последовательному числу битов, как того требует стандарт, вам нужно, чтобы он был равен s trits, чтобы pow (3, s) == pow (2, n). Это уравнение не имеет решений. В качестве альтернативы вы можете сказать, что байт хранится в 9 битах в 6 тритах, и что вы просто игнорируете некоторые троичные значения. Но поскольку байты используются для хранения указателей, вы также можете игнорировать некоторые диапазоны памяти. Поэтому вам понадобится функция отображения для преобразования значений, хранящихся в байтах, и адресов машин. Но что тогда с аппаратными ограничениями выравнивания? Они могут не соответствовать выравниваниям, которые могут быть выражены в соответствии с бинарной моделью и т. Д. В конце вам понадобится медленная виртуальная машина, которая полностью программно эмулирует бинарную архитектуру (безусловно, с тем же уровнем производительности, что и многие эмуляторы MIPS на архитектуре x86, так что хорошо для образовательных целей). Я думаю, что это могло бы тогда соответствовать стандарту, но больше не наши ожидания производительности.