Ортогональность в языке программирования означает, что относительно небольшой набор
примитивные конструкции могут быть объединены относительно небольшим количеством способов
построить структуры управления и данных языка. Кроме того, каждый
Возможное сочетание примитивов является законным и значимым. Например, рассмотрим типы данных. Предположим, что язык имеет четыре примитивных типа данных (целое число, число с плавающей запятой,
double и символ) и операторы двух типов (массив и указатель). Если два
операторы типа могут быть применены к себе и к четырем примитивным типам данных,
можно определить большое количество структур данных.
Значение ортогональной языковой характеристики не зависит от
контекст его появления в программе. (слово ортогональное происходит от
математическая концепция ортогональных векторов, которые не зависят друг от друга
другое.) Ортогональность следует из симметрии отношений между первичными
ставители. Отсутствие ортогональности приводит к исключениям из правил языка.
Например, в языке программирования, который поддерживает указатели, он должен быть
можно определить указатель для указания на любой конкретный тип, определенный в языке.
Однако если указателям не разрешено указывать на массивы, многие потенциально полезные пользовательские структуры данных не могут быть определены.
Мы можем проиллюстрировать использование ортогональности в качестве концепции дизайна путем сравнения
один аспект языков ассемблера мэйнфреймов IBM
и серия миникомпьютеров VAX. Мы рассмотрим одну простую ситуацию:
добавление двух 32-битных целочисленных значений, которые находятся либо в памяти, либо в регистрах, и
заменяя одно из двух значений суммой. У мейнфреймов IBM есть два
инструкции для этой цели, которые имеют форму
A Reg1, memory_cell
AR Reg1, Reg2
, где Reg1 и Reg2 представляют регистры. Семантика этих
Reg1 ← contents(Reg1) + contents(memory_cell)
Reg1 ← contents(Reg1) + contents(Reg2)
Инструкция добавления VAX для 32-разрядных целочисленных значений:
ADDL operand_1, operand_2
с семантикой
operand_2 ← contents(operand_1) + contents(operand_2)
В этом случае любой операнд может быть регистром или ячейкой памяти.
Конструкция команды VAX является ортогональной в том смысле, что одна инструкция может
используйте регистры или ячейки памяти в качестве операндов. Есть два способа
указать операнды, которые можно комбинировать всеми возможными способами. Дизайн IBM
не ортогонально. Только два из четырех возможных комбинаций операндов
законно, и эти два требуют различных инструкций, A и AR. Дизайн IBM
более ограничен и, следовательно, менее доступен для записи. Например, вы не можете добавить
два значения и сохранить сумму в ячейке памяти. Кроме того, IBM
дизайн сложнее освоить из-за ограничений и дополнительных инструкций.
Ортогональность тесно связана с простотой: чем больше ортогональность
дизайн языка, меньшее количество исключений, требуемых правилами языка. Меньшее
исключения означают более высокую степень регулярности в дизайне, что делает
язык легче учить, читать и понимать. Любой, кто научился
значительная часть английского языка может свидетельствовать о сложности изучения его
много исключений из правил (например, я до е, кроме как после с).