Постоянная холлерита - Hollerith constant

Константы холлерита, названный в честь Герман Холлерит, использовались в ранних FORTRAN программы, позволяющие манипулировать символьными данными.

Ранний FORTRAN не имел ПЕРСОНАЖ тип данных, только числовые типы. Чтобы выполнять манипуляции с символами, символы должны быть помещены в числовые переменные с использованием констант Холлерита. Например, постоянная 3HABC задана трехсимвольная строка "ABC", идентифицированная начальным целым числом, представляющим длину строки 3 и указанный символ Холлерита ЧАС, за которым следуют строковые данные ABC. Эти константы были бессмысленный, чтобы не было преобразование типов вопросы. Если константа указывала меньше символов, чем можно было удерживать в элементе данных, символы затем сохранялись в элементе выровненный по левому краю и пустой.

Механика

Посредством FORTRAN 66 Стандартный синтаксис Холлерита был разрешен в следующих случаях:

  • Поскольку константы в ДАННЫЕ заявления
  • Как постоянные фактические аргументы в подпрограмме ВЫЗОВ заявления
  • Как редактировать дескрипторы в ФОРМАТ заявления

Переносимость констант Холлерита была проблематичной. Первый, слово размеры варьировались в разных компьютерных системах, поэтому количество символов, которые можно было поместить в каждый элемент данных, также варьировалось. Реализации варьировались от двух до десяти символов на слово. Во-вторых, было сложно переносить отдельные символы в слове. Это привело к большому количеству смещение и маскировка код, использующий нестандартные, зависящие от поставщика функции. Тот факт, что наборы символов на разных машинах различались, также усложнял проблему.

Некоторые авторы придерживались мнения, что для лучшей переносимости для каждого элемента данных следует использовать только один символ. Однако, учитывая небольшой объем памяти машин того времени, этот метод считался чрезвычайно расточительным.

Технологическое устаревание

Одной из основных особенностей FORTRAN 77 была ПЕРСОНАЖ строковый тип данных. Использование этого типа данных резко упростило манипуляции с символами в программах на Фортране - почти все способы использования константы Холлерита стали устаревшими.

Константы Холлерита были удалены из стандарта FORTRAN 77, хотя все еще описаны в приложении для тех, кто желает продолжить поддержку. Дескрипторы редактирования Hollerith были разрешены через Fortran 90 и были удалены из стандарта Fortran 95.

Примеры

Ниже приводится FORTRAN 66. Привет, мир программа с использованием констант Холлерита. Предполагается, что реализация поддерживает не менее четырех символов на слово:

 ПРОГРАММА HELLO1C ЦЕЛОЕ IHWSTR(3) ДАННЫЕ IHWSTR/4HHELL,4HO WO,3HRLD/C ЗАПИСЫВАТЬ (6,100) IHWSTR ОСТАНОВКА  100 ФОРМАТ (3A4) КОНЕЦ

Помимо ДАННЫЕ операторов, константы Холлерита также допускались в качестве фактических аргументов в вызовах подпрограмм. Однако у вызываемого не было способа узнать, сколько символов было передано. Программист должен был передать информацию явно. В Привет, мир программу можно было бы написать так - на машине, где в слове хранятся четыре символа:

      ПРОГРАММА HELLO2 ВЫЗОВ WRTOUT (11HELLO WORLD, 11) ОСТАНОВКА      КОНЕЦC ПОДРОБНЕЕ WRTOUT (IARRAY, NCHRS) C INTEGER IARRAY (1)[примечания 1]      INTEGER NCHRSC INTEGER ICPW DATA ICPW / 4 /[примечания 2]      INTEGER I, NWRDSC NWRDS = (NCHRS + ICPW - 1) / ICPW WRITE (6,100) (IARRAY (I), I = 1, NWRDS) ВОЗВРАЩАТЬСЯ  ФОРМАТ 100 (100A4)[примечания 3]      КОНЕЦ

Хотя технически это не константа Холлерита, тот же синтаксис Холлерита был разрешен как редактировать дескриптор в ФОРМАТ заявления. В Привет, мир программа также может быть записана как:

 ПРОГРАММА HELLO3 ЗАПИСЫВАТЬ (6,100) ОСТАНОВКА  100 ФОРМАТ (11HHELLO МИР) КОНЕЦ

Одной из самых удивительных особенностей было поведение дескрипторов редактирования Холлерита при их использовании для ввода. Следующая программа изменится во время выполнения ПРИВЕТ, МИР к тому, что могло бы быть следующими одиннадцатью символами во входном потоке, и распечатайте этот ввод:

 ПРОГРАММА ЧТО1 ЧИТАТЬ (5,100) ЗАПИСЫВАТЬ (6,100) ОСТАНОВКА  100 ФОРМАТ (11HHELLO МИР) КОНЕЦ

Примечания

  1. ^ FORTRAN 66 не имел возможности указать массив переменного размера. Таким образом, «1» обычно использовалась, чтобы указать, что размер неизвестен.
  2. ^ Четыре символа в слове.
  3. ^ Число 100 - это «достаточно большое» значение, чтобы можно было записать любое разумное количество символов. Также обратите внимание, что здесь также жестко задано четыре символа на слово.

Рекомендации

  • Американский стандарт FORTRAN. Американская ассоциация стандартов, X3.9-1966. п. 38.

4.2.6 Тип Холлерита. Датум Холлерита - это строка символов. Эта строка может состоять из любых символов, которые могут быть представлены процессором. Пробел - действительный и значимый символ в системе данных Холлерита.