CAL , abreviatura de Conversational Algebraic Language , fue un lenguaje y sistema de programación diseñado y desarrollado por Butler Lampson en Berkeley en 1967 para la computadora central SDS 940 . CAL es una versión del lenguaje seminal de JOSS con una serie de limpiezas y nuevas funciones para aprovechar la plataforma SDS.
La SDS de Berkeley se utilizó para el desarrollo de la plataforma comercial de tiempo compartido Tymshare y se ofreció una versión mejorada de CAL como entorno de programación a sus clientes en 1969. Aunque CAL no vio "casi ningún uso", tuvo un impacto duradero al influir el diseño de Tymshare SUPER BASIC que copió varias de sus características. Algunas de esas características, a su vez, aparecieron en BASIC-PLUS en el PDP-11 , que es el antepasado directo de Microsoft BASIC . [1]
Descripción
Conceptos básicos
JOSS había sido diseñado para ser utilizado por no programadores en la Fuerza Aérea de los Estados Unidos y dentro de Rand Corporation , y para ayudar con eso, Rand diseñó terminales de computadora personalizados que eran más fáciles de configurar y usar. Estos terminales, basados en la máquina de escribir IBM Selectric , también incluían un juego de caracteres personalizado que implementaba símbolos matemáticos comunes como ≥
y ≠
.
En gran medida, CAL era una versión de JOSS que sustituyó a este tipo de personalizaciones con soluciones más comunes, como >=
y #
para que pudieran ejecutarse en terminales comunes. [2] Las otras diferencias notables fueron que CAL era todo en mayúsculas, a diferencia de las oraciones en mayúsculas en JOSS, y no requería un punto al final de la línea. [3] Por lo demás, los comandos eran casi idénticos y la estructura general y la sintaxis eran las mismas.
Al igual que con JOSS, CAL tenía una interfaz de usuario interactiva que permitía al usuario escribir declaraciones en "modo directo" o programas para ejecutarse en "modo indirecto". En BASIC, el primero se conoce más comúnmente como "modo inmediato". Tanto CAL como JOSS usaban un número de línea de dos partes , conocido como parte y paso, separados por un punto, por ejemplo, 1.100
para la parte 1, paso 100. Las partes se usaban generalmente para agrupar declaraciones relacionadas en subrutinas. En CAL, el número de pieza puede estar entre 0 y 999999, y el paso de 0 a 99999. [4]
Hubo dos versiones principales de CAL, lanzadas en 1967 y 1969. La siguiente descripción se basará principalmente en la versión anterior, a menos que se indique lo contrario.
Saltos y subrutinas
Al igual que en JOSS, CAL admitía el TO
comando de bifurcar a una parte o paso proporcionado, como en TO PART 3
o TO STEP 4.5
, y DO
para llamadas de subrutina, como en DO PART 9
realizar la parte completa, o DO STEP 5.1
ejecutar ese único paso y luego regresar. La última sintaxis fue útil cuando había muchas subrutinas pequeñas, ya que podían implementarse en una sola línea sin un RETURN
concepto asociado o similar. [5]
Ramificación y asignación condicional
Una de las características sintácticas más notables de JOSS fue el concepto de "modificadores de declaraciones" que controlaban el funcionamiento de otras declaraciones. JOSS usó esto para la ramificación condicional.
En la mayoría de los idiomas, se escribiría algo como "si esta expresión es verdadera, entonces haz esto ...". En JOSS, este orden se invierte, y tales estados tomó la forma "de hacer esto si esto es cierto", por ejemplo, Type "HELLO" if X=5.
. CAL agregó algo de azúcar sintáctico a este concepto básico al agregar el nuevo modificador UNLESS
, que, según el contexto, condujo a un código más obvio; TYPE "IT IS NOT EQUAL TO FIVE" UNLESS X=5
. [6]
En JOSS, para asignar el valor 5 a una variable A si el valor de B es mayor que 10, y 0 en caso contrario, el código sería:
Establezca A = 5 si B> 10.Establezca A = 0 si B <= 10.
CAL también admitió expresiones condicionales : [7]
A = SI B> 10 ENTONCES 5 ELSE 0
Una modificación similar fue la WHERE
declaración, utilizada para establecer variables como parte de un si o para. Era similar en concepto a la estructura if / then / else, pero podía tener cualquier número de elementos. Por ejemplo, =A*B WHERE A=B UNTIL A>20, WHERE A=1 UNTIL A>100
. [8]
Bucles
El bucle en JOSS también fue controlado por un modificador, el For
. Esto utilizó una sintaxis algo oscura de FORTRAN ; Type i for i=1(2)10.
ejecuta un bucle de 1 a 10 paso por 2, por lo que imprimiría 1,3,5,7,9. También se pueden proporcionar valores explícitos Type i for i=1,5,6,7,10.
, o mezclar los dos,Type i for i=1,5(1)7,10.
CAL mejoró la sintaxis de JOSS al introducir las palabras clave BY
y TO
, por lo que el código equivalente en CAL sería TYPE I FOR I=1 BY 2 TO 10
. En JOSS, el paréntesis alrededor del valor del paso era el separador de los dos límites, por lo que no se podía convertir en opcional. Al separar TO
los límites se hizo explícito y BY
se hizo opcional, asumiendo que es 1; TYPE I FOR I=1 TO 10
. Al igual que con JOSS, se pueden utilizar valores y rangos explícitos; TYPE I FOR I=1,5 TO 7,10
. CAL modificó aún más el ciclo for agregando salidas condicionales, usando WHILE
y UNTIL
. Por ejemplo, TYPE A FOR A=1 BY 1 WHILE A<=50
o TYPE B FOR B=1 UNTIL A=50
. [9]
Funciones definidas por el usuario
JOSS permitió al usuario definir funciones usando la Let
declaración. La sintaxis permitía nombrar variables locales en la firma de la función; Let F(X,Y)=X+Y.
Los programas podrían entonces llamar a estas funciones como si estuvieran integradas,Set A=F(1,5).
CAL cambió Let
a DEFINE
, que es mucho más obvio, e hizo un cambio menor, los parámetros se pasaron usando llaves en lugar de paréntesis, por lo que la definición equivalente sería DEFINE F[X,Y]=X+Y
y se llamaría de la misma manera SET A=F[1,5]
,. [10]
Un cambio más importante en las funciones de CAL fue la capacidad de llamar a subrutinas desde las definiciones usando TO
, como en DEFINE F(X,Y) : TO PART 5
. [a] Esto dejó la cuestión de volver a asignar el valor calculado resultante a la función, que se abordó con la introducción de la RETURN Z
declaración al final de la parte, donde Z es el valor final que se devolverá. [10]
Otros cambios
CAL incluye las funciones matemáticas de JOSS pero agregó una serie de otras nuevas incluyendo ABS
, TAN
, ATAN
, y LOG10
. [11] También agregó un nuevo operador MOD
, que devolvió el resto de una división de sus dos operandos. [12]
Modo directo
CAL agregó una pequeña cantidad de comandos de modo directo y declaraciones asociadas.
PAUSE
, cuando se encuentra en un programa, imprime un mensaje "PAUSED AT STEP 1.1" y luego regresa al modo directo. Esto fue similar al STOP
comando en BASIC. Esto permitió al usuario escribir valores y continuar con la ejecución GO
. [13] Mientras está en modo directo, el usuario puede STEP
rastrear la ejecución del programa con una sola línea a la vez. [13]
Mejoras en CAL 1969
Un cambio menor en la versión de 1969 fue la eliminación del SET
comando para la asignación de variables . Esto había sido opcional en modo directo en JOSS pero se requería en las instrucciones del programa, y la versión de 1967 de CAL había seguido esta regla. [14] La versión de 1969 la hizo opcional en ambos casos.
Notas al pie
- ^ Dado que DO se usa normalmente para llamar subrutinas, no es obvio por qué eligieron TO en este caso.
Referencias
Citas
- ^ Lampson, "Sistemas", Investigación , Microsoft.
- ^ Manual de 1969 , p. 7.
- ^ Manual de 1969 , p. 23.
- ^ Manual de 1969 , p. 11.
- ^ Manual de 1969 , p. 15, 26.
- ^ Manual de 1969 , p. 12.
- ^ Manual de 1969 , p. 14.
- ^ Manual de 1969 , p. 21.
- ^ Manual de 1969 , p. 13.
- ^ a b Manual 1967 , pág. 27.
- ^ Manual de 1967 , p. 9.
- ^ Manual de 1967 , p. 10.
- ^ a b Manual 1967 , pág. 25.
- ^ Manual de 1967 , p. 8.
Bibliografía
- Lampson, Butler (junio de 1969). CAL (PDF) . Tymshare.
- Lampson, Butler (junio de 1967). Manual de referencia de CAL para sistemas informáticos de tiempo compartido SDS 940 (PDF) . Sistemas de datos científicos.