stringtranslate.com

Dartmouth BÁSICO

Dartmouth BASIC es la versión original del lenguaje de programación BASIC . Fue diseñado por dos profesores del Dartmouth College , John G. Kemeny y Thomas E. Kurtz . Con el sistema Dartmouth Time Sharing System (DTSS) subyacente, ofrecía un entorno de programación interactivo a todos los estudiantes de grado, así como a la comunidad universitaria en general.

En Dartmouth se produjeron varias versiones, implementadas por estudiantes universitarios y que funcionaban como un sistema de compilación y ejecución . La primera versión se ejecutó el 1 de mayo de 1964 y se abrió a los usuarios generales en junio. Siguieron actualizaciones, que culminaron en la séptima y última versión en 1979. Dartmouth también presentó una versión drásticamente actualizada conocida como Structured BASIC (o SBASIC ) en 1975, que agregó varios conceptos de programación estructurada . SBASIC formó la base de los esfuerzos del estándar ANSI Standard BASIC a principios de la década de 1980.

La mayoría de los dialectos de BASIC remontan su historia a la Cuarta Edición (que añadió, por ejemplo, variables de cadena, que la mayoría de los usuarios de BASIC dan por sentado, aunque el original podía imprimir cadenas), pero generalmente deja de lado características más esotéricas como la matemática matricial. A diferencia de los compiladores de Dartmouth, la mayoría de los otros BASIC se escribieron como intérpretes . Esta decisión les permitió ejecutarse en la memoria principal limitada de los primeros microordenadores . Microsoft BASIC es un ejemplo, diseñado para ejecutarse en solo 4 KB de memoria. A principios de la década de 1980, decenas de millones de ordenadores domésticos ejecutaban alguna variante del intérprete de MS. Se convirtió en el estándar de facto para BASIC, lo que llevó al abandono de los esfuerzos de ANSI SBASIC. Kemeny y Kurtz formaron más tarde una empresa para desarrollar y promover una versión de SBASIC conocida como True BASIC .

Muchos de los primeros juegos de mainframe tienen su origen en Dartmouth BASIC y el sistema DTSS. Una selección de ellos se recopiló, en versiones de BASIC de tiempo compartido de HP , en el libro de People's Computer Company What to Do After You Hit Return . [1] Muchos de los listados de fuentes originales en BASIC Computer Games y trabajos relacionados también tienen su origen en Dartmouth BASIC.

Historial de desarrollo

Trabajos anteriores

John G. Kemeny se incorporó al departamento de matemáticas del Dartmouth College en 1953 y más tarde se convirtió en su director. En 1956 obtuvo acceso a un IBM 704 a través de los esfuerzos del New England Regional Computer Center del MIT . Ese año, escribió el lenguaje DARSIMCO , una versión del ensamblador que simplificaba la programación de operaciones matemáticas. Fue ayudado por Thomas E. Kurtz , que se incorporó al departamento ese año. [2]

DARSIMCO quedó en el olvido cuando se instaló el primer compilador FORTRAN en la máquina en 1957. La llegada de FORTRAN inculcó una lección importante. Kurtz, adoctrinado sobre la lentitud de FORTRAN, pasó varios meses escribiendo un programa en ensamblador 704 que había consumido alrededor de una hora de tiempo de CPU para depurarlo y aún no se estaba ejecutando. Se dio por vencido, lo reescribió en FORTRAN y lo puso en funcionamiento en cinco minutos. La lección fue que los lenguajes de alto nivel podían ahorrar tiempo, independientemente de su rendimiento medido. [2]

En 1959, la escuela recibió su primer ordenador, el LGP-30 basado en tambor . Un estudiante escribió un lenguaje inspirado en FORTRAN llamado DART para la máquina. Esto llevó a un esfuerzo por producir un compilador ALGOL 58, pasando al ALGOL 60 cuando se finalizó esa definición. Escribir el compilador fue difícil debido al tamaño muy pequeño de la memoria, 32 KB en términos modernos, y era extremadamente lento, basado en la velocidad del tambor de 3600 rpm. Sin embargo, pudieron producir una versión funcional reducida conocida como ALGOL 30. [ 3] Un desarrollo posterior produjo SCALP, el "Procesador Algol autónomo", un compilador de una sola pasada que estaba listo para ejecutar el programa compilado tan pronto como la cinta perforada terminaba de leer la fuente. La salida con los resultados del programa o cualquier mensaje de error aparecía inmediatamente. Este estilo de operación de compilación y listo sería utilizado más tarde por BASIC. [3] [4]

En 1962, Kemeny y el estudiante de secundaria Sidney Marshall [5] comenzaron a experimentar con un nuevo lenguaje, DOPE (Dartmouth Oversimplified Programming Experiment) . Este utilizaba líneas numeradas para representar instrucciones; por ejemplo, para sumar dos números, DOPE utilizaba:

5 + abecedario

Lo que significaba "en la línea 5, realizar una suma de los valores de las variables A y B y poner el resultado en C". Aunque un tanto críptico en su diseño, se puede ver la base para el futuro lenguaje BASIC. [6] Además de las operaciones matemáticas básicas, el lenguaje incluía SQR, EXP, LOG, SIN y una construcción de ramificación simple. [7]

La informática en las artes liberales

Kemeny y Kurtz coincidieron en la necesidad de que los estudiantes que no se dedican a las disciplinas STEM tengan conocimientos de programación ; sólo el 25% de los estudiantes de Dartmouth cursaban asignaturas relacionadas con las STEM, pero en casi todos los campos se utilizaba algún nivel de matemáticas. Además, a medida que las computadoras adquirían mayor importancia en la sociedad, se preguntaron: "¿Cómo pueden tomar decisiones sensatas sobre la informática y su uso personas que, en esencia, la ignoran?" [7]

Kemeny señaló más tarde que "nuestra visión era que cada estudiante del campus tuviera acceso a una computadora, y que cualquier miembro del profesorado pudiera utilizar una computadora en el aula cuando fuera apropiado. Era así de simple". [8] Pero hacerlo sería prácticamente imposible dado lo que tenían para trabajar; el tiempo de respuesta de una ejecución típica de SCALP era de unos 15 minutos, y los idiomas eran demasiado difíciles para que los usuarios no especializados en ciencia, tecnología, ingeniería y matemáticas los utilizaran para tareas básicas. [7]

El problema no era simplemente la complejidad, sino el concepto mismo del procesamiento por lotes . Los estudiantes preparaban sus programas en tarjetas perforadas o cintas de papel, los enviaban a los operadores de la computadora y luego, en algún momento posterior, recibían el resultado. Esto a menudo revelaba un error que requería que se repitiera todo el proceso. Como dijeron más tarde: "Si se tarda aproximadamente un día en un intento, el estudiante perderá el interés o se olvidará de cuáles eran los problemas. En el mejor de los casos, perderá el tiempo esperando que aparezcan los resultados del día". [9] [a]

En 1959, debido en gran medida a la reputación de Kemeny como innovador en la enseñanza de las matemáticas, el departamento ganó un premio de la Fundación Alfred P. Sloan por 500.000 dólares para construir un nuevo edificio para el departamento. [10]

Desarrollando el concepto

Durante una visita al MIT en 1961, conocieron el PDP-1 y su sistema operativo experimental de tiempo compartido, recientemente completado . John McCarthy le preguntó a Kurtz por qué no utilizaban el tiempo compartido en sus esfuerzos por llevar la informática a las masas. Kurtz regresó a Dartmouth y le dijo a Kemeny "deberíamos utilizar el tiempo compartido", a lo que Kemeny respondió inmediatamente "de acuerdo". [11]

En un experimento para comprobar si el concepto era viable, los estudiantes se dividieron en grupos de cinco y se les dio turnos para usar el LGP-30 utilizando SCALP. [4] El tiempo de uso de la computadora se dividió en sesiones de 15 minutos y cada grupo de cinco tuvo una sesión y luego la pasó al siguiente grupo. Se descubrió que los estudiantes generalmente podían completar sus programas en dos o tres "vueltas" durante una sola sesión. Esto claramente sugería que un sistema interactivo permitiría a cientos de usuarios usar con éxito una sola máquina. [12]

La llegada del teletipo Modelo 33, que utilizaba el recién introducido código ASCII a través de líneas telefónicas, resolvió el problema del acceso: los programadores ya no tendrían que enviar los programas en tarjetas o cintas de papel, sino que ahora utilizarían el Modelo 33 para escribir directamente en el ordenador. Todo lo que se necesitaba era una nueva máquina que fuera lo suficientemente rápida como para albergar un sistema de tiempo compartido y un lenguaje sencillo para que lo utilizaran los programadores. [13]

Cuando se empezó a considerar seriamente el tema de un lenguaje simple, Kemeny inmediatamente sugirió escribir uno nuevo. Kurtz estaba más interesado en una versión abreviada de FORTRAN o ALGOL. [14] Pero estos lenguajes tenían tantas idiosincrasias que Kurtz llegó a estar de acuerdo con Kemeny:

Si hubiéramos corregido las características desagradables de FORTRAN, ya no tendríamos FORTRAN. A regañadientes, tuve que aceptar con John que sí, que se necesitaba un nuevo lenguaje. [15]

Con el tiempo, surgieron cuatro elementos clave: el sistema utilizaría tiempo compartido, se necesitaría un nuevo lenguaje, para que los usuarios ingresaran al sistema se necesitarían nuevos cursos que introducirían la programación como complemento a otras materias y, finalmente, las terminales estarían abiertas a todos los usuarios. [16]

Versión inicial

El proyecto comenzó oficialmente en septiembre de 1963. El objetivo era desarrollar el lenguaje y el sistema operativo en un ordenador comercial. [17] A principios de 1964, se acercaron a la National Science Foundation (NSF) para solicitar financiación. La NSF envió las propuestas, una para el sistema de tiempo compartido y otra para el lenguaje, para su revisión por pares. Las revisiones invariablemente sugerían que no entendían la dificultad de lo que estaban intentando. A pesar de estos comentarios negativos, la NSF siguió adelante con ambas subvenciones. Los descuentos educativos disponibles de General Electric llevaron a la compra de un ordenador GE-225 , en una época en la que no "utilizar IBM" todavía estaba plagado de peligros. [18]

El GE-225 se emparejó con la máquina DATANET-30 (DN-30), mucho más simple, y se conectó un disco duro a ambas máquinas para compartir programas. [19] El DN-30 carecía de documentación de programación en ese momento, ya que nunca se pensó que saliera de fábrica sin un programa ya instalado. [18] Incluía una característica clave, acceso directo a memoria (DMA) a las máquinas GE más grandes. Esto significaba que los mensajes pequeños podían pasarse rápidamente de un lado a otro entre las máquinas, lo que permitía que los comandos escritos por el usuario fueran ejecutados inmediatamente por el 225. [20]

El sistema funcionaría haciendo que el DN-30 ejecute los terminales y guarde el trabajo del usuario en el disco. Cuando el usuario escribiera RUN, el DN-30 usaría DMA para enviar ese comando al GE-225. El 225 leería ese archivo, lo compilaría, lo ejecutaría y le pasaría los resultados al DN-30, que imprimiría la salida en el terminal. [21]

En el verano de 1963, a la espera de la compra del ordenador, GE proporcionó acceso a uno de sus GE-225. Kemeny empezó a trabajar en un compilador prototipo. Los estudiantes Michael Busch y John McGeachie empezaron a trabajar en el diseño del sistema operativo ese otoño. Tanto el lenguaje como el sistema operativo se modificaron ampliamente durante este período, aunque los objetivos básicos siguieron siendo los mismos y se publicaron en forma de borrador ese noviembre. [19]

La máquina de la escuela llegó en la última semana de febrero de 1964, [22] estuvo operativa a mediados de marzo, [23] y se entregó oficialmente el 1 de abril. En ese momento, el diseño del sistema operativo ya estaba bien desarrollado. La mayoría de los estudiantes programadores que trabajaban en el sistema operativo lo hacían durante 50 horas a la semana, además de su carga horaria normal de clases. [22] El lenguaje se desarrolló en paralelo en tiempo prestado en otra máquina 225. [24] El sistema operativo se completó en abril, y todo el sistema que se ejecutaba en tres terminales Modelo 33 estuvo listo a fines de mes. John Kemeny y John McGeachie ejecutaron el primer programa BASIC el 1 de mayo de 1964 a las 4 am ET . [23]

No está del todo claro cuáles fueron los primeros programas. Muchas fuentes, incluida la de Dartmouth, afirman que se trataba de este sencillo programa: [25]

IMPRIMIR 2 + 2

Una historia posterior del lenguaje afirma que se escribieron dos programas al mismo tiempo, uno por Kemeny y otro por otro programador anónimo. Escribieron sus programas, escribieron RUNal mismo tiempo y obtuvieron los resultados correctos. [26] Kurtz se levantaba temprano y ya se había ido a casa y "se había perdido toda la diversión". [27]

Durante el mes siguiente, el sistema se puso a prueba con programas de análisis numérico. Durante este período, la máquina funcionó correctamente durante un promedio de cinco minutos. [28] Los problemas se solucionaron rápidamente y en junio se decidió aumentar el número de terminales a once. Fue en esa época cuando un GE-235 más rápido reemplazó al 225. En otoño, había 20 terminales en uso. [19]

GE comenzó a denominar a la combinación de GE-235 y DN-30 GE-265, [29] sumando los números de sus modelos. GE fabricó alrededor de 75 ejemplares adicionales de GE-265, [30] muchos de ellos para su negocio de oficinas de servicios . GE se refirió a ellos como sus sistemas de tiempo compartido Mark I. [31]

Nuevo sistema

Uno de los objetivos originales del programa era incorporar la programación a otros cursos. Esto fue un éxito, pero puso una presión considerable sobre el sistema y quedó claro que no tenía margen para un crecimiento futuro. [32]

En 1965, el equipo se acercó a GE para obtener apoyo con el desarrollo continuo. En septiembre, el vicepresidente Louis Rader ofreció el nuevo GE-635 , que funcionaba aproximadamente 10 veces más rápido e incluía dos CPU. Además, se agregaría un segundo DN-30 para manejar más líneas, suficiente para 150 usuarios simultáneos. [32] Para albergarlo, se necesitaría una instalación más grande que el sótano de College Hall donde funcionaba el 265. Peter Kiewit, Clase de '22, junto con el apoyo adicional de la NSF, condujo a la construcción del Centro de Computación Kiewit, que se inauguró en diciembre de 1966. [32]

Mientras se esperaba la llegada de esta máquina, en el verano y el otoño de 1966 se utilizó un GE-635 en el Centro de Desarrollo Aéreo de Roma para desarrollar MOLDS, el "Sistema de depuración en línea para múltiples usuarios". El GE-635 estuvo operativo a principios de 1967 y, gracias al uso de MOLDS, el nuevo sistema operativo estuvo completamente operativo en septiembre, momento en el que se vendió el GE-265. [33]

GE proporcionó la máquina de forma gratuita durante tres años como parte de un acuerdo más amplio en virtud del cual Dartmouth desarrollaría nuevas versiones de BASIC mientras que GE la usaría para desarrollar una nueva versión de su sistema operativo. [33] Esta colaboración resultó ser un éxito; GE comenzó a implementar estas máquinas como sus sistemas de tiempo compartido Mark II, [34] y para fines de la década eran uno de los proveedores de tiempo compartido más grandes del mundo. [32]

Cuando este sistema de "Fase I" se puso en funcionamiento, el equipo de Dartmouth comenzó a desarrollar el de "Fase II", el sistema operativo ideal. Éste se instaló en marzo de 1969 y cambió su nombre a Dartmouth Time Sharing System poco después. Cuando se cumplió el período de tres años, GE regaló la máquina a la universidad. Aunque los dos equipos siguieron en contacto y se hicieron varios intentos de buena fe para continuar la relación, no hubo mucha colaboración y la asociación finalizó oficialmente el 20 de septiembre de 1972. [33]

Ampliación de la base de usuarios

Una revisión realizada en 1968 señaló que el 80% de los estudiantes y el 70% del personal docente utilizaban el sistema de algún modo. Cientos de terminales estaban repartidos por todo el campus, desde el hospital hasta la escuela de negocios. El 57% del tiempo de CPU se utilizaba para trabajos de curso, el 16% para investigación y el 27% restante para "uso recreativo"; Dartmouth alentaba activamente a los usuarios a jugar como una forma de familiarizarse con el uso del ordenador y superar el miedo a él. [35]

En 1967, gracias a otra subvención de la NSF, Dartmouth también empezó a instalar terminales en lugares fuera del campus, incluidas las escuelas secundarias de la zona. En términos de número de usuarios, estas terminales albergaban al 69% del total de usuarios, aunque utilizaban una menor cantidad de tiempo de ordenador. [35] En 1971, había 79 terminales remotas, en lugares tan lejanos como Nueva Jersey y Bangor (Maine) . Estas estaban respaldadas por sistemas multiplexores que permitían que se admitieran hasta 12 terminales en una única línea telefónica de calidad de voz. Además, varias de estas líneas estaban disponibles para su uso mediante acceso telefónico con un módem . [36]

Influencia

El tiempo compartido fue un área importante de investigación en la década de 1960, y muchos en la industria informática predijeron que la potencia informática se volvería barata y generalizada. La famosa frase de John McCarthy fue "algún día la informática podría organizarse como un servicio público, tal como lo es el sistema telefónico". [37]

Aunque otros lenguajes estaban disponibles en DTSS, en 1972 el 98% de sus programas estaban escritos en BASIC. [38] Con BASIC, los servicios informáticos se volvieron mucho más accesibles para los usuarios finales cuyas tareas llevarían demasiado tiempo de codificación como para que fueran adecuadas para ser resueltas en un ordenador. Esto llevó a varios fabricantes a introducir ordenadores diseñados específicamente para este mercado de usuarios que querían resolver tareas de pequeña o mediana escala y no estaban tan preocupados por el rendimiento absoluto. En particular, dos máquinas dirigidas directamente a este mercado se convirtieron en los "sistemas de tiempo compartido pequeños más utilizados jamás desarrollados". [34]

El HP 2000 ejecutaba HP Time-Shared BASIC , una combinación de un BASIC y un sistema operativo de tiempo compartido casi idéntico a la configuración DTSS. El sistema admitía hasta 32 usuarios simultáneos, utilizando una CPU HP 2100 de gama baja para ejecutar los terminales de la misma manera que el Datanet-30 de la configuración GE-265 original, mientras que los programas se ejecutaban en un modelo de gama alta de la misma máquina, que normalmente se diferenciaba en que tenía más memoria central . El BASIC de HP utilizaba un formato tokenizado semicompilado para almacenar programas, lo que mejoraba los tiempos de carga y significaba que las "compilaciones" eran de tiempo cero. [39]

Digital Equipment Corporation adoptó un enfoque diferente, utilizando una oferta para una sola máquina basada en su línea PDP-11 existente con el nuevo sistema operativo RSTS/E y BASIC-PLUS . BASIC-PLUS siguió más de cerca la Quinta Edición, incluidos los MATcomandos, pero se implementó como un intérprete puro en oposición al compilador Dartmouth o el formato tokenizado de HP. También incluyó una serie de estructuras de control que seguían el modelo JOSS , como . [40] Tymshare SUPER BASIC también admitía estructuras de estilo JOSS y matemáticas matriciales, pero conservaba la operación original de compilar y listo.PRINT I IF I > 10

Prácticamente todos los proveedores de la época ofrecieron alguna solución a este mismo problema, aunque puede que no fueran tan similares a la original. Cuando Kurtz empezó a considerar la formación de un estándar ANSI para BASIC en 1973, descubrió que la cantidad de oficinas de servicios de tiempo compartido con BASIC disponibles era mayor que la de cualquier otro lenguaje. Desafortunadamente, este éxito también fue un problema; en ese momento, había tantas variaciones que un estándar parecía imposible. [34]

Juegos en BASIC

Kemeny promovió activamente los juegos en la plataforma DTSS y consideró que era una de las principales razones del éxito del sistema DTSS. [38] Es probable que fuera el autor de uno de los primeros juegos para mainframe . Aunque Kemeny no se atribuyó el mérito, más tarde se refirió a FTBALL diciendo que "fue escrito el domingo después de un determinado partido Dartmouth - Princeton en 1965, cuando Dartmouth ganó el trofeo Lambert . Es una especie de programa conmemorativo". El partido fue una sorpresa ante el gran favorito Princeton. [41] [b]

A medida que el sistema se expandió, especialmente después de la incorporación del manejo de cadenas en BASIC, el sistema DTSS se convirtió en una plataforma importante para el desarrollo de muchos juegos basados ​​en texto . A principios de la década de 1970, la People's Computer Company comenzó a publicar estos en su revista, generalmente convertidos al HP BASIC más ampliamente disponible. Muchos de estos listados se recopilaron en su libro de 1975, What to do after you hit enter . Aunque estos se publican en formato HP BASIC, la mayoría de ellos remontan su historia a DTSS o al Lawrence Hall of Science en California, donde se instaló una máquina similar, conocida como DECISION. [43]

Una colección más famosa es BASIC Computer Games de 1978, donde aproximadamente la mitad de los programas del libro fueron escritos en Dartmouth, incluido otro de Kemeny, Batnum o, más comúnmente, una de las muchas escuelas secundarias que estuvieron conectadas a él después de 1968. Una escuela secundaria particularmente prolífica fue Lexington High School en Massachusetts, pero también aparecen muchas otras escuelas. Varios de los programas no enumeran sus ubicaciones originales, pero provienen de autores que probablemente estuvieron conectados al sistema a través de una escuela o proyectos públicos como Project SOLO. [44]

Los videojuegos multijugador se hicieron posibles en BASIC cuando Stephen Garland y John McGeachie desarrollaron la interfaz de terminal múltiple en línea MOTIF para DTSS. Para iniciar un juego, un usuario tecleaba LINK seguido de un nombre de sesión en lugar de RUN, lo que permitía a otros usuarios conectarse al juego tecleando JOIN seguido del nombre de sesión. MOTIF luego multiplexaba la entrada y la salida para el programa BASIC, anteponiendo un identificador de cadena al comienzo de cada línea de entrada y salida. Los primeros programas desarrollados con esta interfaz fueron una versión para dos personas de FTBALL y un juego de póquer para cinco personas. Más serio fue un juego de gestión que permitía que hasta diez estudiantes de la Escuela de Administración de Empresas Amos Tuck compitieran en la producción y comercialización de un solo producto. [45]

Versiones

Primera edición

La versión original, conocida retroactivamente como versión uno, admitía los comandos LET, PRINT, END, FOR...NEXT, GOTO, GOSUB...RETURN, IF...THEN, DEF, READ, DATA, DIM, y REM. Incluía instrucciones matemáticas básicas, +, , y , así como la flecha hacia arriba para exponentes "...ya que en una máquina de escribir con teletipo es imposible imprimir superíndices". [46] En las variedades modernas, la flecha hacia arriba normalmente se reemplaza por el carácter "sombrero", . Los exponentes tomaban el valor absoluto del número antes del cálculo, por lo que para calcular , uno tenía que usar . Había un problema adicional en la función exponencial que trataba como en oposición al orden correcto de operaciones , que no se corrigió hasta la tercera versión. [46] La función siempre se truncaba hacia cero. [47]-*/^-X^3X*X*X-X^2(-X)^2 -(X^2)INT()

El lenguaje tenía una serie de idiosincrasias propias. A diferencia de versiones posteriores, el LETcomando era necesario en todas las declaraciones que carecían de otro comando, por lo que no era válido en esta versión. [47] La ​​declaración usaba la coma al imprimir múltiples variables, avanzando a la siguiente de cinco "zonas". La coma no era necesaria en el caso en que se imprimía un mensaje y un único valor, por lo que era válida. Una característica algo oculta era que todas las variables podían representar matrices (vectores) de hasta diez elementos (subíndices 1 a 10, cambiados a 0 a 9 en la Segunda Edición) sin ser declaradas de esa manera usando . solo era necesario si se requería un tamaño de vector diferente. [48] [c]10 A=5*5PRINTPRINT "value of A is "ADIMDIM

Los nombres de las variables se limitaban a una sola letra o una letra seguida de un dígito (286 nombres de variables posibles). Las funciones de usuario solo podían tener una sola letra, por lo que FNAhasta FNZ. Todas las operaciones se realizaban en coma flotante . En el GE-225 y el GE-235, esto producía una precisión de unos 30 bits (aproximadamente diez dígitos) con un rango de exponente de base 2 de -256 a +255. [49]

Además, debido a que el tamaño de palabra del GE-235 era de 20 bits y utilizaba un código de caracteres de seis bits , el lenguaje consagró el uso de nombres de función de tres letras porque eso permitía el almacenamiento de tres caracteres de seis bits en una palabra de 20 bits (utilizando 18 bits). Es por eso que las funciones de BASIC son de tres letras, como INTo SQR, algo que permaneció en las muchas variedades del lenguaje mucho después de que abandonaran el GE-235. [47]

Segunda edición, CARDBASIC

La segunda edición de BASIC (aunque no se la menciona como tal en ese momento) solo introdujo cambios mínimos. Lanzada en octubre de 1964, podía comenzar las matrices en el subíndice 0 en lugar de 1 (útil para representar polinomios ) y agregó el punto y coma, , a la declaración. [50] A diferencia de las implementaciones posteriores donde esto dejaba espacio entre los elementos, el punto y coma adelantó la impresión al siguiente múltiplo de tres caracteres, lo que era útil para "comprimir" más números en una línea de salida que el separador de coma existente. [51] El tamaño de tres caracteres fue un efecto secundario del tamaño de palabra de 20 bits del GE-235 , que almacenaba tres caracteres de seis bits. Saltar a la siguiente columna de tres caracteres se lograba simplemente moviéndose a la siguiente palabra en la memoria. [52];PRINT

La versión de octubre también incluyó una definición separada para CARDBASIC, que era simplemente una versión de BASIC para su uso en flujos de trabajo basados ​​en tarjetas. CARDBASIC era casi idéntico a la versión interactiva, con la excepción de que no incluía las matrices basadas en cero. Más importante para el futuro del lenguaje, CARDBASIC agregó los MATcomandos que funcionaban con matrices numéricas. CARDBASIC no se desarrolló más, ya que la idea general de BASIC había sido ser interactivo. [50]

Tercera edición

La tercera edición, publicada en 1966 y la primera en utilizar el nombre "edición", fue la primera diseñada específicamente con la intención de ejecutarse en la nueva computadora GE-635 que llegaría pronto. Esta versión incluye las MATfunciones de CARDBASIC y ahora pueden utilizar 0 como subíndice. [53]

La nueva SGNfunción proporcionó el signo de su argumento (¿positivo? 0 y negativo? 1), mientras que RESTOREse agregó para "rebobinar" la posición de READ/DATA. Se solucionó el problema de exponenciación, por lo que -X^2se interpretaría como -(X^2). [53] Además, INTse modificó la función para que sea un piso verdadero, en lugar de recortar hacia cero, lo que permitió implementar el redondeo con INT(X+0.5). [47]

El cambio más importante en esta versión fue la nueva INPUTsentencia, que analizaba valores numéricos, lo que hizo que el lenguaje fuera verdaderamente interactivo durante la ejecución por primera vez; anteriormente, el único control que uno tenía durante la ejecución era escribir STOPen el monitor. Además, el sistema ahora permitía y alentaba que los bucles tuvieran sangrías, una característica que no se veía en la mayoría de las otras versiones de BASIC. [54]

Cuarta edición

La tercera edición se mantuvo en uso durante la vida útil del GE-235 hasta el otoño de 1967. Sin embargo, como se hicieron planes para recibir el GE-635, se creó una versión experimental en el 635 en la primavera de 1967. Esta versión fue una asociación entre GE y Dartmouth, con GE contribuyendo con un nuevo sistema operativo, así como una serie de características de BASIC de sus propios esfuerzos Mark 1 BASIC. [54]

Esta versión, publicada inicialmente como un suplemento a la Tercera Edición, agregó el RANDOMIZEcomando para "sembrar" la RNDfunción, y el ON...GOTO"goto calculado" que coincidía estrechamente con la característica similar en FORTRAN. Esta versión también permitió ON...THEN, argumentando que IF...THENno requería el GOTOentonces no sería requerido aquí. La nueva TABfunción movió la impresión a una columna dada, de 0 a 74. [54] Otro cambio interno fue cambiar una vez más el MATpara que estuviera basado en 1; uno podría usar el índice 0, pero normalmente sería ignorado por los diversos comandos. [55]

La principal novedad de esta versión fueron las variables de cadena, junto con cambios en las READ/DATAinstrucciones que podían almacenar cadenas en ellas y en la INPUTinstrucción para leerlas de forma interactiva. Una característica del sistema de cadenas era que los espacios finales se ignoraban deliberadamente en las comparaciones, de modo que "YES" y "YES " se consideraban iguales. [56] Más tarde se descubrió que esto era un grave error. [55] Las variables de cadena se indicaban con el signo de dólar, por ejemplo A$, simplemente porque se estaban quedando sin caracteres que se pudieran encontrar en la mayoría de los teclados. Alguien señaló que el $ se parecía a la S en "String", y eso fue todo. [57]

La manipulación de cadenas se realizaba mediante el nuevo CHANGEcomando, que convertía el valor de cadena de una variable en el conjunto equivalente de valores ASCII. A continuación, se podía manipular la matriz numérica y convertirla de nuevo en una cadena. Por ejemplo, este código produce "is" en la consola:

100 LET S$ = "Ahora es el momento" 110 CAMBIAR S$ POR S 120 LET T ( 1 ) = S ( 5 ) 130 LET T ( 2 ) = S ( 6 ) 140 LET T ( 0 ) = 2 150 CAMBIAR T POR T$ 160 IMPRIMIR T$                         

La línea 140 establece la longitud de la cadena en 2, que debe ser administrada por el usuario. El primer carácter está en T(1). Si bien este sistema es flexible, no era en absoluto cómodo de usar. Las versiones posteriores abordarían este problema con una nueva funcionalidad. [58]

Los cambios menores en esta versión cambiaron el punto y coma en PRINTlas declaraciones para hacer un "empaquetado cerrado" de la salida sin espacios, [52] [59] y el uso del apóstrofo como una forma abreviada REM. [60] [d]

La cuarta edición oficial no apareció hasta 1968, cuando se añadieron varias características nuevas a las anteriores. Entre ellas, se encontraba la capacidad de definir funciones multilínea con el DEFcomando y la potente CHANGEsentencia que trataba las cadenas como matrices de códigos similares a ASCII , de modo que se podía operar sobre caracteres individuales sin tener que recorrer toda la cadena. [55] Esta era también la única función de manipulación de cadenas; para extraer un solo carácter o subcadena, había que CHANGEconvertirlo en una matriz de números, manipular esa matriz y, a continuación, volver a convertirla. Esta fue la razón por la que MAT volvió a basarse en 1; la longitud de la cadena se colocaba en la posición cero y era necesario ignorarla normalmente. [61]

Quinta edición

La quinta edición, de finales de 1970, comenzó una vez más como dos suplementos de la cuarta edición, de febrero y abril de 1969. [55]

El cambio más importante fue la introducción del manejo de archivos. Anteriormente, todos los datos predefinidos que debían usarse en el programa debían colocarse en las líneas DATA y luego leerse de a uno por vez utilizando el comando READ . Esta característica se podía utilizar para leer archivos de manera similar. El comando INPUT ahora podía leer un solo elemento de un archivo y PRINT podía escribir uno. [62]

Los archivos se abrían con la FILESpalabra clave new, seguida de una lista de constantes de cadena que describían los nombres de los archivos. Como se trataba de constantes, cambiar el nombre del archivo exigía que se cambiara el código para que coincidiera. A los nombres se les asignaban números, el primer nombre se convertía en el archivo n.° 1, y así sucesivamente. Se admitían dos formatos de archivo: acceso aleatorio y lineal. Un archivo lineal se trataba como se trataría hoy en día un archivo de texto: se podía LINPUT #1: A$leer una línea de texto en una variable de cadena y luego PRINT A$enviarla a la terminal. [62] Las versiones posteriores añadieron el FILE $1,name$para permitir que los archivos se especificaran mediante cadenas, aunque durante un tiempo esto requería un FILES *cerca de la parte superior del programa para indicar que se estaba utilizando este formato. [63]

En el caso de los archivos de acceso aleatorio, el nombre tenía que especificar el tipo de datos que contenían; %indicaba que contenía datos binarios, mientras que $numindicaba que debía leerse como cadenas con una longitud máxima de num. [62] Las funciones READ y WRITE podían ubicarse en cualquier lugar de un archivo de acceso aleatorio con el comando RESET , mientras que la ubicación actual era devuelta por la función LOC y la longitud del archivo por LOF . Durante las lecturas secuenciales, también se podía probar si estaba al final del archivo usando . [64]IF END THEN...

Otro cambio importante fue la capacidad de un programa BASIC de llamar a otro usando el comando CHAIN ​​y pasarle variables usando la lista COMMON . Más tarde se descubrió que este concepto básico tenía varios problemas, pero aun así se utilizó para escribir algunos programas grandes. [64]

El manejo de cadenas recibió una importante actualización. El nuevo SEG$comando devolvió una nueva cadena extraída de otra. En el ejemplo anterior, la cadena "is" se extrae de una cadena más grande. Con el nuevo comando, esto se puede reducir a , que funciona de manera similar a la función que se encuentra en la mayoría de los dialectos ( ). SEG$ usa el primer y último índice; MID$ usa el primer índice y la longitud. devolvió la longitud de una cadena, que de otra manera ahora se manejaba internamente y no requería cálculo en la mayoría de los casos, y devolvió la posición de una cadena dentro de otra, que en la mayoría de los dialectos era manejada por . El ampersand, , se introdujo para la concatenación de cadenas . [58]LET T$ = SEG$(S$,5,6)MID$MID$(S$,5,2)LENPOSSUBSTR&

También se añadieron numerosos cambios menores. Entre ellos se encontraban matrices de cadenas bidimensionales, en lugar de unidimensionales en la versión anterior, así como la capacidad de utilizar DEF para definir funciones basadas en cadenas, así como funciones matemáticas. Las nuevas funciones orientadas al sistema incluían CLK$ , DAT$ para trabajar con horas y fechas, TIM que devolvía el tiempo transcurrido y USR$ que devolvía el número de usuario, lo que hoy sería el nombre de usuario. Las nuevas funciones de cadena incluían STR$ , VAL y ASC , que son comunes en los dialectos modernos de BASIC. El como forma corta de REM también apareció en esta versión. [64]'

Sexta edición

El trabajo sobre la sexta edición comenzó en el otoño de 1969, antes de que se finalizara la quinta edición. Se escribió una especificación completa de antemano para la nueva versión, lo que contrasta con las versiones anteriores, en las que los documentos de especificación se basaban en los cambios en el compilador. En esta versión trabajaron Kemeny y Kurtz, así como varios ex alumnos que regresaron como profesores: Stephen Garland, John McGeachie y Robert Hargraves. Se le dio un tiempo considerable para madurar, con una versión beta funcionando durante tres meses durante el verano de 1971, antes de que finalmente se lanzara el 21 de septiembre de 1971. Como resultado de esta madurez, Kurtz lo describió como "probablemente el sistema de software mejor diseñado y más estable que Dartmouth haya escrito jamás". [65]

Uno de los cambios más importantes fue la sustitución del CHAINconcepto anterior por el mucho mejor definido CALLque operaba de una manera similar a GOSUB, pero se refería a un nombre de función en lugar de a un número de línea. Las funciones se definían utilizando , y tomaban parámetrosSUB...SUBEND arbitrarios en la llamada en lugar de utilizar variables globales mediante declaraciones. Otro cambio importante fue el uso de identificadores de archivo (números) creados con el comando que es similar a que se encuentra en la mayoría de los BASIC modernos. proporcionaba una salida formateada de una manera similar a FORTRAN, [66] mientras que aceptaba la entrada sin interpretación, lo que permitía escribir comas, punto y coma e incluso código BASIC. [67]COMMONFILEOPENPRINT USINGLINPUT

La sexta edición fue esencialmente la última versión del concepto original de BASIC. Se mantuvo sin cambios durante muchos años. Las versiones posteriores tenían lenguajes significativamente diferentes. [65]

SBASIC

En 1976, Stephen Garland recopiló una serie de añadidos a la programación estructurada para crear Dartmouth Structured BASIC, o SBASIC. [68] El objetivo principal era sustituir las estructuras de control basadas en IF...THENy GOTOpor una variedad de estructuras orientadas a bloques. Para ello, utilizó un precompilador que tomó el código fuente de SBASIC, lo convirtió a BASIC de sexta edición y luego lo compiló y ejecutó de forma normal. SBASIC también añadió una serie de funciones gráficas, basadas en el PLOTcomando que habían añadido otros programadores. [69]

Las estructuras de bloques se terminaban con declaraciones coincidentes como era el caso en ALGOL 68 , a diferencia de las estructuras de bloques genéricas que se encuentran en lenguajes como Pascal o C. Por ejemplo, el DO WHILE...cubría varias líneas hasta que terminaba con un LOOP. [70] El DObucle también se podía salir por la parte inferior eliminando el WHILEo UNTILy colocando el condicional en la parte inferior del LOOP. Los bucles infinitos se admitían utilizando DO FOREVERor LOOP FOREVER. [71]

El BASIC Dartmouth "original" no permitía instrucciones después de un THEN, sólo un número de línea al que ramificarse. SBASIC permitía cualquier instrucción, por ejemplo . [72] Esta expansión básica del , iniciada en 1972 con BASIC-PLUS , [73] ya contaba con un amplio soporte para la mayoría de los BASIC en ese momento, incluidas las versiones para microcomputadoras que se estaban lanzando en ese momento. Además de esto, SBASIC agregó la orientación a bloques al colocar el en una línea separada y luego terminar el bloque con . [74] Además de esto, SBASIC agregó el mecanismo que sobrevive hasta el día de hoy en Visual Basic .NET . [75]IF X < 5 THEN X=X+1IF...THENIFTHENCONTINUESELECT CASE

SBASIC también agregó una serie de comandos gráficos destinados a ser utilizados con trazadores . Esto requería PLOTTER "plottername"que el dirigiera los comandos subsiguientes a un dispositivo seleccionado y que el WINDOW...configurara sus parámetros. A partir de ese momento, PLOT X,Yproduciría puntos en el trazador seleccionado, mientras que agregar el punto y coma al final de la instrucción, como se usa en PRINT, dejaría el lápiz sobre el papel y produciría una línea, por ejemplo PLOT 10,10;20,20. [76] [77]

SBASIC finalmente formó la base del Estándar ANSI X3.113-1987 de 1987 para Basic completo , que extendió el Estándar ANSI X3.60-1978 de 1978 para Basic mínimo. La larga demora en producir ese estándar, junto con la falta de consideración entre los científicos informáticos por el Basic no estructurado, llevó al comité del College Board que desarrollaba el Curso de Colocación Avanzada en Ciencias de la Computación , que Garland presidía, a optar por requerir Pascal y no permitir que Basic fuera el lenguaje para el curso. [78] [79]

Garland utilizó SBASIC para enseñar el curso introductorio de informática en Dartmouth, [80] [81] pero reescribió su libro de texto para el curso en Pascal [82] para que pudiera usarse para enseñar el curso AP.

Séptima edición

El SBASIC de Garland era un precompilador escrito en código fuente SBASIC. El sistema leía el código fuente SBASIC, escribía el código correspondiente de la sexta edición y luego compilaba esa salida. La séptima edición, publicada en 1980, era una versión de SBASIC que era un compilador independiente propio. Añadió una serie de añadidos propios. La mayoría de los cambios eran elaboraciones adicionales sobre el sistema para llamar a programas externos y "superposiciones" que se podían utilizar para dividir un programa en partes. En esta versión, SUBlos programas que compartían un único archivo compartían datos entre ellos de forma efectiva. Esto proporcionaba un mínimo de datos ocultos dentro del grupo de rutinas. Esta separación se conocería hoy como módulo. [83]

Además, esta edición agregó manejo de errores estructurado y matemáticas de matriz arbitrarias en LETlas declaraciones, de modo que uno podía decir LET A = M*4donde M era una variable de matriz, y la declaración generaría otra matriz en A con todos los elementos en M escalados por 4. Finalmente, otra actualización importante fue el uso de registros de activación para subrutinas que hicieron posible la recursión . [83]

ANSI BASIC, octava edición

A principios de los años 1970, el número de implementaciones de BASIC había crecido a docenas, todas las cuales tenían sus propios cambios en el concepto básico introducido en la versión original. La mayoría de ellas se basaban en la quinta edición, aunque a menudo carecían de las instrucciones MAT y de la capacidad de sangrar el código. GE fue una de estas empresas; lanzaron sus sistemas Mark II con la quinta edición en lugar de esperar a que llegara la sexta unos meses más tarde. [84] BASIC-PLUS en la plataforma DEC fue quizás la implementación más cercana, incluyendo los comandos MAT, por ejemplo, pero luego agregó una serie de cambios que no eran compatibles con versiones anteriores. [40]

Después del lanzamiento de la sexta edición, Kurtz se involucró en un esfuerzo por definir un BASIC estándar. En enero de 1974 se formó un grupo de trabajo del Instituto Nacional Estadounidense de Estándares (ANSI), X3J2, y en septiembre de ese mismo año se formó un grupo correspondiente de la Asociación Europea de Fabricantes de Computadoras (ECMA), TC21. El objetivo en ese momento era producir dos estándares relacionados. El BASIC mínimo sería similar a la Segunda Edición, pero añadiendo cadenas, un estándar al que prácticamente todos los BASIC ya podrían ajustarse. El BASIC estándar añadiría más funcionalidad para producir algo más acorde con las variedades reales de BASIC que se ven en el mercado. [84]

El proceso fue lento y el primer borrador del BASIC Mínimo no se publicó hasta enero de 1976, lo que llevó a que fuera adoptado oficialmente en diciembre de 1977 por la ECMA y en 1979 por la ANSI como X3.60-1978. El BASIC Mínimo era similar a la tercera edición, incluyendo variables de cadena, aunque carecía de MAT y otras características avanzadas. [85] En contraste, el BASIC Estándar tenía muchas características nuevas que no existían en otros BASIC, y muchas de ellas fueron mal consideradas y objeto de algunas críticas. Por ejemplo, el estándar incluía un carácter de continuación de línea, pero eligió el ampersand, que también se usaba para la concatenación de cadenas. Usar estos en una sola línea podía llevar a un código muy confuso. [86]&

En ese momento, el lanzamiento de los primeros sistemas de microcomputadoras en 1975 había llevado rápidamente a la introducción de Altair BASIC , la primera versión de lo que pronto se conocería como Microsoft BASIC . MS BASIC se basó en BASIC-PLUS, y por lo tanto en última instancia en la Quinta Edición, pero carecía de sangría, MAT y otras características. También agregó las funciones LEFT$y RIGHT$, rompiendo la convención de tres letras. A medida que el número de microcomputadoras creció y se convirtió en el mercado de computadoras domésticas a fines de la década de 1970, MS BASIC se convirtió en el estándar de facto . [84]

Con este rápido cambio en el mercado, el esfuerzo por crear el BASIC estándar se ralentizó aún más y no fue ratificado formalmente hasta 1987 como X3.113-1987. En ese momento, los estándares ya no tenían un propósito real; no sólo el BASIC MS estaba en todas partes, sino que a mediados de los años 1980 el uso del BASIC estaba en declive a medida que el software empaquetado reemplazaba a los programas de escritura. Ambos estándares finalmente fueron retirados. [84]

A pesar del fracaso final de los esfuerzos de ANSI, el borrador del Estándar BASIC se implementó en Dartmouth como la Octava Edición en 1982. [83]

Interfaz DTSS

DTSS implementó un entorno de desarrollo integrado (IDE) temprano: una interfaz de línea de comandos interactiva . Esto proporcionaba una serie de comandos de control de usuarios y trabajos. Por ejemplo, una terminal inactiva podía conectarse a una cuenta de usuario escribiendo HELLO, y cerrar sesión nuevamente con BYE. [e]

Cualquier línea que el usuario escribiera y que comenzara con un número de línea se añadía al programa, reemplazando cualquier línea previamente almacenada con el mismo número; cualquier otra cosa se asumía como un comando DTSS y se ejecutaba inmediatamente. Las líneas que consistían únicamente en un número de línea no se almacenaban, pero se eliminaban todas las líneas previamente almacenadas con el mismo número. Este método de edición era necesario debido al uso de teleimpresoras como unidades terminales.

Cada cuenta de usuario podía tener cualquier cantidad de programas BASIC almacenados sin conexión, mientras que las cuentas de administrador también podían dejar programas en almacenamiento permanente. Cualquiera de estos programas estaba activo en un momento dado para una cuenta de usuario determinada y, si no se había cargado ningún programa, se asumía que se había cargado un programa nuevo. Se accedía a los programas almacenados mediante comandos que hoy en día son más conocidos como partes del propio lenguaje BASIC; por ejemplo, el LISTcomando indicaba a DTSS que imprimiera el programa activo en ese momento.

Lista de comandos

HELLO
Iniciar sesión en DTSS
BYE
Cerrar sesión en DTSS
BASIC
Iniciar el modo BÁSICO
NEW
Nombrar y comenzar a escribir un programa
OLD
recuperar un programa nombrado previamente del almacenamiento permanente
LIST
mostrar el programa actual
RUN
ejecutar el programa actual
STOP
Interrumpir el programa que se está ejecutando actualmente
TEST
Utilice un programa proporcionado por el instructor para probar el programa actual
LINK
ejecutar el programa actual en un modo de múltiples terminales
JOIN
Unirse a un programa que se está ejecutando en modo de múltiples terminales
SAVE
guardar el programa actual en almacenamiento permanente
UNSAVE
Limpiar el programa actual del almacenamiento permanente
REPLACE
guardar el programa actual usando un nombre que ya esté en uso para otro archivo
CATALOG
Mostrar los nombres de los programas en el almacenamiento permanente
SCRATCH
Borrar el programa actual sin borrar su nombre
RENAME
cambiar el nombre del programa actual sin borrarlo
FRI
Habilitar el modo Friden para teletipos con saltos de línea mecánicos
NFR
Deshabilitar el modo Friden
EXP
explicar (ayuda) EXP EXP para la lista de comandos que el sistema puede explicar

Los usuarios solían creer que los comandos eran parte del lenguaje BASIC, pero, de hecho, eran parte del sistema de tiempo compartido y también se utilizaban al preparar programas ALGOL o FORTRAN a través de las terminales DTSS.

Sistema de enseñanza/prueba

Alrededor del 80% de todos los estudiantes de Dartmouth a finales de los años 1960 tomaron dos cursos de matemáticas y aprendieron Basic en el segundo curso, ya sea en cálculo o en matemáticas finitas. Recibían dos conferencias de una hora sobre Basic cerca del comienzo de estos cursos y luego tenían que escribir cuatro programas en Basic, que iban desde programas para aproximar π o encontrar una raíz de un polinomio de quinto grado hasta programas para resolver una ecuación diferencial o encontrar (por simulación) la probabilidad límite en una cadena de Markov. El sistema TEACH/Test ayudaba a los estudiantes a completar estas tareas. Cuando pensaban que tenían un programa que funcionaba, escribían el comando TEST, y un programa escrito por el instructor aprobaba lo que habían escrito o proporcionaba una pista sobre dónde podían haberse equivocado. Los estudiantes debían entregar una lista de cada programa, un ejemplo de RUN y una aprobación del sistema TEACH/Test. El sistema no calificaba las tareas ni llevaba un registro de cuántas veces un estudiante escribía TEST; simplemente ayudaba a los estudiantes y a sus instructores. [87] [88]

Lenguaje BASICO

La primera versión implementó los siguientes tipos de declaraciones, tomando algunos de sus operadores y palabras clave de FORTRAN II y algunos de ALGOL 60. En general, el lenguaje sigue más de cerca el modelo FORTRAN, [46] en el sentido de que generalmente tiene una declaración por línea de código, carece de los "bloques" de ALGOL para agrupar el código (estas construcciones de programación estructurada fueron una razón principal para el desarrollo de ALGOL) y el uso de GOTO para controlar el flujo del programa.

De ALGOL tomó el FOR...TO...STEPestilo de bucles que reemplazaron las difíciles instrucciones de FORTRAN DO...CONTINUE. [47] BASIC también simplificó la IF...THENconstrucción para permitir comparaciones simples como , a diferencia de FORTRAN . [47] El estilo de FORTRAN "SI calculado" fue reintroducido con el comando en versiones posteriores.IF X>5 THEN GOTO 20IF (X-5) 20,20,30ON...GOTO

Los nombres de las variables se limitaron a A a Z, A0 a A9, B0 a B9, ..., Z0 a Z9, lo que dio un máximo de 286 posibles variables distintas. Se eliminó el extraño sistema de FORTRAN para configurar las variables de la I a la N como números enteros y el resto como coma flotante, y se asumió que todas las variables eran de coma flotante y se dimensionaron con hasta 10 elementos. El DIMcomando solo era necesario si la matriz contenía más de diez elementos. [47] Los nombres de las matrices se restringieron a A a Z únicamente.

Lista de instrucciones BASIC

DEF
definir funciones de una sola línea
DIM
(abreviatura de dimensión ) define el tamaño de las matrices
END
definir el final del programa
STOP
Detener un programa antes del final del texto.
FOR / TO / STEP
definir bucles
NEXT
marcar el final de los bucles
GOSUB
transferir el control a subrutinas simples
RETURN
Control de retorno desde subrutinas simples
GOTO
transferir el control a otra declaración
IF / THEN
Toma de decisiones
LET / =
Asignar resultados de fórmula a una variable
PRINT
resultados de salida
DATA
almacenar datos estáticos dentro del programa
READ
datos de entrada almacenados en declaraciones DATA
REM
Comentario ("REMark")

También implementó variables numéricas de punto flotante y aritmética.

Lista de operadores

Lista de funciones

ABS
Valor absoluto
ATN
Valor del arcotangente (resultado en radianes )
COS
Valor del coseno (argumento en radianes )
EXP
Valor exponencial
INT
Valor entero
LOG
Valor logarítmico natural
RND
Valor aleatorio
SIN
Valor del seno (argumento en radianes )
SQR
Valor de la raíz cuadrada
TAN
Valor de la tangente (argumento en radianes )

Ejemplos

Las primeras versiones de BASIC no tenían la capacidad de leer y escribir archivos externos. Para representar listas de datos que normalmente se leían de un archivo, BASIC incluía la DATApalabra clave , que podía ir seguida de una lista de elementos arbitrariamente larga, que terminaba solo en el límite de la longitud de la línea. La DATAno era ejecutable y se omitía si se encontraba. READLos comandos consumían los datos uno por uno, manteniendo un registro de su ubicación dentro de la colección completa de DATAelementos en un puntero interno. En la versión 3, RESTOREse agregó un comando para restablecer el puntero al primer DATAcomando de un programa.

En este ejemplo, "los tres primeros valores de datos se leen en X, Y y Z respectivamente. El valor -1 se lee en N. Los siguientes 11 valores, .1 a .3, se leen en los 11 elementos de la matriz B" . [89]

15 LEER X , Y , Z 20 LEER N 24 PARA I = 0 A 10 25 LEER B ( I ) 26 SIGUIENTE I 40 DATOS 4.2 , 7.5 , 25.1 , -1 , .1 , .01 , .001 , .0001 45 DATOS .2 , .02 , .002 , .0002 , .015 , .025 , .3 , .03 , .003                                 

A diferencia de la mayoría de los BASIC posteriores, Dartmouth BASIC, a partir de la tercera edición, tenía una palabra clave de matriz, MAT, que podía anteponer una serie de otros comandos para operar sobre matrices completas de datos con un solo comando. En este ejemplo, del manual de 1968, se utiliza [90] MAT INPUT V para ingresar una serie de variables. Cuando el usuario no ingresa nada en una línea, este proceso finaliza y se accede al número total de elementos en la NUMpseudovariable. [f] Luego, el código suma todos los elementos individuales en la matriz y calcula el promedio. La tercera edición también agregó sangría, que se utiliza aquí para aclarar la estructura del bucle.

5 LET S = 0 10 MAT INPUT V 20 LET N = NUM ​​30 IF N = 0 THEN 99 40 FOR I = 1 TO N 45 LET S = S + V ( I ) 50 NEXT I 60 PRINT S / N 70 IR A 5 99 FIN                                              

Notas

  1. ^ Nótese el uso del término "su", que en este caso era la única posibilidad, ya que Dartmouth no admitió mujeres hasta algún tiempo después.
  2. ^ David Ahl afirmó que Kemeny lo había escrito al describir el juego en BASIC Computer Games. [42]
  3. ^ Esta característica se encontraba en la mayoría de los BASIC basados ​​en Dartmouth, pero era poco común en aquellos que se crearon independientemente.
  4. ^ No está claro si el apóstrofe se utilizó en versiones anteriores, el manual de la Revisión 4 es el primero en mencionarlo explícitamente.
  5. ^ No era necesario cerrar la sesión, si los usuarios no respondían, se cerraba la sesión después de una breve demora.
  6. ^ Por qué NUMno se implementó como una función, como LEN(), es un misterio.

Referencias

Citas

  1. ^ Qué hacer después de pulsar Enter. People's Computer Company. 1975.
  2. ^ desde Kurtz 1981, pág. 516.
  3. ^ desde Kurtz 1981, págs. 516–516.
  4. ^ ab Kemeny y Kurtz 1985, pág. 7.
  5. ^ Kemeny y Kurtz 1985, pág. 8.
  6. ^ Kurtz 1981, pág. 517.
  7. ^ abc Kurtz 1981, pág. 518.
  8. ^ Tiempo 2014.
  9. ^ Kemeny y Kurtz 1968, pág. 3.
  10. ^ "Matemáticas de alto nivel en Hanover". Time . 23 de febrero de 1959.
  11. ^ Kemeny y Kurtz 1985, pág. 3.
  12. ^ Kemeny y Kurtz 1985, pág. 4.
  13. ^ Kurtz 1981, pág. 519.
  14. ^ Kemeny y Kurtz 1985, pág. 6.
  15. ^ Kemeny y Kurtz 1985, pág. 9.
  16. ^ Kurtz 1981, págs. 519–520.
  17. ^ Kiewit 1971, pág. 9.
  18. ^ ab Kemeny y Kurtz 1985, pág. 5.
  19. ^ abc Kurtz 1981, pág. 520.
  20. ^ General Electric Computers (1965). Manual de referencia de programación DATANET-30 (PDF) .
  21. ^ Sistema de tiempo compartido de Dartmouth (DTSS). Marzo de 1995. Consultado el 27 de mayo de 2016.
  22. ^ ab Kemeny y Kurtz 1968, pág. 224.
  23. ^ desde Kiewit 1971, pág. 10.
  24. ^ Kemeny y Kurtz 1968, pág. 225.
  25. ^ "Los años 1960". Dartmouth ITS .
  26. ^ Kemeny y Kurtz 1985, págs.16, 22.
  27. ^ Kemeny y Kurtz 1985, pág. 16.
  28. ^ Kemeny y Kurtz 1968, pág. 226.
  29. ^ Kemeny y Kurtz 1985, pág. 21.
  30. ^ Kemeny y Kurtz 1985, pág. 22.
  31. ^ Kurtz 1981, págs. 532, 534.
  32. ^ abcd Kiewit 1971, pág. 11.
  33. ^ abc Kurtz 1981, pág. 533.
  34. ^ abc Kurtz 1981, pág. 534.
  35. ^ desde Kiewit 1971, pág. 17.
  36. ^ Kiewit 1971, pág. 18.
  37. ^ Garfinkel, Simson (1999). Abelson, Hal (ed.). Arquitectos de la sociedad de la información, treinta y cinco años del Laboratorio de Ciencias de la Computación del MIT. Cambridge: MIT Press. p. 1. ISBN 978-0-262-07196-3.
  38. ^ ab Kemeny, John G. (1972). El hombre y la computadora. Nueva York: Charles Scribner's Sons. pp. 32-37, 41-42. ISBN 9780684130095.LCCN 72-1176  .
  39. ^ Guía de BASIC de tiempo compartido (PDF) . Hewlett Packard. Agosto de 1969.
  40. ^ ab Manual BASIC-PLUS (PDF) . DICIEMBRE DE 1972.
  41. ^ "John Kemeny y el abuelo del FTBALL BÁSICO de Tecmo". 17 de octubre de 2017. Archivado desde el original el 25 de julio de 2018. Consultado el 25 de julio de 2018 .
  42. ^ Ahl 1978, pág. 64.
  43. ^ Qué hacer después de pulsar Enter. People's Computer Company. 1975.
  44. ^ Ahl 1978.
  45. ^ John S. McGeachie, "Múltiples terminales bajo control del programa de usuario en un entorno de tiempo compartido", Communications of the ACM 16:10, octubre de 1973, páginas 587 y 590.
  46. ^ abc Kurtz 1981, pág. 523.
  47. ^ abcdefg Kurtz 1981, pág. 524.
  48. ^ Kurtz 1981, pág. 525.
  49. ^ Kurtz, Thomas. "Comandos BASIC: La versión original-original".
  50. ^ desde Kurtz 1981, pág. 526.
  51. ^ Hombre4.
  52. ^ ab Kemeny y Kurtz 1985, pág. 24.
  53. ^ desde Kurtz 1981, pág. 527.
  54. ^ abc Kurtz 1981, pág. 528.
  55. ^ abcd Kurtz 1981, pág. 529.
  56. ^ Hombre4, pág. 66.
  57. ^ Kemeny y Kurtz 1985, pág. 28.
  58. ^ ab Kemeny y Kurtz 1985, pág. 29.
  59. ^ Hombre4, pág. 64.
  60. ^ Hombre4, pág. 52.
  61. ^ Hombre4, pág. 67.
  62. ^ abc Kemeny y Kurtz 1985, pág. 31.
  63. ^ Kemeny y Kurtz 1985, pág. 32.
  64. ^ abc Kurtz 1981, pág. 530.
  65. ^ desde Kurtz 1981, pág. 531.
  66. ^ Elliott 1988, pág. 134.
  67. ^ Kemeny y Kurtz 1985, pág. 26.
  68. ^ Guirnalda 1976.
  69. ^ Garland 1976, pág. 1.
  70. ^ Garland 1976, pág. 4.
  71. ^ Garland 1976, pág. 5.
  72. ^ Garland 1976, pág. 6.
  73. ^ Manual del lenguaje BASIC-PLUS (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1972. págs. 3–13.
  74. ^ Garland 1976, pág. 7.
  75. ^ Garland 1976, pág. 10.
  76. ^ Garland 1976, pág. 21.
  77. ^ Stephen J. Garland y Arthur W. Luehrmann, "Gráficos en el lenguaje BASIC", Computer Graphics (informe trimestral de SIGGRAPH-ACM) 8:3, páginas 1–8, 1974.
  78. ^ Mace, Scott (6 de septiembre de 1982). "College Board está desarrollando un curso AP basado en Pascal". InfoWorld . pág. 29.
  79. ^ Stephen J. Garland, "Advanced Placement Computer Science", Computers in Mathematics Education , Viggo P. Hansen y Marilyn J. Zweng (editores), páginas 194-201. Anuario del Consejo Nacional de Profesores de Matemáticas, 1984.
  80. ^ Stephen J. Garland, Introducción a la informática y programación básica , Programa de informática y ciencias de la información, Dartmouth College, 1982.
  81. ^ Stephen J. Garland, "Lenguajes para primeros cursos de informática: básico", Abacus 1:4, páginas 39-49, verano de 1984.
  82. ^ Stephen J. Garland, Introducción a la informática con aplicaciones en Pascal , Addison-Wesley, Reading, MA, 1986.
  83. ^ abc Elliott 1988, pág. 135.
  84. ^abcd Marconi.
  85. ^ BASIC Mínimo (PDF) . ECMA. Enero de 1978.
  86. ^ Guntheroth, Kurt (julio de 1983). "El nuevo estándar ANSI BASIC". Avisos ACM SIGPLAN . 18 (7): 50–59. doi :10.1145/988216.988221. S2CID  31236801.
  87. ^ John G. Kemeny y Thomas E. Kurtz, "Dartmouth Time-Sharing", Science 162, 11 de octubre de 1968, páginas 223–228.
  88. ^ John G. Kemeny y Thomas E. Kurtz, The Dartmouth Time-Sharing Computing System, Informe final para la subvención NSF-GE-3864 de la National Science Foundation, junio de 1967, páginas 9-10 y Apéndice III.
  89. ^ Manual de referencia del lenguaje BASIC . Interdata. Enero de 1975. Págs. 3–24.
  90. ^ BASIC, 4ª edición, 1968, página 53

Bibliografía

Enlaces externos