CAL , acrónimo de Conversational Algebraic Language (Lenguaje Algebraico Conversacional ), 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 JOSS , considerado un elemento fundamental , con varias mejoras y nuevas características para aprovechar la plataforma SDS.
El Berkeley SDS se utilizó para el desarrollo de la plataforma comercial de tiempo compartido Tymshare , y en 1969 se ofreció una versión mejorada de CAL como entorno de programación a sus clientes. Aunque CAL prácticamente no tuvo uso, influyó de forma duradera en el diseño de Tymshare SUPER BASIC , que copió varias de sus características. Algunas de estas características, a su vez, aparecieron en BASIC-PLUS para el PDP-11 , antecesor directo de Microsoft BASIC . [ 1 ]
Descripción
Conceptos básicos
JOSS había sido diseñado para ser utilizado por personas sin conocimientos de programación en la Fuerza Aérea de los Estados Unidos y dentro de Rand Corporation , y para facilitar esto, Rand diseñó terminales de computadora personalizadas que eran más fáciles de configurar y usar. Estas terminales, basadas en la máquina de escribir IBM Selectric , también incluían un conjunto de caracteres personalizado que implementaba símbolos matemáticos comunes como ≥y ≠.
En gran medida, CAL era una versión de JOSS que reemplazaba este tipo de personalizaciones con soluciones más comunes, como >=y #para que pudieran ejecutarse en terminales comunes. [ 2 ] Las otras diferencias notables eran que CAL estaba todo en mayúsculas, a diferencia del formato de oración en JOSS, y no requería un punto al final de la línea. [ 3 ] Los comandos eran por lo demás casi idénticos y la estructura y sintaxis generales eran las mismas.
Al igual que JOSS, CAL tenía una interfaz de usuario interactiva que permitía al usuario escribir instrucciones en "modo directo" o programas para ejecutar en "modo indirecto". En BASIC, el primero se conoce más comúnmente como "modo inmediato". Tanto CAL como JOSS utilizaban un número de línea de dos partes , conocido como parte y paso, separados por un punto; por ejemplo, 1.100para la parte 1, paso 100. Las partes se utilizaban generalmente para agrupar instrucciones relacionadas en subrutinas. En CAL, el número de parte podía estar entre 0 y 999999, y el paso entre 0 y 99999. [ 4 ]
Existieron dos versiones principales de CAL, lanzadas en 1967 y 1969. La siguiente descripción se basará principalmente en la primera versión, salvo que se indique lo contrario.
Saltos y subrutinas
Al igual que en JOSS, CAL admitía el TOcomando para saltar a una parte o paso proporcionado, como en TO PART 3o TO STEP 4.5, y DOpara llamadas a subrutinas, como en DO PART 9para ejecutar la parte completa, o DO STEP 5.1para ejecutar ese único paso y luego regresar. La sintaxis posterior era útil cuando había muchas subrutinas pequeñas, ya que podían implementarse en una sola línea sin un RETURNconcepto asociado o similar. [ 5 ]
Ramificación y asignación condicional
Una de las características sintácticas más destacadas de JOSS era el concepto de "modificadores de sentencia", que controlaban el funcionamiento de otras sentencias. JOSS lo utilizaba para la ramificación condicional.
En la mayoría de los lenguajes, se escribiría algo como "Si esta expresión es verdadera, entonces haz esto...". En JOSS, este orden se invirtió y tales declaraciones adoptaron la forma "haz esto si esto es verdadero", por ejemplo, Type "HELLO" if X=5.. CAL agregó algo de azúcar sintáctico a este concepto básico agregando el nuevo modificador UNLESS, que, dependiendo del 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:
Si B>10, A=5. Si B es menor o igual a 10, A=0.
CAL también admitía expresiones condicionales : [ 7 ]
A=SI B>10 ENTONCES 5 SINO 0
Una modificación similar fue la WHEREinstrucción, utilizada para establecer variables como parte de un if o for. 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
Los bucles en JOSS también se controlaban mediante un modificador, el For. Este utilizaba una sintaxis algo oscura de FORTRAN ; Type i for i=1(2)10.ejecuta un bucle del 1 al 10 con incrementos de 2, por lo que imprimiría 1,3,5,7,9. También se podían 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`and` 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 podía hacerse opcional. Al separar TOlos límites, se volvieron explícitos y se BYhizo opcional, asumiendo que era 1; TYPE I FOR I=1 TO 10. Al igual que con JOSS, se podían usar valores y rangos explícitos; TYPE I FOR I=1,5 TO 7,10. CAL modificó aún más el bucle `for` añadiendo salidas condicionales, usando WHILE`and` UNTIL. Por ejemplo, ` TYPE A FOR A=1 BY 1 WHILE A<=50or` TYPE B FOR B=1 UNTIL A=50. [ 9 ]
Funciones definidas por el usuario
JOSS permitía al usuario definir funciones usando la Letinstrucción. La sintaxis permitía nombrar variables locales en la firma de la función; Let F(X,Y)=X+Y.los programas podían entonces llamar a estas funciones como si fueran integradas,Set A=F(1,5).
CAL cambió Leta 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+Yy 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 . [ a ] Esto dejó pendiente el problema de asignar el valor calculado resultante de vuelta a la función, que se abordó con la introducción de la instrucción al final de la parte, donde Z es el valor final que se devolverá. [ 10 ]DEFINE F(X,Y) : TO PART 5RETURN Z
Otros cambios
CAL incluía las funciones matemáticas de JOSS, pero añadía varias nuevas, entre ellas ABS, TAN, ATAN, y LOG10. [ 11 ] También añadía un nuevo operador, MOD, que devolvía el resto de la división de sus dos operandos. [ 12 ]
Modo directo
CAL añadió un pequeño número de comandos de modo directo y las instrucciones asociadas.
PAUSE, cuando se encontraba en un programa, imprimía un mensaje "PAUSADO EN EL PASO 1.1" y luego regresó al modo directo. Esto era similar al STOPcomando en BASIC. Esto permitía al usuario escribir valores y continuar la ejecución con GO. [ 13 ] Mientras estaba en modo directo, el usuario podía STEPcomprar una sola línea a la vez para rastrear la ejecución del programa. [ 13 ]
Mejoras en CAL 1969
Un cambio menor en la versión de 1969 fue la eliminación del SETcomando para la asignación de variables . Este había sido opcional en el modo directo en JOSS, pero era obligatorio en las sentencias del programa, y la versión de CAL de 1967 siguió esta regla. [ 14 ] La versión de 1969 lo hizo opcional en ambos casos.
Notas a pie de página
- ↑ Dado que DO se usa normalmente para llamar a subrutinas, no es obvio por qué eligieron TO en este caso.
Referencias
Citas
- ↑ Lampson, "Sistemas", Investigación , Microsoft.
- ↑ Manual 1969 , pág. 7.
- ↑ Manual 1969 , pág. 23.
- ↑ Manual 1969 , pág. 11.
- ↑ Manual 1969 , págs. 15, 26.
- ↑ Manual 1969 , pág. 12.
- ↑ Manual 1969 , pág. 14.
- ↑ Manual 1969 , pág. 21.
- ↑ Manual 1969 , pág. 13.
- 1 2 Manual 1967 , pág. 27.
- ↑ Manual 1967 , pág. 9.
- ↑ Manual 1967 , pág. 10.
- 1 2 Manual 1967 , pág. 25.
- ↑ Manual 1967 , pág. 8.
Bibliografía
- Lampson, Butler (junio de 1969). CAL (PDF) . Tymshare.
- Lampson, Butler (junio de 1967). Manual de referencia CAL para sistemas informáticos de tiempo compartido SDS 940 (PDF) . Scientific Data Systems.
- Familia de lenguajes de programación JOSS
- Software Tymshare