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 SSEC de IBM 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. Proporcionaba pseudoinstrucciones para funciones matemáticas comunes: logaritmos, exponenciación y operaciones trigonométricas. El software residente analizaba las pseudoinstrucciones una por una y llamaba a la subrutina apropiada. 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 la codificación rápida era normalmente de diez a veinte veces el del código de máquina. [4] El intérprete ocupaba 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 del 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 su frustración por la naturaleza lenta de la programación y depuración del ensamblaje, 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 el "escalamiento" o la necesidad de seguir religiosamente el punto decimal en las operaciones aritméticas. [5]
John W. Sheldon, un supervisor de la Oficina de Computación Técnica de IBM que asistió a la reunión, y otros consideraron que un sistema de programación "interpretativo" que utilizara operaciones de punto flotante era la mejor solución para este problema. Sheldon le pidió a John Backus, que había trabajado anteriormente 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 en IBM. El propio Backus había expresado previamente su interés en mejorar los métodos de programación y observó que los costos de computación se dividían aproximadamente por igual entre el costo de computación y el costo del personal de programación, y que el gasto adicional de pruebas hacía que la mano de obra fuera el gasto considerablemente mayor. A partir de 1953, Backus y cinco colegas diseñaron este nuevo lenguaje y lo llamaron "Speedcoding", y su uso pronto se extendió fuera de IBM a las instalaciones de los clientes del sistema 701. [5]
Los programas de codificación rápida se organizan como una serie de instrucciones, cada una de las cuales se almacena en la memoria como una sola 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 se pueden modificar según la naturaleza de la operación. Las operaciones matemáticas incluyen funciones básicas de aritmética, raíz cuadrada y trigonometría. Las operaciones lógicas incluyen la funcionalidad para leer, escribir, saltar y rebobinar la cinta magnética , así como operaciones para interactuar con los datos almacenados en la memoria del tambor . La segunda operación (OP 2 ) es una operación lógica que tiene la 1 dirección de memoria asociada restante. Las operaciones lógicas permiten que las instrucciones se ejecuten en un orden diferente al que se escriben, lo que permite implementaciones de 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]