ETA: Nota: Dado que Richard H. Schwartz va a escribir sobre la versión original de Dartmouth, la advertencia es que yo estoy escribiendo sobre la primera versión que utilicé, que fue en un PDP 8, creo, que ejecutaba cuatro teletipos.
El lenguaje de programación BASIC (Beginner’s All-Purpose Symbolic Instruction Code) fue inventado en 1964 para permitir a los no programadores utilizar los ordenadores.
Un programa BASIC consistía en una serie de líneas. Cada línea tenía tres partes:
- Un número de línea numérico, interpretado como un número decimal. Las líneas del programa estaban siempre en secuencia con respecto a este número.
- Un verbo alfabético (aunque los BASIC posteriores hicieron opcional el verbo LET).
- El resto de la línea, que se analizaba de forma bastante ad hoc sin delimitadores (como en FORTRAN).
BASIC sólo tenía variables formadas por una sola letra y un dígito opcional. Al principio, sólo se permitían números de punto flotante. Más tarde, un carácter posterior en una variable podía determinar su tipo, ya que se introdujeron otros tipos (cadenas para 1965). La interpretación era puramente dinámica, sin convenciones léxicas entre líneas, pero permitía a un desarrollador cuidadoso hacer algo que se parecía un poco a los bloques, que se habían introducido en Algol 60. Muchas de las características estaban inspiradas en FORTRAN II, y al igual que en FORTRAN, los espacios eran irrelevantes.
BASIC se extendió por los miniordenadores y los primeros microordenadores. Tenía algunas características interesantes que lo hacían atractivo en máquinas pequeñas. No era necesario tener un editor de texto. Al escribir una línea con un número de línea, se reemplazaba la sentencia existente con ese número de línea o se insertaba la línea en el lugar adecuado. Esto, sin embargo, significaba que a medida que un programa se hacía más grande, uno se quedaba frecuentemente sin lugares para poner nuevas líneas. Esto requería que el programa tuviera que ser renumerado, lo que cambiaba todos los números de línea para que fueran factores de 10, aunque los parámetros permitían cambiar esto. (El RENUM en el TRS-80 no estaba incorporado. Había que comprarlo y cargarlo desde el casete.)
No había estructuras de datos más que la matriz, que afortunadamente era multidimensional. Las primeras versiones de BASIC tenían operaciones matriciales, que fueron eliminadas de las implementaciones posteriores con bastante rapidez. Algunas implementaciones, como el BASIC original de Microsoft, sólo tenían una matriz y no tenían facilidades multidimensionales.
No había paso de argumentos/parámetros, sólo un GOSUB que podía transferir el control a una determinada línea, y una sentencia RETURN encontrada transfería de nuevo a la sentencia que seguía al GOSUB. El medio básico de transferencia de control era el GOTO. Lo único que podía parecerse a una estructura de control léxica moderna era el bucle FOR, pero como el control era puramente dinámico, podía parecer tan caótico como un montón de GOTOs. Había dos sentencias IF, una de las cuales transfería el control a una línea, y la otra, con THEN, podía usarse para hacer un bloque pseudoléxico.
La entrada y salida de texto se incorporaba a las sentencias PRINT e INPUT. Un tipo de sentencia, la sentencia DATA, se ignoraba en el flujo de control. Se podía utilizar para proporcionar un único flujo de datos al que accedían las sentencias READ. En los últimos años, la gente aprendió a pervertir la sentencia DATA para hacer cosas como mantener código de máquina y secuencias de terminal. Con los microordenadores, las versiones de BASIC comenzaron a incorporar las sentencias PEEK y POKE para permitir el acceso arbitrario a la memoria. CALL permitía ejecutar un trozo de código máquina.
Mucho más tarde se diseñaron lenguajes llamados «Basic». En su mayoría han sido lenguajes que sólo toman prestada parte de la sintaxis de BASIC pero son mucho más modernos, con alcance léxico y paso de parámetros a argumentos, e incluso clases y similares.
Aquellos que conozcan estos lenguajes sin duda encontrarán el mencionado BASIC bastante horrible, y de hecho lo era. Sin embargo, enseñó un tipo de disciplina que lamentablemente falta hoy en día, y probablemente no me causó una cantidad significativa de daño cerebral permanente.
Probablemente fue un accidente que este lenguaje se pusiera tan de moda. Ni siquiera era necesario ir por este camino debido a los ordenadores de baja potencia. Versiones simples de lenguajes similares a LISP eran tan fáciles de implementar en ese momento, en modo inmediato sin la necesidad de un editor de texto y un paso de análisis sintáctico separado. Sin embargo, la edición de un programa existente era bastante más fácil con el sistema BASIC, tanto que cuando implementé mi primer lenguaje semi-moderno, MOUSE, opté por utilizar un sistema de numeración de líneas a pesar de que los números de línea no se utilizaban en el lenguaje, y también era algo con lo que la gente estaba familiarizada.