Las constantes de Hollerith , nombradas en honor a Herman Hollerith , se utilizaron en los primeros programas de FORTRAN para permitir la manipulación de datos de caracteres.
Los primeros FORTRAN no tenían CHARACTER
tipo de datos , solo tipos numéricos. Para realizar la manipulación de caracteres, los caracteres debían colocarse en variables numéricas utilizando constantes de Hollerith. Por ejemplo, la constante 3HABC
especificó una cadena de tres caracteres "ABC", identificada por el número entero inicial que representa la longitud de la cadena 3
y el carácter Hollerith especificado H
, seguido de los datos de la cadena ABC
. Estas constantes fueron sin tipo , por lo que no hubo conversión de tipo de cuestiones. Si la constante especifica un menor número de caracteres de los que era posible mantener en un elemento de datos, los caracteres se almacenan en el elemento alineado a la izquierda y en blanco lleno .
Mecánica
Según el estándar FORTRAN 66 , la sintaxis de Hollerith estaba permitida en los siguientes usos:
- Como constantes en
DATA
declaraciones - Como argumentos reales constantes en
CALL
declaraciones de subrutina - Como editar descriptores en
FORMAT
declaraciones
La portabilidad era problemática con las constantes de Hollerith. En primer lugar, el tamaño de las palabras variaba en los diferentes sistemas informáticos, por lo que también variaba el número de caracteres que se podían colocar en cada elemento de datos. Las implementaciones variaron desde dos hasta diez caracteres por palabra. En segundo lugar, era difícil manipular caracteres individuales dentro de una palabra de forma portátil. Esto llevó a una gran cantidad de código de cambio y enmascaramiento utilizando características no estándar, específicas del proveedor. El hecho de que los conjuntos de caracteres variaran entre máquinas también complicó el problema.
Algunos autores opinaron que para una mejor portabilidad, solo se debe usar un solo carácter por elemento de datos. Sin embargo, considerando los pequeños tamaños de memoria de las máquinas de la época, esta técnica se consideró extremadamente derrochadora.
Obsolescencia tecnológica
Una de las principales características de FORTRAN 77 fue el CHARACTER
tipo de datos de cadena. El uso de este tipo de datos simplificó drásticamente la manipulación de caracteres en los programas de Fortran, haciendo que casi todos los usos de la técnica constante de Hollerith fueran obsoletos.
Las constantes de Hollerith se eliminaron del Estándar FORTRAN 77, aunque todavía se describen en un apéndice para aquellos que deseen continuar con el apoyo. Los descriptores de edición de Hollerith se permitieron a través de Fortran 90 y se eliminaron del estándar Fortran 95.
Ejemplos de
El siguiente es un programa de FORTRAN 66 hola mundo que usa constantes de Hollerith. Se supone que la implementación admite al menos cuatro caracteres por palabra:
PROGRAMA HELLO1 C INTEGER IHWSTR ( 3 ) DATA IHWSTR / 4 HHELL , 4 HO WO , 3 HRLD / C ESCRIBIR ( 6 , 100 ) IHWSTR STOP 100 FORMAT ( 3 A4 ) END
Además de las DATA
declaraciones, las constantes de Hollerith también se permitían como argumentos reales en llamadas a subrutinas. Sin embargo, no había forma de que la persona que llama pudiera saber cuántos caracteres se pasaron. El programador tenía que pasar la información explícitamente. El programa hello world podría escribirse de la siguiente manera: en una máquina donde se almacenan cuatro caracteres en una palabra:
PROGRAMA HELLO2 CALL WRTOUT (11HHELLO WORLD, 11) STOP ENDC ESCRITURA DE SUBRUTINA (IARRAY, NCHRS)C INTEGER IARRAY (1) [notas 1] NCHRS INTEGERC INTEGER ICPW DATA ICPW / 4 / [notas 2] INTEGER I, NWRDSC NWRDS = (NCHRS + ICPW - 1) / ICPW ESCRIBIR (6,100) (IARRAY (I), I = 1, NWRDS) VOLVER 100 FORMATO (100A4) [notas 3] FIN
Aunque técnicamente no es una constante de Hollerith, se permitió la misma sintaxis de Hollerith como descriptor de edición en FORMAT
declaraciones. El programa Hola mundo también podría escribirse como:
PROGRAMA HELLO3 WRITE ( 6 , 100 ) STOP 100 FORMAT ( 11 HHELLO WORLD ) FIN
Una de las características más sorprendentes fue el comportamiento de los descriptores de edición de Hollerith cuando se utilizan como entrada. El siguiente programa cambiaría en tiempo de ejecución HELLO WORLD
a los siguientes once caracteres en el flujo de entrada e imprimiría esa entrada:
PROGRAMA LO1 LEER ( 5 , 100 ) ESCRIBIR ( 6 , 100 ) PARAR 100 FORMATO ( 11 HHELLO MUNDIAL ) FIN
Notas
- ^ FORTRAN 66 no tenía una forma de indicar una matriz de tamaño variable. Por lo tanto, se usó un '1' para indicar que se desconoce el tamaño.
- ^ Cuatro caracteres por palabra.
- ^ Un recuento de 100 es un valor "suficientemente grande" para que se pueda escribir cualquier número razonable de caracteres. También tenga en cuenta que aquí también se codifican cuatro caracteres por palabra.
Referencias
- Estándar americano FORTRAN . Asociación Estadounidense de Normas, X3.9-1966. pag. 38.
4.2.6 Tipo de Hollerith . Un dato de Hollerith es una cadena de caracteres. Esta cadena puede constar de cualquier carácter que se pueda representar en el procesador. El carácter en blanco es un carácter válido y significativo en un dato de Hollerith.