Speedcoding , Speedcode o SpeedCo fue el primer lenguaje de programación de alto nivel [a] creado para una computadora IBM . [1] El lenguaje fue desarrollado por John W. Backus en 1953 para el IBM 701 para soportar el cálculo con números de punto flotante . [2]
La idea surgió de la dificultad de programar la máquina IBM SSEC cuando Backus fue contratado para calcular posiciones astronómicas a principios de 1950. [3] El sistema de codificación rápida era un intérprete y se centraba en la facilidad de uso a expensas de los recursos del sistema. Proporcionó pseudoinstrucciones para funciones matemáticas comunes: logaritmos, exponenciación y operaciones trigonométricas. El software residente analizó las pseudoinstrucciones una por una y llamó a la subrutina adecuada. La codificación rápida también fue la primera implementación de operaciones de entrada/salida decimal. Aunque reducía sustancialmente el esfuerzo de escribir muchos trabajos, el tiempo de ejecución de un programa escrito con la ayuda de Speedcoding solía ser de diez a veinte veces mayor que el del código de máquina. [4] El intérprete tomó 310 palabras de memoria, aproximadamente el 30% de la memoria disponible en un 701. [1]
En agosto de 1952, varias docenas de ingenieros de IBM y clientes de IBM 701 se reunieron en Poughkeepsie, Nueva York, para intercambiar ideas y mejores prácticas sobre la programación de las nuevas máquinas en ensamblaje. Varios asistentes expresaron frustración con la naturaleza lenta de la programación y depuración en ensamblador, y cuestionaron la utilidad del 701 en aplicaciones donde se necesitaban soluciones a los problemas rápidamente, o cuando el valor de una solución justificaba el gasto de tiempo de cálculo pero no el costo de programación. y depuración. Los asistentes también se quejaron de problemas con la "escala" o de la necesidad de seguir religiosamente el punto decimal en las operaciones aritméticas. [5]
John W. Sheldon, supervisor de la Oficina de Computación Técnica de IBM que asistió a la reunión, y otros sintieron que un sistema de programación "interpretativo" que utilizara operaciones de punto flotante era la mejor solución a este problema. Sheldon le pidió a John Backus, quien anteriormente había trabajado en un traductor de código CPC a SSEC , que supervisara la creación de un nuevo lenguaje de programación interpretativo de punto flotante para uso interno de IBM. El propio Backus había expresado previamente interés en mejorar los métodos de programación y observó que los costos de computación se dividían aproximadamente en partes iguales entre el costo de la computación y el costo del personal de programación, y que el gasto adicional de las pruebas hacía que la mano de obra fuera un gasto considerablemente mayor. A partir de 1953, Backus y cinco colegas diseñaron este nuevo lenguaje y lo llamaron "Speedcoding", donde su uso pronto se extendió fuera de IBM a las instalaciones del sistema 701 de los clientes. [5]
Los programas de codificación rápida están organizados como una serie de instrucciones, cada una de las cuales se almacena en la memoria como una única palabra de datos de 72 bits. Una instrucción generalmente consta de dos operaciones (OP 1 y OP 2 ) y 4 direcciones de memoria. La primera operación (OP 1 ) es una operación matemática o de entrada/salida que tiene 3 direcciones de memoria asociadas, una o más de las cuales pueden modificarse dependiendo de la naturaleza de la operación. Las operaciones matemáticas incluyen funciones aritméticas básicas, raíz cuadrada y trigonometría. Las operaciones lógicas incluyen funcionalidad para leer, escribir, saltar y rebobinar cinta magnética , así como operaciones para interactuar con datos almacenados en la memoria del tambor . La segunda operación (OP 2 ) es una operación lógica que tiene la dirección de memoria asociada restante. Las operaciones lógicas permiten que las instrucciones se ejecuten en un orden diferente al que fueron escritas, lo que permite implementar gotos, condicionales, bucles y otros comportamientos avanzados. [6]
Palabras clave reservadas de operaciones aritméticas y de entrada/salida [6]
Palabras clave lógicas reservadas [6]