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