Константы Холлерита , названные в честь Германа Холлерита , использовались в ранних программах FORTRAN для управления символьными данными.
Ранний FORTRAN не имел CHARACTER
типа данных , только числовые типы. Чтобы выполнять манипуляции с символами, символы должны быть помещены в числовые переменные с использованием констант Холлерита. Например, константа 3HABC
задает трехсимвольную строку «ABC», идентифицируемую начальным целым числом, представляющим длину строки, 3
и указанным символом Холлерита H
, за которым следуют строковые данные ABC
. Эти константы были Бестиповыми , так что не были преобразование типов вопросов. Если константа указывала меньше символов, чем было возможно удерживать в элементе данных, символы затем сохранялись в элементе с выравниванием по левому краю и заполнением пробелов .
Механика
К FORTRAN 66 Standard, синтаксис Hollerith было разрешено в следующих целях:
- Как константы в
DATA
операторах - Как постоянные фактические аргументы в
CALL
операторах подпрограммы - Как редактировать дескрипторы в
FORMAT
операторах
Переносимость констант Холлерита была проблематичной. Во-первых, размеры слов различались в разных компьютерных системах, поэтому количество символов, которые можно было разместить в каждом элементе данных, также варьировалось. Реализации варьировались от двух до десяти символов в слове. Во-вторых, было сложно переносить отдельные символы в слове. Это привело к большому количеству сдвигов и маскировки кода с использованием нестандартных, зависящих от производителя функций. Тот факт, что наборы символов на разных машинах различались, также усложнял проблему.
Некоторые авторы придерживались мнения, что для лучшей переносимости для каждого элемента данных следует использовать только один символ. Однако, учитывая небольшой объем памяти машин того времени, этот метод считался чрезвычайно расточительным.
Технологическое устаревание
Одной из основных особенностей FORTRAN 77 был CHARACTER
строковый тип данных. Использование этого типа данных значительно упростило манипуляции с символами в программах на Фортране - практически все способы использования константы Холлерита стали устаревшими.
Константы Холлерита были удалены из стандарта FORTRAN 77, хотя все еще описаны в приложении для тех, кто желает продолжить поддержку. Дескрипторы редактирования Hollerith были разрешены через Fortran 90 и были удалены из стандарта Fortran 95.
Примеры
Ниже приведена программа hello world на языке FORTRAN 66, использующая константы Холлерита. Предполагается, что реализация поддерживает не менее четырех символов на слово:
ПРОГРАММА HELLO1 C INTEGER IHWSTR ( 3 ) DATA IHWSTR / 4 HHELL , 4 HO WO , 3 HRLD / C WRITE ( 6 , 100 ) IHWSTR STOP 100 FORMAT ( 3 A4 ) END
Помимо DATA
операторов, константы Холлерита также допускались в качестве фактических аргументов в вызовах подпрограмм. Однако не было возможности, чтобы вызываемый мог узнать, сколько символов было передано. Программист должен был передать информацию явно. Программа hello world может быть написана следующим образом - на машине, где в слове хранятся четыре символа:
ПРОГРАММА HELLO2 CALL WRTOUT (11HELLO WORLD, 11) СТОП КОНЕЦC ПОДПРОГРАММА ЗАПИСИ (IARRAY, NCHRS)C INTEGER IARRAY (1) [примечания 1] INTEGER NCHRSC INTEGER ICPW DATA ICPW / 4 / [примечания 2] ЦЕЛОЕ I, NWRDSC NWRDS = (NCHRS + ICPW - 1) / ICPW ЗАПИСАТЬ (6,100) (IARRAY (I), I = 1, NWRDS) ВОЗВРАТ 100 ФОРМАТ (100A4) [примечания 3] КОНЕЦ
Хотя технически это не константа Холлерита, тот же синтаксис Холлерита был разрешен в качестве дескриптора редактирования в FORMAT
операторах. Программа hello world также может быть записана как:
ПРОГРАММА HELLO3 WRITE ( 6 , 100 ) STOP 100 FORMAT ( 11 HHELLO WORLD ) END
Одной из самых удивительных особенностей было поведение дескрипторов редактирования Холлерита при их использовании для ввода. Следующая программа изменится во время HELLO WORLD
выполнения на следующие одиннадцать символов входного потока и распечатает этот вход:
ПРОГРАММА WHAT1 READ ( 5 , 100 ) WRITE ( 6 , 100 ) СТОП 100 ФОРМАТ ( 11 HHELLO МИР ) КОНЕЦ
Заметки
- ^ FORTRAN 66 не имел возможности указать массив переменного размера. Таким образом, «1» обычно использовалась, чтобы указать, что размер неизвестен.
- ^ Четыре символа в слове.
- ^ Число 100 - это «достаточно большое» значение, чтобы можно было записать любое разумное количество символов. Также обратите внимание, что здесь также жестко запрограммировано четыре символа на слово.
Рекомендации
- Американский стандарт FORTRAN . Американская ассоциация стандартов, X3.9-1966. п. 38.
4.2.6 Тип холлерита . Датум Холлерита - это строка символов. Эта строка может состоять из любых символов, которые могут быть представлены в процессоре. Пробел является действительным и значимым символом в системе данных Холлерита.