# Dartmouth BASIC

El Dartmouth BASIC (BASIC de Dartmouth) es la versión original del lenguaje de programación BASIC. Es llamado así porque fue diseñado e implementado en el Dartmouth College. El lenguaje fue diseñado por John Kemeny y Thomas Kurtz como parte del Dartmouth Time Sharing System (DTSS) (Sistema de tiempo compartido de Dartmouth) y fue uno de los primeros lenguajes de programación previstos para ser usado interactívamente.
Durante años, fueron producidas varias versiones en Dartmouth, todas implementadas como compiladores, a diferencia de muchas de las versiones del lenguaje implementadas en otros lados, que eran interpretadores. El primer compilador fue producido antes de que el sistema de tiempo compartido estuviera listo. Conocido como CardBASIC, fue pensado para el sistema basado en el lector de tarjetas estándar basado en el sistema de procesamiento por lotes. Como todas las versiones siguientes, fue implementado por un equipo de programadores no graduados trabajando bajo la dirección de Kemeny y Kurtz. La primera versión interactiva fue puesta a disposición de los usuarios generales en junio de 1964; la segunda en octubre de 1964; la tercera en 1966; la cuarta en 1969; la quinta en 1970; la sexta en 1971; y la séptima en 1979.

## Historia del desarrollo

El trabajo sobre el compilador y el sistema operativo fue hecho concurrentemente, y así los primeros programas BASIC corrieron en modo de procesamiento por lotes como parte del proceso de desarrollo durante principios de 1964. Sin embargo, el 1 de mayo de 1964 a las 4 a. m., John Kemeny y John McGeachie corrieron los primeros programas BASIC ejecutados exitosamente en terminales por el sistema de DTSS.
Estos programas corrían, desde 1964 hasta 1967, en dos ordenadores, un GE-235 para ejecutar programas (como los escritos en BASIC) y un GE DN-30 (Datanet-30) para manejar las comunicaciones (hacia y desde los teletipos) y para programar la ejecución de programas en el GE-235. Este ingenioso diseño usando dos equipos fue ideado por Tom Kurtz y John Kemeny.
No está totalmente claro cuáles fueron los primeros programas. Sin embargo, los programas o consistieron en la simple línea:
    PRINT 2 + 2
o eran implementaciones de la criba de Eratóstenes, según una entrevista de 1974 en la cual Kemeny y McGeachie participaron.
La segunda versión del BASIC solamente tuvo cambios mínimos, agregando al operador punto y coma a la sentencia PRINT y el subíndice cero a las matrices.
Para la tercera versión, la sentencia de INPUT fue introducida junto con las poderosas sentencias MAT para la manipulación de matrices y la sentencia del RESTORE para el uso con READ/DATA. El desarrollo continuó con la introducción de la manipulación y variables de texto, también conocidas como variables de string, para la versión 4, y un verdadero manejo de archivos en la versión 5. La versión 6 vio la introducción de procedimientos con parámetros, compilables separadamente; ésta es la versión de la cual la mayoría de los dialectos posteriores del BASIC descienden. En 1976, Steve Garland agregó características de programación estructurada para crear el Dartmouth SBASIC, un precompilador que producía como salida la versión 6 de BASIC (y que formó la base del ANSI BASIC). En 1979 Kemeny y Kurtz lanzaron, un compilador ANSI BASIC, como la séptima y final versión en Dartmouth, antes de salir de la universidad para concentrar el desarrollo posterior del ANSI BASIC bajo la forma de True BASIC.
Las primeras versiones de BASIC fueron usadas y probadas por otros estudiantes de Dartmouth trabajando en los laboratorios de psicología de la universidad a principios de 1964. [citación necesaria] Los departamentos compartieron varias máquinas de tarjeta perforada de IBM que fueron usadas para correr programas de análisis estadístico por lotes.
Los estudiantes trabajando en concesiones del NSF en ambos departamentos vivieron en la misma granja rural de New Hampshire durante el verano de 1964. Ellos a menudo se reunían para compartir ideas. Una contribución notable de estas sesiones de última hora fue la sentencia GOTO. Las primeras versiones impresas del manual de usuario fueron copiadas con Mimeógrafo (con la impresión típicamente en púrpura de las máquinas Ditto de la era) y una cubierta rosada.
El Dr. Kemeny, inmigrante de Hungría y presidente del departamento de matemáticas en ese entonces, devino con gran distinción presidente de la universidad. Mr. McGeachie, no graduado en ese tiempo, era llamado "Geach" por sus amigos y compañeros de estudio.
El BASIC de Dartmouth es más conocido por dar a la programación de computadoras un rostro humano y hacerla accesible a todo el mundo.

## Interfaz de usuario

El DTSS implementó un temprano entorno de desarrollo integrado (IDE): una interfaz de línea de comandos interactiva. No había necesidad de logout. Si los usuarios no respondían, eran loged out después de un corto retardo.
Cualquier línea mecanografiada por el usuario, y que comenzaba por un número de línea, era añadida al programa, reemplazando cualquier línea previamente almacenada en el mismo número; todo lo demás fue asumido que era un comando del DTSS y era ejecutado inmediatamente. Las líneas que solo consistían en un número de línea no eran almacenadas sino que removían cualquier línea previamente almacenada con el mismo número. Este método de editar era necesario debido al uso de los teleimpresoras de teletipo, como las unidades de terminales del Dartmouth timesharing system.

### Lista de comandos

* HELLO — log in en el DTSS
* BASIC — iniciar el modo BASIC
* NEW — nombrar y comenzar a escribir un programa
* OLD — recuperar un previamente nombrado programa desde el almacenamiento permanente
* LIST — exhibe el programa actual
* SAVE — guarda el programa actual en el almacenamiento permanente
* UNSAVE — elimina el programa actual del almacenamiento permanente
* CATALOG — exhibe los nombres de los programas que están en el almacenamiento permanente
* SCRATCH — borra el programa actual sin eliminar su nombre
* RENAME — cambia el nombre del programa actual sin borrarlo
* RUN — ejecuta el programa actual
* STOP — interrumpe al programa actualmente corriendo
Los usuarios frecuentemente creían que los comandos eran parte del lenguaje BASIC, pero, de hecho, eran parte del sistema de tiempo compartido y también eran usados cuando se preparaban programas en ALGOL o FORTRAN vía los terminales del DTSS.

## Palabras clave

La primera versión interactiva implementó los siguientes tipos de sentencias, tomando algunos de sus operadores y palabras clave del FORTRAN II y algunos de ALGOL 60.

### Lista de sentencias del BASIC

* DEF — define funciones de una sola línea
* DIM — define el tamaño de los arreglos
* END — define el final del programa
* STOP — detiene un programa antes del final
* FOR / TO / STEP — define los bucles
* NEXT — marca el final de los bucles
* GOSUB — transfiere control a subrutinas simples
* RETURN — retorna el control desde subrutinas simples
* GOTO — transfiere el control a otra sentencia
* IF / THEN — toma de decisiones
* LET / = — asigna los resultados de las fórmulas a una variable
* PRINT — salida de resultados
* DATA — almacena datos estáticos dentro del programa
* READ — entrada de datos almacenados en sentencias DATA
* REM — comentario
También implementó variables numéricas y aritmética de punto flotante. Los nombres de variables fueron limitados de A a Z, A0 a A9, B0 a B9, ... , Z0 a Z9, dando un máximo de 286 distintas variables posibles. Los nombres de matrices estaban restringidos a solamente de A a Z. Las matrices no necesitaban ser definidas, pero en ausencia de una declaración DIM tenían por defecto 10 elementos, a los que se accedía con un índice desde 1 a 10.

### Lista de operadores

| Operadores aritméticos | Operadores aritméticos | Operadores relacionales/lógicos | Operadores relacionales/lógicos |
| - | Negación (op. unario) | = | Igual a |
| + | Adición | <> | No igual a |
| - | Sustracción (op. binario) | < | Menor que |
| * | Multiplicación | <= | Menor o igual a |
| / | División | > | Mayor que |
| ^ | Exponenciación | >= | Mayor o igual a |
| Operadores de agrupamiento | Operadores de agrupamiento | | |
| ( ) | Agrupamiento | | |

### Lista de funciones

* ABS -- Valor absoluto
* INT -- Parte entera de un número
* RND -- número real al azar entre 0 y 1
* SIN -- Seno (argumento en radianes)
* COS -- Coseno (argumento en radianes)
* TAN -- Tangente (argumento en radianes)
* ATN -- Arco tangente (resultado en radianes)
* EXP -- Exponencial (e$^x$)
* LOG -- Logaritmo natural
* SQR -- raíz cuadrada