Un intérprete BASIC es un intérprete que permite a los usuarios ingresar y ejecutar programas en el lenguaje BASIC y fue, durante la primera parte de la era de las microcomputadoras , la aplicación predeterminada que lanzaban las computadoras. Se esperaba que los usuarios usaran el intérprete BASIC para escribir programas o cargar programas desde el almacenamiento (inicialmente cintas de casete y luego disquetes ).
Los intérpretes BÁSICOS son de importancia histórica. El primer producto de Microsoft a la venta fue un intérprete BASIC ( Altair BASIC ), que allanó el camino para el éxito de la empresa. Antes de Altair BASIC, las microcomputadoras se vendían como kits que debían programarse en código de máquina (por ejemplo, Apple I ). Durante el período de Altair, los intérpretes BASIC se vendieron por separado, convirtiéndose en el primer software vendido a individuos en lugar de a organizaciones; Apple BASIC fue el primer producto de software de Apple. Después del MITS Altair 8800 , se esperaba que las microcomputadoras se enviaran con sus propios intérpretes BASIC (por ejemplo, el Apple II, que tenía múltiples implementaciones de BASIC). Una reacción violenta contra el precio de Altair BASIC de Microsoft también condujo al desarrollo temprano de software colaborativo, para implementaciones Tiny BASIC en general y Palo Alto Tiny BASIC específicamente.
Historia
BASIC ayudó a impulsar la era del tiempo compartido, se convirtió en la corriente principal en la era de las microcomputadoras, luego se desvaneció para convertirse en una aplicación más en la era de DOS y GUI, y hoy sobrevive en algunos nichos relacionados con el desarrollo de juegos, la retrocomputación y la enseñanza.
Era del tiempo compartido
Implementado por primera vez como un sistema compilar y listo en lugar de un intérprete, BASIC surgió como parte de un movimiento más amplio hacia los sistemas de tiempo compartido . General Electric , habiendo trabajado en Dartmouth Time Sharing System , escribió su propio sistema operativo subyacente y lanzó un sistema de tiempo compartido en línea conocido como Mark I que presenta un compilador BASIC (no un intérprete) como uno de sus principales puntos de venta. Otras empresas del campo emergente siguieron rápidamente su ejemplo. A principios de la década de 1970, BASIC era en gran parte universal en las computadoras mainframe de propósito general. [1]
BASIC, como lenguaje simplificado diseñado con la edición de líneas integrada en mente, se adaptaba naturalmente al mercado de las minicomputadoras , que estaba surgiendo al mismo tiempo que los servicios de tiempo compartido. Estas máquinas tenían una memoria principal muy pequeña , quizás tan solo 4 KB en la terminología moderna y carecían del almacenamiento de alto rendimiento como los discos duros que hacen que los compiladores sean prácticos. Por el contrario, un intérprete necesitaría menos recursos informáticos, a expensas del rendimiento. En 1968, Hewlett Packard presentó HP 2000 , un sistema que se basaba en su intérprete HP Time-Shared BASIC . [2] En 1969, Dan Paymar e Ira Baxter escribieron otro intérprete de BASIC temprano, para el Data General Nova . [3] A principios de la década de 1970, BASIC se había vuelto casi universal en el mercado de las minicomputadoras, con el surgimiento de Business BASIC , y los competidores de BASIC, como FOCAL y JOSS , habían sido olvidados. [4]
Era de la microcomputadora
La introducción de las primeras microcomputadoras a mediados de la década de 1970 continuó el crecimiento explosivo de BASIC, que tenía la ventaja de que era bastante conocido por los jóvenes diseñadores y aficionados a la informática que se interesaron por las microcomputadoras, muchos de los cuales habían visto BASIC en minis o mainframes. BÁSICO fue uno de los pocos lenguajes que era lo suficientemente de alto nivel para ser utilizado por personas sin capacitación y lo suficientemente pequeño como para caber en las microcomputadoras de la época. En 1972, HP presentó la calculadora de escritorio programable HP 9830A con un intérprete BASIC Plus en memoria de solo lectura (ROM). [5]
En junio de 1974, Alfred Weaver, Michael Tindall y Ronald Danielson de la Universidad de Illinois en Urbana-Champaign demostraron que era posible producir "A BASIC Language Interpreter for the Intel 8008 Microprocessor", en su artículo del mismo nombre, aunque su La aplicación se implementó en un simulador 8008 para IBM 360/75 y requirió 16 KB. [6]
En enero de 1975, se anunció el Altair 8800 y provocó la revolución de los microordenadores . Una de las primeras versiones de BASIC para microcomputadoras fue coescrita por Gates, Allen y Monte Davidoff para su compañía recién formada, Micro-Soft. Este fue lanzado por MITS en formato de cinta perforada para el Altair 8800 poco después de la máquina en sí, [7] mostrando BASIC como el lenguaje principal para las primeras microcomputadoras.
En marzo de 1975, Steve Wozniak asistió a la primera reunión del Homebrew Computer Club y comenzó a formular el diseño de su propia computadora. Los miembros del club estaban entusiasmados con Altair BASIC. [8] Wozniak concluyó que su máquina tendría que tener un BÁSICO propio. En ese momento trabajaba en Hewlett Packard y utilizaba su dialecto de minicomputadora, HP Time-Shared BASIC , como base para su propia versión. Integer BASIC se lanzó en casete para el Apple I y se suministró en ROM cuando se envió el Apple II en el verano de 1977. [9]
Otros miembros del Homebrew Computer Club comenzaron a distribuir copias de Altair BASIC en cinta de papel, lo que provocó que Gates escribiera su Carta abierta a los aficionados , quejándose de este primer ejemplo de piratería de software . En parte en respuesta a la carta de Gate, y en parte para hacer un BASIC aún más pequeño que funcionaría de manera útil en máquinas de 4 KB, [a] Bob Albrecht instó a Dennis Allison a escribir su propia variación del lenguaje. Allison cubrió cómo diseñar e implementar una versión simplificada de un intérprete para el lenguaje BÁSICO en los primeros tres números trimestrales del boletín informativo People's Computer Company publicado en 1975 y las implementaciones con el código fuente publicado en el Dr. Dobb's Journal of Tiny BÁSICA Calistenia y Ortodoncia: Running Light sin Overbyte . Esto llevó a una amplia variedad de Tiny BASIC con características adicionales u otras mejoras, con versiones conocidas de Tom Pittman y Li-Chen Wang , ambos miembros del Homebrew Computer Club. [10] Tiny BASIC se publicó abiertamente y Wang acuñó el término "copyleft" para animar a otros a copiar su código fuente. Aficionados y profesionales crearon sus propias implementaciones, haciendo de Tiny BASIC un ejemplo de un proyecto de software libre que existía antes del movimiento del software libre .
Muchas empresas desarrollaron intérpretes BASIC. En 1976, SCELBI presentó SCELBAL para el 8008 [11] y la Universidad de Idaho y el Laboratorio Lawrence Livermore anunciaron que publicarían en el dominio público LLL BASIC, que incluía soporte de punto flotante. [12] En 1977, el Apple II y el TRS-80 Model I tenían cada uno dos versiones de BASIC, una versión más pequeña introducida con los lanzamientos iniciales de las máquinas y una versión con licencia de Microsoft introducida más tarde a medida que aumentaba el interés en las plataformas.
Microsoft transfirió su intérprete al MOS 6502 , que rápidamente se convirtió en uno de los microprocesadores más populares de la era de los 8 bits. Cuando empezaron a aparecer nuevas microcomputadoras, como la Commodore PET , sus fabricantes obtuvieron una licencia de Microsoft BASIC, personalizada para las capacidades del hardware. En 1978, MS BASIC era un estándar de facto y prácticamente todas las computadoras domésticas de la década de 1980 lo incluían en ROM . En 1980, como parte de un acuerdo de licencia más grande que incluía otros lenguajes y PC DOS , IBM rechazó una propuesta de Atari y en su lugar otorgó una licencia a MS-BASIC sobre su propia implementación, y finalmente lanzó cuatro versiones de IBM BASIC , cada una mucho más grande que los intérpretes anteriores ( por ejemplo, Cartridge BASIC tomó 40 KB). [13] Don Estridge , líder del equipo de PC de IBM , dijo: "IBM tiene un BASIC excelente: es bien recibido, se ejecuta rápido en computadoras mainframe y es mucho más funcional que los BASIC de microcomputadora ... Pero [su ] el número de usuarios era infinitesimal en comparación con el número de usuarios de Microsoft BASIC. Microsoft BASIC tenía cientos de miles de usuarios en todo el mundo. ¿Cómo va a discutir eso? " [14] (Consulte Microsoft BASIC para ver el historial posterior de estas diferentes implementaciones).
Muchos proveedores "discutieron con eso" y utilizaron otras empresas o escribieron a sus propios intérpretes. En septiembre de 1978, Shepardson Microsystems estaba terminando Cromemco 16K Structured BASIC para las máquinas de bus Cromemco S-100 basadas en Z80 . [15] [16] Paul Laughton y Kathleen O'Brien crearon Atari BASIC [17] como esencialmente una versión reducida de Cromemco BASIC portado al 6502. [18] En 1979, Warren Robinett desarrolló el cartucho de programación BASIC para Atari , Inc. , aunque solo admitía programas con 9 líneas de código (64 caracteres en total). También en 1979, Texas Instruments lanzó TI-BASIC con su TI-99/4 , que vendería cerca de 3 millones de sistemas cuando se renovara como TI-99 / 4A. Sinclair BASIC fue desarrollado para el ZX-80 por John Grant y Steve Vickers de Nine Tiles. En 1980, Sophie Wilson de Acorn Computers desarrolló Atom BASIC , que luego evolucionó a BBC BASIC , uno de los primeros intérpretes en ofrecer programación BASIC estructurada, con procedimientos y funciones con nombre / , bucles y estructuras inspiradas en COMAL . [19] [20] Jan Jones desarrolló SuperBASIC , otra programación estructurada de soporte de BASIC británico, para Sinclair QL . En 1983, Randall Hyde desarrolló SmartBASIC para Coleco Adam . [21] Richard Clayton, Chris Hall y Paul Overell desarrollaron Mallard BASIC para BBC Micro y Locomotive BASIC para Amstrad CPC , ambos compatibles con comandos para un sistema de archivos indexado ISAM . [22] En 1985, MetaComCo lanzó ABasiC para Amiga y ST BASIC para Atari ST . DEF PROC
DEF FN
REPEAT UNTIL
IF THEN ELSE
En 1978, David Lien publicó la primera edición de The BASIC Handbook: An Encyclopedia of the BASIC Computer Language , que documenta palabras clave en más de 78 computadoras diferentes. En 1981, la segunda edición documentó palabras clave de más de 250 computadoras diferentes, mostrando el crecimiento explosivo de la era de las microcomputadoras. [23]
Intérpretes como aplicaciones
Con el auge de los sistemas operativos de disco y las posteriores interfaces gráficas de usuario , los intérpretes BASIC se convirtieron en una sola aplicación entre muchas, en lugar de proporcionar la primera indicación que un usuario podría ver al encender una computadora.
En 1983, debutó la computadora portátil TRS-80 Modelo 100 , con su implementación Microsoft BASIC digna de mención por dos razones. Primero, los programas se editaron usando el editor de texto simple, TEXT, en lugar de escribir línea por línea (pero los números de línea aún eran necesarios). [24] En segundo lugar, este fue el último producto de Microsoft que Bill Gates desarrolló personalmente. [25] [26]
También en 1983, Microsoft comenzó a empaquetar GW-BASIC con DOS. Funcionalmente idéntico a IBM BASICA , su intérprete BASIC era un ejecutable totalmente autónomo y no necesitaba la ROM CASSETTE BASIC que se encuentra en la IBM PC original . Según Mark Jones Lorenzo, dado el alcance del lenguaje, "GW-BASIC es posiblemente el ne plus ultra de la familia de BASIC numerados en línea de Microsoft que se remonta al Altair, y quizás incluso del BASIC numerado en línea en general". [27] Con el lanzamiento de MS-DOS 5.0, QBasic ocupó el lugar de GW-BASIC .
MacBASIC presentó un entorno de desarrollo totalmente interactivo para la computadora Macintosh original y fue desarrollado por Donn Denman, [28] Marianne Hsiung, Larry Kenyon y Bryan Stearns. [29] MacBASIC fue lanzado como software beta en 1985 y fue adoptado para su uso en lugares como el departamento de informática de Dartmouth College , para su uso en un curso de introducción a la programación. Estaba condenado a ser el segundo BASIC desarrollado por Apple asesinado a favor de un BASIC de Microsoft. En noviembre de 1985, Apple terminó abruptamente el proyecto como parte de un acuerdo con Microsoft para extender la licencia de BASIC en Apple II . [30] [31]
Los intérpretes BASIC no fueron solo un desarrollo estadounidense / británico. En 1984, Hudson Soft lanzó Family BASIC en el mercado japonés para la consola de videojuegos Family Computer de Nintendo, una implementación de solo enteros diseñada para programación de juegos, basada en Hudson Soft BASIC para Sharp MZ80 (con palabras clave en inglés). [32] Turbo-Basic XL es un superconjunto compatible de Atari BASIC, desarrollado por Frank Ostrowski y publicado en la edición de diciembre de 1985 de la revista informática alemana Happy Computer , lo que lo convierte en uno de los últimos intérpretes publicados como programa de mecanografía . El lenguaje incluía un compilador además del intérprete y presentaba comandos de programación estructurados. Otros autores publicaron varias versiones modificadas que funcionan con diferentes sistemas DOS. En Francia, François Lionet y Constantin Sotiropoulos desarrollaron dos intérpretes BASIC con un enfoque en multimedia: STOS BASIC para el Atari ST , en 1988, [33] y AMOS BASIC para el Amiga , en 1990.
En mayo de 1991, Microsoft lanzó Visual Basic , un lenguaje de programación impulsado por eventos de tercera generación conocido por su modelo de programación Component Object Model (COM). [34] Visual Basic apoyó el desarrollo rápido de aplicaciones (RAD) de la interfaz gráfica de usuario (GUI) de aplicaciones, acceso a bases de datos utilizando Data Access Objects , Objetos de datos remotos , o de objetos de datos ActiveX , y la creación de ActiveX controles y objetos. Visual Basic se utilizó para desarrollar aplicaciones internas propietarias, así como aplicaciones publicadas.
BÁSICOS de nicho
En 1993, Microsoft lanzó Visual Basic para Aplicaciones , un lenguaje de secuencias de comandos para aplicaciones de Microsoft Office , que reemplaza y amplía las capacidades de los lenguajes de programación de macros específicos de aplicaciones anteriores , como WordBASIC de Word (que se había introducido en 1989).
En 1996, Microsoft lanzó VBScript como una alternativa a JavaScript para agregar funcionalidad interactiva del lado del cliente a las páginas web vistas con Internet Explorer . [35]
En 1999, Benoît Minisini lanzó Gambas como una alternativa para los desarrolladores de Visual Basic que habían decidido migrar a Linux . [36]
En 2000, Lee Bamber y Richard Vanner lanzaron DarkBASIC , un sistema de creación de juegos para Microsoft Windows , con IDE y herramientas de desarrollo. [37]
En 2001, SmallBASIC fue lanzado para Palm PDA . [38] Otro intérprete de BASIC para Palm fue HotPaw BASIC, una rama de Chipmunk Basic .
En 2002, Emmanuel Chailloux, Pascal Manoury y Bruno Pagano publicaron un Tiny BASIC como ejemplo de desarrollo de aplicaciones con Objective Caml . [39]
En 2011, Microsoft lanzó Small Basic (distinto de SmallBASIC), junto con un plan de estudios de enseñanza [40] y una guía introductoria, [41] diseñada para ayudar a los estudiantes que han aprendido lenguajes de programación visual como Scratch a aprender programación basada en texto. [42] El IDE asociado proporciona un entorno de programación simplificado con funciones como resaltado de sintaxis , finalización inteligente de código y acceso a la documentación en el editor. [43] El idioma tiene solo 14 palabras clave. [44] En 2019, Microsoft anunció Small Basic Online (SBO), que permite a los estudiantes ejecutar programas desde un navegador web . [45] [46]
En 2014, Robin H. Edwards lanzó Arduino BASIC para Arduino , y ahora es una implementación ampliamente bifurcada. [47] Otra implementación que usa el mismo nombre fue adaptada de Palo Alto Tiny BASIC en 1984 por Gordon Brandly para su 68000 Tiny BASIC, luego portado a C por Mike Field. [48]
Muchos intérpretes de BASIC ahora están disponibles para teléfonos inteligentes y tabletas a través de la App Store de Apple o la tienda de Google Play para Android.
Hoy en día, la codificación de intérpretes BASIC se ha convertido en parte del hobby de la retrocomputación . Los lenguajes de programación de nivel superior en sistemas con amplia RAM han simplificado la implementación de intérpretes BASIC. Por ejemplo, la administración de líneas es simple si su lenguaje de implementación admite matrices dispersas , la administración de variables es simple con matrices asociativas y la ejecución del programa es fácil con funciones de evaluación . Como ejemplos, vea el proyecto de código abierto Vintage BASIC, escrito en Haskell [49] o el OCaml Tiny BASIC .
Ventas y distribuciones
Inicialmente, los intérpretes se incluían con hardware de computadora o se desarrollaban como un servicio personalizado, antes de que surgiera una industria que producía software empaquetado de forma independiente para organizaciones a fines de la década de 1960. [50] Los intérpretes BASIC se vendieron primero por separado de las microcomputadoras, luego se incorporaron, antes de volver a venderse como aplicaciones en la era de DOS.
Año | Medios de comunicación | Ejemplo |
---|---|---|
1975 | Cinta de papel | Altair BASIC |
1975 | Programa de escritura | Tiny BASIC Extendido |
1976 | Cinta de casete | Apple I BÁSICO |
1977 | ROM de disquete | MICRO BÁSICO |
1977 | ROM | Entero BÁSICO |
1983 | Disco flexible | GW-BÁSICO |
1995 | CD ROM | Visual Basic 4.0 |
2008 | Tienda de aplicaciones | Varios |
A medida que el mercado se desplazó hacia las ROM, el tamaño de las ROM llegó a dominar las decisiones sobre el tamaño que podía tener un intérprete BASIC. Debido a que la RAM se vendió como chips de 4 KB, Altair BASIC se empaquetó inicialmente en ediciones separadas para 4K, 8K y 12K; esto se trasladó a los chips ROM, ya que los fabricantes decidirían cuántos chips ROM podrían incluir en su diseño, dados los objetivos de precio y otras limitaciones.
Compiladores vs. intérpretes
Aspecto | Compilador | Interprete |
---|---|---|
Optimizado para | Actuación | Uso de memoria |
Velocidad de ejecución | Más rápido | Más lento |
Uso de memoria | Más alto | Más bajo |
Almacenamiento secundario | Requerido | Opcional |
Comprobación de errores | Antes de la ejecución | Durante la ejecución |
Código fuente | No incrustado en ejecutable | Requerido para ejecutar |
La primera implementación de BASIC, Dartmouth BASIC , fue un compilador. Generalmente, los compiladores examinan todo el programa en un proceso de varios pasos y producen un segundo archivo que se puede ejecutar directamente en el lenguaje de máquina subyacente de la computadora host sin referencia al código fuente. Este código a menudo se compone de llamadas a rutinas escritas previamente en el sistema de ejecución del lenguaje . El ejecutable normalmente será más pequeño que el código fuente que lo creó.
La principal desventaja de los compiladores, al menos en el contexto histórico, es que requieren una gran cantidad de memoria temporal. A medida que el compilador funciona, está produciendo un archivo de salida en constante crecimiento que se guarda en la memoria junto con el código fuente original. La memoria adicional para búsquedas temporales, en particular los números de línea en el caso de BASIC, se suma al requisito de memoria. Las computadoras de la época tenían muy poca memoria; en términos modernos, un mainframe típico podría tener del orden de 64 KB. En un sistema de tiempo compartido, el caso de la mayoría de los BASIC de la década de 1960, esa memoria se compartía entre muchos usuarios.
Para que un compilador funcione, los sistemas tenían que tener algún tipo de almacenamiento secundario de alto rendimiento , normalmente un disco duro . La edición del programa se llevó a cabo en un entorno dedicado que escribió el código fuente del usuario en un archivo temporal. Cuando el usuario ejecutó el programa, el editor salió y ejecutó el compilador, que leyó ese archivo y produjo el código ejecutable, y finalmente el compilador salía y ejecutaba el programa resultante. Dividir la tarea de esta manera redujo la cantidad de memoria necesaria para cualquiera de las partes del sistema BASIC general; en un momento dado, solo se tenía que cargar el editor, el compilador o el tiempo de ejecución, el resto estaba almacenado.
Mientras que los mainframes tenían pequeñas cantidades de memoria, las minicomputadoras tenían cantidades aún más pequeñas: los sistemas de 4 y 8 KB eran típicos en la década de 1960. Pero lo que es mucho más importante, las miniordenadores tienden a carecer de cualquier forma de almacenamiento de alto rendimiento; la mayoría de los primeros diseños utilizaban cinta perforada como sistema de almacenamiento primario, y los sistemas de cinta magnética estaban destinados a la alta gama del mercado. En este entorno, un sistema que escribiera la fuente, la compilara y luego ejecutara el resultado hubiera tomado minutos. Debido a estas limitaciones, proliferaron los intérpretes.
En última instancia, los intérpretes realizan las mismas tareas básicas que los compiladores, leyendo el código fuente y convirtiéndolo en instrucciones ejecutables que llaman a funciones en tiempo de ejecución. La principal diferencia es cuando realizan las diversas tareas. En el caso de un compilador, todo el código fuente se convierte durante lo que el usuario ve como una sola operación, mientras que un intérprete convierte y ejecuta la fuente una declaración a la vez. El código de máquina resultante se ejecuta, en lugar de la salida, y luego ese código se descarta y el proceso se repite con la siguiente instrucción. Esto prescinde de la necesidad de algún tipo de almacenamiento secundario mientras se crea un ejecutable. La principal desventaja es que ya no puede dividir las diferentes partes del proceso en general; el código necesario para convertir la fuente en operaciones de la máquina debe cargarse en la memoria junto con el tiempo de ejecución necesario para realizarlo y, en la mayoría de los casos, el código editor de código fuente también.
Producir un lenguaje con todos estos componentes que pueda caber en una pequeña cantidad de memoria y aún tenga espacio para el código fuente del usuario es un gran desafío, pero elimina la necesidad de almacenamiento secundario y fue la única solución práctica para las primeras miniordenadores y la mayoría de la historia de la revolución de las computadoras domésticas .
Desarrollo
Diseño de lenguaje
El diseño del lenguaje para los primeros intérpretes a menudo implicaba simplemente hacer referencia a otras implementaciones. Por ejemplo, las referencias de Wozniak para BASIC eran un manual de HP BASIC y una copia de 101 BASIC Computer Games . Basado en estas fuentes, Wozniak comenzó a esbozar una tabla de sintaxis para el idioma. [51] No sabía que el BASIC de HP era muy diferente de la variedad DEC BASIC utilizada en 101 Juegos . Los dos lenguajes diferían principalmente en términos de manejo de cadenas y estructuras de control. [52] Data General Business Basic , una implementación de solo enteros, fue la inspiración para Atari BASIC. [53]
Por el contrario, Dennis Allison , miembro de la facultad de Ciencias de la Computación de la Universidad de Stanford , escribió una especificación para una versión simple del lenguaje. [54] A Allison le instó a crear el estándar por Bob Albrecht del Homebrew Computer Club , quien había visto BASIC en miniordenadores y sintió que sería la combinación perfecta para nuevas máquinas como Altair. El diseño propuesto por Allison solo usaba aritmética de números enteros y no admitía arreglos o manipulación de cadenas. El objetivo era que el programa quepa en 2 a 3 kilobytes de memoria. El diseño general de Tiny BASIC se publicó en la edición de septiembre de 1975 del boletín informativo People's Computer Company (PCC).
La gramática se enumera a continuación en forma Backus – Naur . [55] En la lista, un asterisco (" *
") denota cero o más del objeto a su izquierda - excepto por el primer asterisco en la definición de " term
", que es el operador de multiplicación; objetos de grupo de paréntesis; y un épsilon (" ε
") significa el conjunto vacío. Como es común en la notación gramatical del lenguaje de computadora, la barra vertical (" |
") distingue alternativas, al igual que la lista en líneas separadas. El símbolo " CR
" denota un retorno de carro .
línea :: = instrucción numérica CR | declaración CR declaración :: = IMPRIMIR expr-lista SI expresión oprel expresión ENTONCES declaración GOTO expresión ENTRADA var-list LET var = expresión GOSUB expresión RETORNO BORRAR LISTA RUN END expr-list :: = ( cadena | expresión ) ( , ( cadena | expresión ) ) * lista-var :: = var ( , var ) * expresión :: = ( + | - | ε ) término (( + | - ) término ) * término :: = factor (( * | / ) factor ) * factor :: = var | numero | ( expresión ) var :: = A | B | C ... | Y | Z número :: = dígito dígito * dígito :: = 0 | 1 | 2 | 3 | ... | 8 | 9 relop :: = < ( > | = | ε ) | > ( <| = | ε ) | =
Esta sintaxis, tan simple como era, agregó una innovación: GOTO
y GOSUB
podría tomar una expresión en lugar de un número de línea, proporcionando un GOTO [56] asignado en lugar de la instrucción switch de la ON-GOTO/GOSUB
estructura más típica de BASIC.
Sinclair BASIC utilizó como definición de lenguaje el estándar mínimo BASIC del Instituto Nacional de Estándares Estadounidenses (ANSI) de 1978 , pero en sí mismo era una implementación incompleta con aritmética de enteros únicamente. [57] El estándar ANSI se publicó después del diseño de la primera generación de intérpretes para microcomputadoras.
Arquitectura
Componentes comunes de un intérprete BASIC: [58]
- Manejo de E / S e interrupciones
- Teclado y pantalla
- Entrada / salida de archivos (si corresponde)
- Editar rutinas
- Línea de comando
- Edición y almacenamiento de programas
- Rutinas de ejecución
- Análisis e interpretación
- Paquete aritmético
- Gestión de la memoria
- Tabla de símbolos (si existe)
- Recolección de basura (si corresponde)
Codificación
Las primeras microcomputadoras carecían de herramientas de desarrollo y los programadores desarrollaban su código en minicomputadoras o manualmente. Por ejemplo, Dick Whipple y John Arnold escribieron Tiny BASIC Extended directamente en código máquina, usando octal . [59] Robert Uiterwyk escribió a mano MICRO BASIC para el SWTPC (un sistema 6800 ) en un bloc de notas . [60] Steve Wozniak escribió el código en Integer BASIC a mano, traduciendo las instrucciones del código ensamblador a sus equivalentes de código máquina y luego cargando el resultado en su computadora. [61] (Debido a esto, el programa fue muy difícil de cambiar, y Wozniak no pudo modificarlo lo suficientemente rápido para Steve Jobs , quien posteriormente obtuvo la licencia de BASIC de Microsoft. [62] )
Gates y Allen no tenían un sistema Altair para desarrollar y probar a su intérprete. Sin embargo, Allen había escrito un emulador Intel 8008 para su empresa anterior, Traf-O-Data , que se ejecutaba en una computadora de tiempo compartido PDP-10 . Allen adaptó este emulador basándose en la guía del programador de Altair, y desarrollaron y probaron el intérprete en el PDP-10 de Harvard. [63] Cuando Harvard detuvo el uso de este sistema, Gates y Allen compraron tiempo de computadora de un servicio de tiempo compartido en Boston para completar la depuración de su programa BASIC. Gates afirmó, en su Carta abierta a los aficionados en 1976, el valor del tiempo de la computadora durante el primer año de desarrollo de software fue de $ 40,000. [64]
No es que Allen no pudiera codificar manualmente en lenguaje de máquina. Durante la aproximación final al aeropuerto de Albuquerque en un viaje para demostrar al intérprete, Allen se dio cuenta de que se había olvidado de escribir un programa de arranque para leer la cinta en la memoria. Al escribir en lenguaje de máquina 8080, Allen terminó el programa antes de que aterrizara el avión. Solo cuando cargó el programa en un Altair y vio un mensaje preguntando por el tamaño de la memoria del sistema, supo que el intérprete trabajaba en el hardware de Altair. [65] [66]
Una de las versiones más populares de Tiny BASIC fue Palo Alto Tiny BASIC, o PATB para abreviar. PATB apareció por primera vez en la edición de mayo de 1976 de Dr. Dobbs , escrito en un lenguaje ensamblador personalizado con mnemónicos no estándar. Li-Chen Wang había codificado a su intérprete en un sistema de tiempo compartido con un ensamblador genérico.
Una excepción al uso del ensamblaje fue el uso de ALGOL 60 para el intérprete de Paisley XBASIC para los sistemas grandes de Burroughs . [67] Otra excepción, y programa de mecanografía , fue Classic BASIC, escrito por Lennart Benschop en Forth y publicado en la revista holandesa Forth Vijgeblad (número 42, 1993). [68]
El código fuente de los intérpretes era a menudo de código abierto (como con Tiny BASIC) o publicado posteriormente por los autores. El código fuente anotado completo y las especificaciones de diseño de Atari BASIC se publicaron como The Atari BASIC Source Book en 1983. [69]
Maquinas virtuales
Algunos intérpretes de BASIC se codificaron en la representación intermedia de una máquina virtual para agregar una capa de abstracción y concisión por encima del lenguaje de máquina nativo .
Dialecto de BASIC | Lenguaje de la máquina virtual | Máquina nativa |
---|---|---|
Diminuto BÁSICO | Tiny BASIC Intermediate Language (TBIL) | 6800 |
NIBL | Lenguaje intermedio (IL) | SC / MP |
TI BÁSICO | Lenguaje de programación de gráficos (GPL) | TMS9900 |
Si bien las máquinas virtuales se habían utilizado en sistemas de compilación y ejecución como BASIC-PLUS , estas eran solo para ejecutar código BASIC, no para analizarlo. [70] Tiny BASIC, por el contrario, fue diseñado para ser implementado como una máquina virtual que analizaba y ejecutaba (interpretaba) declaraciones BASIC; en tal implementación, el intérprete Tiny BASIC se ejecuta en un intérprete de máquina virtual. [71] La longitud de todo el programa del intérprete fue de solo 120 operaciones de máquina virtual, que constan de 32 comandos. [72] Por lo tanto, la elección de un enfoque de máquina virtual economizó espacio de memoria y esfuerzo de implementación, aunque los programas BASIC que se ejecutan en él se ejecutaron con cierta lentitud. (Consulte Tiny BASIC: Implementación en una máquina virtual para obtener un extracto y comandos de muestra). Si bien la intención del diseño era que Tiny BASIC usara una máquina virtual, no todas las implementaciones lo hicieron; los que sí incluyeron Tiny BASIC Extended, 6800 Tiny BASIC, [73] y NIBL.
Para su TI-99 , Texas Instruments diseñó una máquina virtual con un lenguaje llamado GPL, para "Lenguaje de programación gráfica". [74] (Aunque se le atribuye ampliamente el rendimiento lento de TI-BASIC , parte del problema era que la máquina virtual estaba almacenada en una ROM gráfica, que tenía una interfaz lenta de 8 bits). [75]
Un malentendido de las ROM de Apple II llevó a algunos a creer que Integer BASIC usaba una máquina virtual, un lenguaje ensamblador personalizado contenido en las ROM de Apple y conocido como SWEET16 . SWEET16 se basa en códigos de bytes que se ejecutan dentro de una máquina virtual simple de 16 bits, por lo que la memoria podría direccionarse a través de punteros indirectos de 16 bits y funciones matemáticas de 16 bits calculadas sin la necesidad de traducirlas a la multiinstrucción subyacente de 8 bits 6502 código. [76] Sin embargo, SWEET16 no fue usado por el código básico BASIC, aunque luego fue usado para implementar varias utilidades, como una rutina de renumeración de línea. [77]
Edición y almacenamiento de programas
Edición de programas
La mayoría de las implementaciones BASIC de la época actuaban tanto como intérpretes de idiomas como como editor de líneas . Cuando BASIC se estaba ejecutando, se mostraba un >
símbolo del sistema donde el usuario podía ingresar declaraciones. [78] Esto se conoció como " modo directo ". Al arrancar, un intérprete de BASIC pasó por defecto al modo directo.
Las declaraciones que se ingresaron con números iniciales se ingresan en el almacenamiento del programa para "ejecución diferida", [79] ya sea como nuevas líneas o reemplazando cualquiera que pueda haber tenido el mismo número anteriormente. [80] Las declaraciones que se ingresaron sin un número de línea se denominaron comandos y se ejecutaron de inmediato. Los números de línea sin declaraciones (es decir, seguidos de un retorno de carro ) eliminaron una línea almacenada previamente.
Cuando un programa estaba presente en la memoria y el usuario escribe el RUN
comando, el sistema entra en "modo indirecto". En este modo, se establece un puntero para apuntar a la primera línea del programa, por ejemplo, la línea 10. El texto original de esa línea se recupera de la tienda y se ejecuta como si el usuario lo acabara de escribir en modo directo. Luego, el puntero avanza a la siguiente línea y el proceso continúa.
Las diferentes implementaciones ofrecieron otras capacidades de edición de programas. Altair BASIC 8K tenía un EDIT
comando para cambiar a un modo de edición para una línea. Integer BASIC, también incluyó el AUTO
comando para ingresar automáticamente números de línea en un número inicial dado AUTO 100
, como , agregando 10 al último número con cada nueva línea. AUTO 300,5
comenzaría a numerar en la línea 300 de cinco en cinco; 300, 305, etc. La numeración automática se desactivó ingresando MAN
. [81] Algunos intérpretes ofrecían comandos o utilidades para cambiar la numeración de líneas.
Tokenización y codificación de líneas
Para ahorrar RAM y acelerar la ejecución, todos los intérpretes BASIC codificarían algunos caracteres ASCII de líneas en otras representaciones. Por ejemplo, los números de línea se convirtieron en enteros almacenados como bytes o palabras , y a las palabras clave se les podrían asignar tokens de un solo byte (por ejemplo, almacenar PRINT
como el valor de byte 145, en MS-BASIC). Estas representaciones luego se convertirían de nuevo a texto legible cuando se LIST
ejecutara el programa.
Dialecto de BASIC | Línea de números | Palabras clave | Constantes numéricas | Nombres de variables |
---|---|---|---|---|
Diminuto BÁSICO | sí | No | No | No |
Altair BASIC | sí | sí | No | No |
Entero BÁSICO | sí | sí | sí | No |
Atari BASIC | sí | sí | sí | sí |
Abreviaturas
Como alternativa a la tokenización, para ahorrar RAM, las primeras implementaciones de Tiny BASIC como Extended Tiny BASIC, [82] Denver Tiny BASIC [83] y MINOL [84] truncaron palabras clave: PR
for PRINT
, IN
for INPUT
, RET
for RETURN
. No se aceptaron las palabras clave tradicionales completas.
Por el contrario, Palo Alto Tiny BASIC aceptaba palabras clave tradicionales pero permitía que cualquier palabra clave se abreviara a su cadena única mínima, con un punto final. Por ejemplo, PRINT
podría escribirse P.
, aunque PR.
también funcionaron otras variaciones. Este sistema se mantuvo en el Nivel I BÁSICO para el TRS-80 , que usaba PATB, y también se encontró en Atari BÁSICO y el BÁSICO de varias computadoras de bolsillo Sharp . [85]
Para expandir una abreviatura, el tokenizador Atari BASIC busca en su lista de palabras reservadas para encontrar la primera que coincida con la porción suministrada. Los comandos más utilizados aparecen primero en la lista de palabras reservadas, con REM
al principio (se puede escribir como .
). Cuando el programa se LIST
edita más tarde, normalmente escribirá las palabras completas. MS BASIC también se permitió ?
como una forma abreviada de PRINT
, pero lo expandió al incluirlo, tratándolo como una abreviatura, no como un sinónimo.
Tokenización
La mayoría de los intérpretes de BASIC realizan al menos alguna conversión del formato de texto original a varios formatos específicos de la plataforma. Tiny BASIC estaba en el extremo simple: solo convertía el número de línea de su formato decimal a binario. Por ejemplo, el número de línea "100" se convirtió en un valor de un solo byte, $ 64, lo que lo hace más pequeño para almacenarlo en la memoria y más fácil de buscar en el código de máquina (algunos diseños de Tiny BASIC permitían números de línea de solo 1 a 254 o 255, aunque la mayoría usa valores de doble byte y números de línea de al menos 1 a 999). El resto de la línea se dejó en su formato de texto original. [86] De hecho, Dennis Allison argumentó que, dadas las limitaciones de memoria, la tokenización requeriría más código para implementar de lo que ahorraría. [87]
MS-BASIC fue un poco más allá, convirtiendo el número de línea en un valor de dos bytes y también convirtiendo palabras clave, como FOR
o PRINT
, en un valor de un solo byte, el "token". [88] La tokenización de Microsoft BASIC no tokenizaba espacios (por ejemplo, PRINTA
se almacenó en dos bytes, mientras que PRINT A
se almacenó en tres bytes); en contraste, Sinclair BASIC mostró un espacio después de cada palabra clave tokenizada, produciendo un código más legible. En MS BASIC, para una declaración como 20 GOTO 100
, el número de línea 20
y GOTO
sería tokenizado, [89] mientras que 100
se dejó en su formato original y tuvo que volver a analizarse en un entero de 16 bits cada vez que se encontrara la línea. [90]
Por el contrario, Integer BASIC convertiría la línea por 20 GOTO 100
completo en tokens que podrían leerse y ejecutarse de inmediato. Donde Microsoft BASIC tenía un token para la palabra clave PRINT
, Integer BASIC tenía tres tokens: uno si la palabra clave no iba seguida de argumentos, uno si seguía una expresión aritmética y otro si seguía una cadena literal. [91] Dado que Integer BASIC procesó más del código fuente original en tokens, el tiempo de ejecución fue más rápido que las versiones que requerían un análisis de tiempo de ejecución adicional. Los literales numéricos, como el valor 500, se convirtieron en su representación binaria de 16 bits (dos bytes), en este caso, $ 01F4 hexadecimal . Para indicar que se trataba de un valor y no de una palabra clave, se insertó un solo byte entre $ B0 y $ B9 delante del valor de dos bytes. En cambio, los literales de cadena, como "HELLO WORLD", se codificaron estableciendo el bit alto de cada carácter para que A
se almacenara como $ C1. Los nombres de las variables se convirtieron de la misma manera, con las letras codificadas para tener su bit alto activado y cualquier dígito en el nombre representado por los correspondientes $ B0 a $ B9, de modo que la variable A5
se codificaría como $ C1B5 (no reducido a una ficha). [92]
Llevando esto aún más lejos, el tokenizador de Atari BASIC analiza toda la línea cuando se ingresa o se modifica. Las constantes numéricas se analizan en su forma interna de 40 bits y luego se colocan en la línea en ese formato, mientras que las cadenas se dejan en su formato original, pero con el prefijo de un byte que describe su longitud. Las variables tienen almacenamiento reservado a medida que se encuentran y su nombre se reemplaza con un puntero a su ubicación de almacenamiento en la memoria. Shepardson se refirió a este concepto de tokenización temprana como un "intérprete de compilación previa"; En realidad, las declaraciones con errores de sintaxis no se podían almacenar y se solicitaba inmediatamente al usuario que las corrigiera. [93]
Tokenización en el teclado
Algunos intérpretes, como los sistemas Bally Astrocade y Sinclair, básicamente hicieron que el usuario hiciera la tokenización proporcionando combinaciones de teclas para ingresar palabras reservadas. Los comandos más comunes solo necesitan una pulsación de tecla; por ejemplo, presionar solo Pal comienzo de una línea en un Spectrum produce el comando completo PRINT
. Los comandos menos frecuentes requieren secuencias de teclas más complejas: BEEP
(por ejemplo) se ingresa presionando CAPS SHIFTmás SYMBOL SHIFTpara acceder al modo extendido (los modelos posteriores incluyen una EXTENDED MODEtecla), manteniéndolo SYMBOL SHIFTpresionado y presionando Z. Las palabras clave están codificadas por colores en el teclado Spectrum original para indicar qué modo se requiere: [94]
- Blanco : solo llave
- Rojo en la propia llave: SYMBOL SHIFTmás la llave
- Verde sobre la tecla: EXTENDED MODEseguido de la tecla
- Rojo debajo de la tecla: EXTENDED MODEseguido de SYMBOL SHIFTmás la tecla
El intérprete BASIC podría determinar rápidamente cualquier comando o función evaluando un byte (la palabra clave token). Dado el requisito sintáctico de que cada línea comience con una palabra clave de comando (por ejemplo, LET
no es opcional), presionar una tecla para un comando al comienzo de una línea cambia el editor del modo de comando al modo de letra. La tokenización en el teclado significaba que las palabras clave no eran palabras reservadas como en otros dialectos BÁSICOS, por ejemplo, se permite definir una variable nombrada PRINT
y generar su valor PRINT PRINT
.
Manejo de linea
Distancia | Dialecto |
---|---|
1 hasta 254 | MINOL |
1 hasta 255 | Pequeña nota de diseño BÁSICA |
2 hasta 255 | Denver Tiny BÁSICO |
0 hasta 999 | UIUC BÁSICO |
1 hasta 2045 | DEC BÁSICO-8 |
0 hasta 32767 | LLL BÁSICO, NIBL |
1 hasta 32767 | Apple I BÁSICO , Nivel I BÁSICO , Palo Alto Tiny BÁSICO |
1 hasta 65535 | Altair 4K BÁSICO , MICRO BÁSICO 1.3, 6800 Tiny BÁSICO, Tiny BÁSICO Extendido |
1 hasta 99999 | Dartmouth BÁSICO |
1 al 999999 | ESCELBAL |
Los números de línea válidos variaron de una implementación a otra, pero normalmente fueron de 1 a 32767.
La mayor parte de la memoria utilizada por los intérpretes de BASIC era para almacenar la lista de programas en sí. Las declaraciones numeradas se almacenaron en orden secuencial en una matriz dispersa implementada como una colección lineal (técnicamente no es una lista, ya que ningún número de línea puede aparecer más de una vez).
Muchas implementaciones de Tiny BASIC almacenaron líneas de la siguiente manera:
- Equivalente binario del número de línea (uno o dos bytes, según el rango de números de línea válidos admitidos)
- Declaración fuente ASCII (longitud variable)
- Retorno de carro (un byte, establecido en 13)
Microsoft BASIC, comenzando con Altair BASIC, almacenó líneas de la siguiente manera: [95]
- Puntero a la siguiente línea (dos bytes)
- Equivalente binario del número de línea (dos bytes, sin firmar)
- Declaración de origen tokenizada (longitud variable)
- Nulo (un byte, establecido en 0)
LLL BÁSICO: [96]
- Equivalente binario del número de línea (dos bytes)
- Reenviar el puntero a la siguiente línea secuencial (dos bytes)
- Longitud de la declaración de origen ASCII (un byte)
- Declaración fuente ASCII (longitud variable)
La longitud máxima de una línea variaba: 64 caracteres en Palo Alto Tiny BASIC, incluida la representación decimal del número de línea; 120 caracteres en Atari BASIC; 128 caracteres en Integer BASIC; [97] y 255 caracteres en MS-BASIC (sin incluir el número de línea).
Los intérpretes buscarían en el programa una línea a la vez, mirando cada número de línea. Si fuera menor que el número de la nueva línea, las últimas líneas se moverían en la memoria para dejar espacio para el espacio requerido para la nueva línea. Si fuera el mismo número de línea, y no exactamente la misma longitud, las líneas siguientes deberían moverse hacia adelante o hacia atrás. [98] (Debido a que el orden secuencial siempre se mantuvo en la memoria, estas no eran listas enlazadas ).
En Tiny BASIC, estas búsquedas requerían verificar cada byte en una línea: el puntero se incrementaría una y otra vez hasta que se encontrara un retorno de carro, para encontrar el byte antes de la siguiente línea. En Altair BASIC y LLL BASIC, por otro lado, el puntero se establecería en su lugar al comienzo de la siguiente línea secuencial; esto fue mucho más rápido, pero requirió dos bytes por línea. Dado que se suponía que los programas Tiny BASIC tenían un tamaño de 4 KB o menos, esto estaba en consonancia con la filosofía de diseño general de Tiny BASIC de compensar el rendimiento a favor de minimizar el uso de la memoria.
Cuando el usuario escribía LIST
en la línea de comando, el sistema recorría la matriz de líneas, usando uno de estos métodos, convertía el número de línea a formato decimal y luego imprimía el resto del texto en la línea, decodificando cualquier token. u otras representaciones codificadas.
A medida que los desarrolladores agregaron construcciones de programación estructurada a BASIC, a menudo eliminaron la necesidad de números de línea por completo y agregaron editores de texto y, más tarde, entornos de desarrollo integrados .
Variables y tipos de datos
Nombres de variables
Dartmouth BASIC y HP-BASIC limitaron los nombres de las variables a un máximo de dos caracteres (una sola letra o una letra seguida de un dígito; por ejemplo, de la A a la Z9). MS-BASIC permitía nombres de variable de una letra seguida de una letra o dígito opcional (p. Ej., De la A a la ZZ) pero ignoraba los caracteres siguientes: así era posible escribir inadvertidamente un programa con las variables "LOSS" y "LOAN", que serían tratado como si fuera el mismo; asignar un valor a "PRÉSTAMO" sobrescribiría silenciosamente el valor previsto como "PÉRDIDA".
Integer BASIC era inusual al admitir cualquier nombre de variable de longitud (por ejemplo, SUM, GAMEPOINTS, PLAYER2), siempre que no contenga una palabra reservada. [99] Las palabras clave no se podían utilizar en variables en muchos de los primeros BASIC; "SCORE" se interpretaría como "SC" O "E", donde OR es una palabra clave.
Las variables de cadena generalmente se distinguen en muchos dialectos de microcomputadoras de BASIC por tener $ como sufijo en su nombre, y los valores a menudo se identifican como cadenas por estar delimitados por "comillas dobles". Las implementaciones posteriores usarían otra puntuación para especificar el tipo de una variable: A% para entero, A! para precisión simple y A # para precisión doble .
Con la excepción de matrices y (en algunas implementaciones) cadenas, ya diferencia de Pascal y otros lenguajes de programación más estructurados, BASIC no requiere que se declare una variable antes de que se haga referencia a ella. Por lo general, los valores estarán predeterminados en 0 (con la precisión adecuada) o en la cadena nula.
Tabla de símbolos
Debido a que Tiny BASIC solo usó 26 variables de una sola letra, las variables podrían almacenarse como una matriz sin almacenar sus nombres correspondientes, usando una fórmula basada en el valor ASCII de la letra como índice. Palo Alto Tiny BASIC llevó esto un paso más allá: los valores de dos bytes de las variables se ubicaron en la RAM dentro del programa, desde los bytes 130 (ASCII 65, 'A', por dos) a 181 (ASCII 90, 'Z', por dos , más uno para el segundo byte). [85]
La mayoría de los BASIC proporcionaban la capacidad de tener más de 26 variables y, por lo tanto, necesitaban tablas de símbolos , que reservarían capacidad de almacenamiento solo para las variables utilizadas.
En LLL BASIC, cada entrada en la tabla de símbolos se almacenó de la siguiente manera: [100]
- Nombre de la variable (byte 1: letra ASCII; byte 2: 0-9 ASCII o 0 binario)
- Puntero hacia adelante (2 bytes)
- Valor (4 bytes por elemento, 1 elemento si es una variable escalar, de lo contrario, tantos elementos como DIMensioned para una matriz)
A diferencia de la mayoría de los intérpretes de BASIC, UIUC BASIC tenía una función hash , hash por la letra del nombre de la variable / función / matriz, y luego realizaba una búsqueda lineal desde allí. En UIUC BASIC, una entrada de la tabla de símbolos era: [58]
- Bandera (bit 0: entrada en uso; bit 6: función definida por el usuario; bit 7: matriz}
- Nombre de variable (byte 1: letra ASCII; byte: 0-9 ASCII, "" o "(") o nombre de función (byte 1: letra ASCII o token 154 para
FN
; letra ASCII) - Valor (5 bytes):
- Valor de coma flotante para un escalar
- Definición de matriz (últimos 3 bytes: dimensión superior de la primera, segunda, tercera dimensión, se supone que todas comienzan en 0)
- Función de usuario (primeros 2 bytes con la dirección de la función; el byte 3 es el desplazamiento de la tabla de símbolos al parámetro de variable ficticia en la definición de la función).
En Atari BASIC, un conjunto de punteros (direcciones) indicaron varios datos: los nombres de las variables se almacenaron en la tabla de nombres de variables (VNTP - 82, 83 16 ) y sus valores se almacenaron en la tabla de valores de variables (señalados en VVTP - 86, 87 16 ). Direccionando indirectamente los nombres de las variables de esta manera, una referencia a una variable necesitaba solo un byte para direccionar su entrada en la tabla apropiada. Las variables de cadena tenían su propia área.
Una optimización del rendimiento de BBC BASIC incluía el uso de varias listas vinculadas para la búsqueda de variables en lugar de una sola lista larga, como en Microsoft BASIC .
Gestión de la memoria
Debido a la pequeña capacidad de RAM de la mayoría de los sistemas utilizados originalmente para ejecutar intérpretes BASIC, se tuvieron que emplear técnicas inteligentes de administración de memoria. Altair BASIC permite a los usuarios recuperar el espacio para las funciones de trigonometría si no se estaban utilizando durante una sesión. PATB colocó el inicio de las subrutinas más comunes al principio del programa para que las utilice el RST
código de operación 8080 de 1 byte en lugar del código de operación de 3 bytes CALL
. En LLL BASIC, algunas variables ocuparon las mismas ubicaciones de memoria, en los casos en que las diferentes variables se usaron solo en modo comando o solo en tiempo de ejecución. [101]
El video era a menudo direccionable por memoria, y ciertas funciones esotéricas estaban disponibles manipulando valores en valores de memoria específicos. Por ejemplo, las direcciones 32 a 35 contenían las dimensiones de la ventana de texto (a diferencia de la ventana gráfica) en Applesoft BASIC. El POKE
comando y la PEEK
función (adaptados de los monitores de código de máquina como el monitor DECsystem-10 [102] ) proporcionaron acceso directo a la memoria, para una variedad de propósitos, [103] especialmente para modificar registros especiales de hardware mapeados en memoria para controlar funciones particulares de la computadora, como los periféricos de entrada / salida. Los "mapas de memoria" (en el sentido arcaico de listas de direcciones de memoria y sus funciones) eran populares para usar con PEEK y POKE , siendo uno de los mapas de memoria más conocidos el libro Mapping the Atari , escrito por Ian Chadwick.
Matemáticas
Integer BASIC, como su nombre lo indica, usa enteros como base para su paquete matemático. Estos se almacenaron internamente como un número de 16 bits, little-endian (como es el 6502). Esto permitió un valor máximo para cualquier cálculo entre -32767 y 32767. Los cálculos que dieron como resultado valores fuera de ese rango produjeron un error. [104]
La mayoría de los intérpretes de Tiny BASIC (así como Sinclair BASIC 4K) admitían matemáticas usando solo números enteros, sin soporte de punto flotante . El uso de números enteros permitió almacenar números en un formato de 16 bits mucho más compacto que podría leerse y procesarse más rápidamente que los formatos de coma flotante de 32 o 40 bits que se encuentran en la mayoría de los BASIC de la época. Sin embargo, esto limitó su aplicabilidad como lenguaje de uso general.
Las implementaciones de Business BASIC , como Data General Business Basic , también eran solo de números enteros, pero normalmente tenían una precisión más alta: "precisión doble", es decir, 32 bits (más o menos 2.147.483.648) y "triple precisión" (más o menos 1,4x10 ^ 14).
A veces se utilizaron otros formatos de números de computadora . Por ejemplo, el MINOL Tiny BASIC solo admitía bytes sin firmar , [84] y el MICRO-BASIC Tiny BASIC usaba decimal codificado en binario . [105] Pero el punto flotante llegaría a predominar.
Punto flotante
Una historia resume por qué se consideraba tan importante el punto flotante. El prototipo original del TRS-80 Modelo I ejecutó la versión de dominio público de Tiny BASIC de Li-Chen Wang . Esto requirió solo 2 KB de memoria para el intérprete , dejando un promedio de otros 2 KB libres para los programas de usuario en diseños de memoria comunes de 4 KB de las primeras máquinas. Durante una demostración a los ejecutivos, el entonces presidente de Tandy Corporation , Charles Tandy, intentó ingresar su salario, pero no pudo hacerlo. Esto se debió a que Tiny BASIC usó números enteros con signo de 2 bytes con un valor máximo de 32,767. El resultado fue una solicitud de matemática de punto flotante para la versión de producción. [106] Esto llevó al reemplazo del código entero de 16 bits existente por una versión que usaba números de coma flotante de precisión simple de 32 bits por el empleado de Tandy Steve Leininger. [107]
SCELBAL usó rutinas de punto flotante publicadas por Wadsworth en 1975 en Machine Language Programming para el 8008 basadas en un formato de 32 bits (cuatro bytes) para cálculos numéricos, con una mantisa de 23 bits , un signo de 1 bit para la mantisa, un 7 exponente de bit y signo de 1 bit para el exponente. Estos se organizaron en orden inverso, con el byte menos significativo de la mantisa en el primer byte, seguido del byte medio y luego el byte más significativo con el signo en el bit alto. El exponente fue el último, nuevamente con el signo en el bit alto. [108] El manual proporciona un código ensamblador bien documentado para todo el paquete matemático, incluidos los puntos de entrada y las notas de uso. [109]
Por lo general, los consultores se familiarizaban con la aritmética de punto flotante , un dominio especializado bien estudiado y desarrollado para las aplicaciones científicas y comerciales que habían caracterizado a los mainframes. Cuando Allen y Gates estaban desarrollando Altair BASIC, su compañero de estudios de Harvard, Monte Davidoff, los convenció de cambiar la aritmética de números enteros . Contrataron a Davidoff para que escribiera un paquete de punto flotante que aún pudiera caber dentro de los límites de memoria de 4 KB. Steve Wozniak recurrió a Roy Rankin de la Universidad de Stanford para implementar las funciones trascendentales LOG, LOG10 y EXP; [110] sin embargo, Wozniak nunca terminó de agregar soporte de punto flotante a Integer BASIC. LLL BASIC , desarrollado en la Universidad de Idaho por John Dickenson, Jerry Barber y John Teeter, recurrió a David Mead, Hal Brand y Frank Olken por su apoyo de punto flotante. [111] Para UIUC BASIC, se obtuvo la licencia de un paquete de punto flotante Datapoint 2200 . [112]
Por el contrario, los sistemas de tiempo compartido a menudo se habían basado en hardware. Por ejemplo, el GE-235 fue elegido para implementar la primera versión de Dartmouth BASIC específicamente porque presentaba una " Unidad aritmética auxiliar " para cálculos de coma flotante y de doble precisión. [113] [114]
Los primeros intérpretes usaban formatos de 32 bits, similares al formato de punto flotante binario de precisión simple IEEE 754 , que especifica:
- Bit de signo : 1 bit
- Ancho de exponente : 8 bits
- Precisión significativa : 24 bits (23 almacenados explícitamente)
Aquí está el valor 0.15625 almacenado en este formato:
Si bien los formatos de 32 bits eran comunes en esta era, las versiones posteriores de BASIC, comenzando con Microsoft BASIC para el MOS 6502 , generalmente adoptaron un formato de 40 bits (cinco bytes) para mayor precisión. [115]
Operadores y funciones
Los operadores infijos generalmente incluyen +
(suma), -
(resta), *
(multiplicación), /
(división) y exponente usando el ^
carácter. Operaciones relativas incluyen el conjunto estándar de =
, >
, <
, >=
, <=
, y para "es igual a" o bien <>
o la HP-TSB , inspirada #
. [116] Los operadores binarios, como AND
, OR
y NOT
, no estaban en todas las implementaciones, y algunos hacían álgebra booleana y otros no.
La edición inicial de Dartmouth BASIC incluía las siguientes funciones: ABS
( valor absoluto ), ATN
( arcangente ), COS
( coseno ), EXP
( e elevado a la potencia), INT
(truncar cualquier valor fraccionario, devolviendo un entero), LOG
( logaritmo ), RND
( generador de números pseudoaleatorios ) , SIN
( seno ), SQR
( raíz cuadrada ) y TAN
( tangente ). También incluyó la DEF FN
declaración para declarar funciones de una sola línea, que luego se conoce como FNA()
, FNB()
, etc.
La RND
función era la función más extendida que se admitía en los primeros BASIC, aunque las implementaciones variaban:
- Dartmouth
RND
ignoró el parámetro y siempre devolvió un nuevo número pseudoaleatorio entre 0 y 1. - Altair BASIC y Microsoft BASIC posteriores usaron el signo del parámetro: Para RND (X), "X <0 inicia una nueva secuencia de números aleatorios usando X. Llamar a RND con la misma X inicia la misma secuencia de números aleatorios. X = 0 da el último número aleatorio generado ". [117]
- Al no poder devolver un decimal, los BASIC de solo enteros utilizaron en su lugar el valor del parámetro, normalmente para especificar un límite superior para la aleatorización; por ejemplo, en Integer BASIC en sí,
RND(6)+1
simularía una tirada de dado, devolviendo valores de 1 a 6. - Por el contrario, en algunos TRS-80 BASIC, el parámetro era el límite superior que se podía devolver; por ejemplo,
RND(6)
devolvería un valor de 1 a 6 yRND(1)
siempre devolvería 1. [118]
Matrices
La segunda versión de Dartmouth BASIC soportaba matrices y operaciones matriciales , útiles para la solución de conjuntos de ecuaciones algebraicas lineales simultáneas; MAT
Se apoyaron operaciones matriciales como asignación, suma, multiplicación (de tipos de matrices compatibles) y evaluación de un determinante.
Por el contrario, Tiny BASIC, tal como se diseñó inicialmente, ni siquiera tenía matrices, debido a la limitada memoria principal disponible en las primeras microcomputadoras , a menudo de 4 KB, que tenía que incluir tanto el intérprete como el programa BASIC. Palo Alto Tiny BASIC agregó una única matriz de números enteros de longitud variable , cuyo tamaño no tenía que ser dimensionado pero usaba RAM no usada por el intérprete o la lista de programas A()
.
SCELBAL admitía varias matrices, pero en conjunto estas matrices no podían tener más de 64 elementos. Entero BASIC admitía matrices de una sola dimensión, limitadas en tamaño solo por la memoria disponible. [119] Tiny BASIC Extended admitía matrices bidimensionales de hasta 255 por 255. Altair BASIC 4K solo admitía matrices (una dimensión) mientras que la versión 8K admitía matrices de hasta 34 dimensiones. [120]
Muchas implementaciones apoyaron la práctica BÁSICA de Dartmouth de no requerir que se dimensione una matriz, en cuyo caso se asumió que tenía 11 elementos (0 a 10); por ejemplo, {{{1}}}
crearía la matriz de 11 elementos como efecto secundario.
El vector de drogas de las matrices variaba de una implementación a otra. Por ejemplo, el vector de droga de una matriz Altair BASIC 4K: [95]
- Nombre de variable (2 bytes)
- Tamaño de los elementos de la matriz en bytes (2 bytes, es decir, 4 veces el número de elementos, que era el límite superior más uno)
Luego, la matriz se valora en sí misma:
- Valor del elemento 0 (4 bytes)
- Valor del elemento 1 (4 bytes)
- ...
- Valor del elemento N (4 bytes)
Las implementaciones que admitían matrices tenían que registrar el número de dimensiones y el límite superior de cada dimensión. Además, como algunos intérpretes tenían solo un tipo de datos (ya sea de punto flotante o entero), el vector de droga simplemente necesitaba registrar el número de dimensiones y el límite superior de cada dimensión. Los intérpretes con múltiples tipos de datos tenían que registrar el tipo de datos de la matriz.
Aunque Microsoft y otros BASIC admitían matrices, las operaciones de matriz no estaban integradas, sino que tenían que programarse explícitamente en elementos de matriz.
Instrumentos de cuerda
El Dartmouth BASIC original, algunos de sus descendientes inmediatos y las implementaciones de Tiny BASIC carecían de manejo de cadenas. Se desarrollaron dos escuelas de manejo de cuerdas en competencia, iniciadas por HP y DEC, aunque otros enfoques llegaron más tarde. Estos requirieron diferentes estrategias de implementación.
Dialecto de BASIC | Tipo | Subcadenas |
---|---|---|
BÁSICO de tiempo compartido de HP | Longitud fija | Rebanar |
DEC BASIC-PLUS | Longitud variable | Funciones |
Dartmouth BASIC cuarta edición | Longitud variable | Indexación de matrices |
Diminuto BÁSICO | Matriz de enteros | Indexación de matrices |
El manejo de cadenas más simple copió HP Time-Shared BASIC y definió las variables de cadena como matrices de caracteres que debían DIM
introducirse antes de su uso. Las cadenas en HP TSB se tratan como una matriz de caracteres, hasta 72 en total, en lugar de un solo objeto de varios caracteres. De forma predeterminada, se les asigna un carácter en la memoria y, si se necesita una cadena de mayor longitud, deben declararse. Por ejemplo, configurará una cadena que puede contener un máximo de 10 caracteres. [121]DIM A$[10]
Se accede a las subcadenas dentro de las cadenas mediante una notación de " corte ": o , donde la subcadena comienza con el carácter más a la izquierda especificado por el índice L y continúa hasta el carácter más a la derecha especificado por el índice R, o la forma donde la subcadena comienza en el carácter más a la izquierda especificado por el índice L y continúa hasta el final de la cadena. TSB acepta () o [] indistintamente. Los índices de matriz y subcadena comienzan con 1.A$(L,R)
A$[L,R]
A$[L]
Esto está en marcado contraste con BASICs siguientes el patrón de diciembre que utilizan funciones tales como LEFT$()
, MID$()
y RIGHT$()
a subcadenas de acceso. Posteriormente adoptada por ANSI BASIC, la notación de HP también se puede usar en el lado de destino de una instrucción LET
o INPUT
para modificar parte de un valor de cadena existente, por ejemplo , o , lo que no se puede hacer con implementaciones tempranas de .100 A$[3,5]="XYZ"
120 B$[3]="CHANGE ALL BUT FIRST TWO CHARS"
LEFT$/MID$/RIGHT$
Las versiones posteriores de Dartmouth BASIC incluían variables de cadena. Sin embargo, no utilizaron las LEFT$/MID$/RIGHT$
funciones para manipular cadenas, sino que utilizaron el CHANGE
comando que convertía la cadena hacia y desde valores ASCII equivalentes. (Más tarde adoptado como está por DEC y adaptado por HP, que cambió la palabra clave a CONVERT
. [121] ) Además, se podría usar la comilla simple para convertir una constante numérica en un carácter ASCII, lo que permite construir una cadena en partes ; A$='23 '64 '49 "DEF"
produjo la cadena "ABCDEF", sin la necesidad de la CHR$()
función. [121] Dartmouth BASIC Sixth Edition compatible SEG$
(para MID$
) y POS
(para INSTR
).
Integer BASIC, North Star BASIC [122] y Atari BASIC [123] imitaron el enfoque de HP, que de nuevo contrastaba con el estilo de los BASIC derivados de DEC , incluido Microsoft BASIC , donde las cadenas son un tipo intrínseco de longitud variable. [124]
Algunas de las implementaciones de Tiny BASIC admitían una o más matrices de enteros predefinidos, que podrían usarse para almacenar códigos de caracteres, siempre que el lenguaje tuviera funcionalidad para ingresar y emitir códigos de caracteres (por ejemplo, Astro BASIC tenía KP
y TV
para este propósito).
Recolección de basura
El hecho de que las cadenas utilicen una cantidad fija de memoria independientemente del número de caracteres utilizados en ellas, hasta un máximo de 255 caracteres, puede haber desperdiciado memoria [125], pero tenía la ventaja de evitar la necesidad de implementar la recolección de basura del montón , un forma de gestión automática de la memoria utilizada para recuperar la memoria ocupada por cadenas que ya no están en uso. Las cadenas cortas que se liberaron podrían almacenarse en medio de otras cadenas, evitando que esa memoria se use cuando se necesita una cadena más larga.
En las primeras microcomputadoras, con su memoria limitada y procesadores lentos, la recolección de basura BASIC a menudo podía causar pausas aparentemente aleatorias e inexplicables en medio de la operación del programa. Algunos intérpretes de BASIC, como Applesoft BASIC en la familia Apple II , escanearon repetidamente los descriptores de cadena en busca de la cadena con la dirección más alta para compactarla hacia la memoria alta, lo que resultó en un rendimiento O (n 2 ) , que podría introducir minutos de duración. hace una pausa en la ejecución de programas intensivos en cadenas. La recolección de basura era notoriamente lenta o incluso rota en otras versiones de Microsoft BASIC. [126]
Otra funcionalidad
Gráficos y sonido
La mayoría de los intérpretes de BASIC diferían ampliamente en gráficos y sonido, que variaban drásticamente de un microordenador a otro. Altair BASIC carecía de gráficos o comandos de sonido, al igual que las implementaciones de Tiny BASIC, mientras que Integer BASIC proporcionaba un conjunto rico.
El nivel I BÁSICO para el TRS-80 tenía un conjunto lo más mínimo posible:, CLS
para CLear Screen; SET(X,Y)
, que iluminó una ubicación en la pantalla; RESET(X,Y)
, que lo apagó; y POINT(X,Y)
, que devolvió 1 si una ubicación estaba iluminada, 0 si no lo estaba. Las coordenadas pueden ser cualquier expresión y varió de 0 a 127 para el eje X y de 0 a 47 para el eje Y . Solo se admitía la visualización en blanco y negro. [127]
Por el contrario, Integer BASIC admitía gráficos en color, sonido simple y controladores de juegos. El modo de gráficos se activó con la GR
declaración y se desactivó con TEXT
. [128] El dibujo era modal y normalmente se iniciaba emitiendo un comando para cambiar el color, lo cual se lograba estableciendo una pseudovariable; COLOR=12
establecería el color del dibujo en 12, verde claro. Entonces se podría PLOT 10,10
producir una sola mancha de ese color, [129] HLIN 0,39 AT 20
para dibujar una línea horizontal en la fila 20 que abarcara la pantalla, o VLIN 5,15 AT 7
para dibujar una línea vertical más corta hacia abajo de la columna 7. [130] A=SCRN X,Y
devolvió el color de la pantalla en X , Y. [131] [b]
Los fabricantes de hardware a menudo incluían soporte patentado para semigráficos , formas simples e íconos tratados como caracteres especiales . Los ejemplos incluyeron los gráficos de bloques de la ZX-81 y los símbolos de las cartas ♠, ♣, ♥ y ♦ en el juego de caracteres Commodore International PETSCII . BASIC podría generar estos símbolos usando PRINT CHR$();
.
Microsoft añadió comandos muchos gráficos a IBM BÁSICO : LINE
, PSET
(Pixel SET), PRESET
(Pixel REINICIAR), GET
(tiendas de un rectángulo de la pantalla para una matriz), PUT
(muestra un segmento rectangular almacenado), LOCATE
(para mover el cursor de texto), y DRAW
, que esboza formas usando una sintaxis similar a LOGO . Bill Gates y Neil Konzen escribieron DONKEY.BAS , un juego incluido, para demostrar los gráficos en color y el sonido del intérprete . [132]
De entrada y salida
Otra área en la que las implementaciones divergieron fue en las palabras clave para tratar con medios (casetes y disquetes), entrada de teclado y controladores de juegos (si los hubiera).
Desde intérpretes de BASIC basados en ROM menudo funcionaban como cáscaras de carga en otras aplicaciones, implementaciones añadido comandos relacionados con las cintas de cassette (por ejemplo, CLOAD
y CSAVE
), archivos de disco binario (por ejemplo, BLOAD
, BSAVE
, y BRUN
), y programas BASIC en el disco (por ejemplo, LOAD
, SAVE
, y CATALOG
). Las implementaciones de Business BASIC agregaron comandos para archivos de acceso aleatorio. (Incluso los intérpretes BASIC basados en ROM no fueron diseñados ni pensados para ser utilizados como sistemas operativos, y las microcomputadoras más pequeñas simplemente no tenían ningún sistema operativo. [133] )
Dartmouth BASIC carecía de un comando para obtener entradas desde el teclado sin pausar el programa. Para admitir videojuegos , los BASIC agregaron comandos patentados para hacerlo: INKEY$
era una función en Microsoft BASIC que devolvería una cadena vacía si no se presionaba ninguna tecla o, de lo contrario, un solo carácter; KP
(para KeyPress ) devolvió el valor ASCII de la entrada en Astro BASIC .
Palo Alto Tiny BASIC carecía de cadenas, pero permitiría a los usuarios ingresar expresiones matemáticas como respuesta a INPUT
declaraciones; al establecer variables, como Y=1; N=0
, el usuario podría responder "Y" o "1" o incluso "3 * 2-5" en un mensaje de sí / no.
Algunos sistemas admiten controladores de juegos. Compatible con Astro BASIC JX()
(posición horizontal especificada del joystick), JY()
(posición vertical del joystick), KN()
(estado de la perilla) y TR()
(estado del disparador). Integer BASIC admitía un controlador de juego , un controlador de paleta , que tenía dos controladores en un solo conector. La posición del controlador se puede leer usando la PDL
función, pasando el número de controlador, 0 o 1, como A=PDL(0):PRINT A
, devolviendo un valor entre 0 y 255. [134] [c]
Integer BASIC carecía de comandos de entrada / salida personalizados, y también carecía de la DATA
declaración y el asociado READ
. Para obtener datos dentro y fuera de un programa, la funcionalidad de entrada / salida se redirigió a una ranura de tarjeta seleccionada con PR#x
y IN#x
, que redirigió la salida o la entrada (respectivamente) a la ranura numerada. A partir de ese momento, los datos se pueden enviar a la tarjeta mediante PRINT
comandos convencionales y leerlos mediante INPUT
. [131] La producción de sonidos se logró mediante PEEK
la ubicación mapeada en la memoria de un simple "beeper", −16336. [D]
Programación estructurada
Si bien la programación estructurada , a través de los ejemplos de ALGOL 58 y ALGOL 60 , era conocida por Kemeny y Kurtz cuando diseñaron BASIC, adaptaron solo el bucle for, ignorando la instrucción else, el bucle while, el bucle de repetición, los procedimientos con nombre, el parámetro pasando, y variables locales. Como resultado, los dialectos posteriores a menudo diferían dramáticamente en la redacción utilizada para las técnicas estructuradas. Por ejemplo, WHILE...WEND
(en Microsoft BASIC ), WHILE...ENDWHILE
(en Turbo-Basic XL ) DO...LOOP WHILE
e incluso WHILE
cláusulas (ambas en BASIC-PLUS ).
De las implementaciones Tiny BASIC, sólo el idioma nacional básico Industrial (NIBL) ofreció un comando de bucle de cualquier tipo, DO/UNTIL
. [136] Esto fue a pesar de que el inventor de Tiny BASIC, Dennis Allison, lamentaba públicamente el estado de BASIC. [137]
BBC BASIC fue uno de los primeros intérpretes de microordenador de una oferta estructurada de programación BASIC, con el nombre DEF PROC
/ DEF FN
procedimientos y funciones, REPEAT UNTIL
bucles y IF THEN ELSE
estructuras inspiradas en COMAL . Los BASIC de segunda generación, por ejemplo, SBASIC (1976), BBC BASIC (1981), True BASIC (1983), Beta BASIC (1983), QuickBASIC (1985) y AmigaBASIC (1986), introdujeron una serie de características en el lenguaje, principalmente relacionado con la programación estructurada y orientada a procedimientos. Por lo general, la numeración de líneas se omite del idioma y se reemplaza con etiquetas (para GOTO ) y procedimientos para fomentar un diseño más fácil y flexible. [138] Además, se introdujeron palabras clave y estructuras para respaldar la repetición, la selección y los procedimientos con variables locales.
El siguiente ejemplo está en Microsoft QBASIC, la tercera implementación de Microsoft de un BASIC estructurado (después de Macintosh BASIC en 1984 y Amiga BASIC en 1985). [139]
Ejemplo de REM QBASICDeclaración REM Forward: permite que el código principal llame a una subrutina REM que se define más adelante en el código fuente DECLARE SUB PrintSomeStars ( StarCount! ) REM El programa principal sigue a DO INPUT "¿Cuántas estrellas quieres? (0 para salir)" , NumStars CALL PrintSomeStars ( NumStars ) LOOP WHILE NumStars > 0 END Definición de subrutina REM SUB PrintSomeStars ( StarCount ) REM Este procedimiento usa una variable local llamada Stars $ Stars $ = STRING $ ( StarCount , "*" ) PRINT Stars $ END SUB
Orientado a objetos
El soporte inicial para la programación orientada a objetos proporcionó solo la reutilización de objetos creados con otros lenguajes, como Visual Basic y PowerBASIC admitieron el Modelo de objetos componentes de Windows . A medida que los intérpretes de BASIC continuaron evolucionando, agregaron soporte para características orientadas a objetos como métodos , constructores , asignación de memoria dinámica , propiedades y asignación temporal.
Ensamblador incluido
Las ROM BÁSICAS de Integer también incluían un monitor de código de máquina , un "mini ensamblador " y un desensamblador para crear y depurar programas en lenguaje ensamblador . [92] [140] [141]
Una de las características únicas de BBC BASIC era el ensamblador en línea , que permitía a los usuarios escribir programas en lenguaje ensamblador para el 6502 y, más tarde, el Zilog Z80 , NS32016 y ARM . El ensamblador estaba completamente integrado en el intérprete BASIC y compartía variables con él, que podían incluirse entre los caracteres [y], guardarse mediante * SAVE y * LOAD, y llamarse mediante los comandos CALL o USR. Esto permitió a los desarrolladores escribir no solo código en lenguaje ensamblador, sino también código BASIC para emitir lenguaje ensamblador, haciendo posible usar técnicas de generación de código e incluso escribir compiladores simples en BASIC.
Ejecución
Depuración
Como en la mayoría de los BASIC, los programas se iniciaban con el RUN
comando y, como era común, podían dirigirse a un número de línea en particular como RUN 300
. [142] La ejecución puede detenerse en cualquier momento usando Ctrl+ C[143] y luego reiniciarse con CONT
inue ( CON
en Integer BASIC. [144]
Para la ejecución paso a paso, la instrucción TRON
o TRACE
podría usarse en el símbolo del sistema o colocarse dentro del programa mismo. Cuando se encendió, se imprimieron los números de línea para cada línea visitada por el programa. La función se puede desactivar de nuevo con TROFF
o NOTRACE
. [145]
A diferencia de la mayoría de los BASIC, Atari BASIC escaneó la línea de programa recién ingresada e informó errores de sintaxis de inmediato. Si se encontró un error, el editor volvió a mostrar la línea, resaltando el texto cerca del error en video inverso .
En muchos intérpretes, incluido Atari BASIC, los errores se muestran como códigos numéricos, con las descripciones impresas en el manual. [146] Muchos MS-BASIC usaban abreviaturas de dos caracteres (por ejemplo, SN para SYNTAX ERROR). Palo Alto Tiny BASIC y Level I BASIC usaban tres palabras para los mensajes de error: "¿QUÉ?" para errores de sintaxis, "¿CÓMO?" para errores en tiempo de ejecución como GOTOs a una línea que no existía o desbordamientos numéricos, y "LO SORRY" para problemas de memoria insuficiente.
Analizando
Mientras que el lenguaje BÁSICO tiene una sintaxis simple, las expresiones matemáticas no, soportando diferentes reglas de precedencia para paréntesis y diferentes operadores matemáticos. Para admitir tales expresiones, es necesario implementar un analizador sintáctico descendente recursivo . [147]
Este analizador se puede implementar de varias formas:
- Como máquina virtual, como se discutió anteriormente para muchas implementaciones de Tiny BASIC. El valor de la iniciativa Tiny BASIC estaba en especificar una implementación de un analizador sintáctico.
- Como máquina de estados finitos , como en UIUC BASIC IUC, donde se implementó como tabla de control . [148]
- Directamente en código, como en Palo Alto Tiny BASIC y Integer BASIC. En Integer BASIC, el intérprete en tiempo de ejecución usó dos pilas para la ejecución: una para palabras clave de declaración y la otra para evaluar los parámetros. A cada declaración se le dieron dos prioridades: una que indicaba dónde debería ocurrir en una operación de varios pasos, como una serie de operaciones matemáticas para proporcionar el orden de las operaciones , y otra que sugería cuándo debería ocurrir la evaluación, por ejemplo, calcular los valores internos de una operación . fórmula entre paréntesis. Cuando se encontraron variables, se analizó su nombre y luego se buscó en la tabla de símbolos. Si no se encontró, se agregó al final de la lista. La dirección del almacenamiento de la variable, quizás recién creada, se colocó en la pila de evaluación. [92]
Actuación
La variedad de decisiones de diseño que se tomaron en la programación de un intérprete BÁSICO a menudo se reveló a través de diferencias de rendimiento.
Las implementaciones de gestión de línea a menudo afectaban al rendimiento y normalmente utilizaban la búsqueda lineal . Delimitar cada línea con un CR haría que un GOTO o GOSUB a una línea posterior tomaría más tiempo, ya que el programa necesitaría iterar sobre todas las líneas para encontrar el número de línea de destino. En algunas implementaciones, como Atari BASIC, la longitud de cada línea se registró y almacenó después del número de línea, de modo que el programa no tuvo que escanear cada carácter de la línea para encontrar el siguiente retorno de carro. Muchas implementaciones siempre buscarían un número de línea al que bifurcarse desde el inicio del programa; MS-BASIC buscaría desde la línea actual, si el número de la línea de destino fuera mayor. Pittman agregó un parche a su 6800 Tiny BASIC para usar una búsqueda binaria. [149]
Trabajar únicamente con matemáticas enteras proporciona otro gran impulso en la velocidad. Como muchas pruebas de computadora de la época eran pequeñas y, a menudo, realizaban cálculos matemáticos simples que no requerían punto flotante, Integer BASIC derrotó a la mayoría de los demás BASIC. [e] En uno de los primeros puntos de referencia de microcomputadoras conocidos, los puntos de referencia de Rugg / Feldman , Integer BASIC era más del doble de rápido que Applesoft BASIC en la misma máquina. [151] En Byte Sieve , donde las matemáticas eran menos importantes pero dominaban el acceso a la matriz y el rendimiento de bucle, Integer BASIC tomó 166 segundos mientras que Applesoft tomó 200. [152] No apareció en Creative Computing Benchmark , que se publicó por primera vez en 1983 , momento en el que Integer BASIC ya no se suministra de forma predeterminada. [153] La siguiente serie de pruebas, tomada de los dos artículos originales de Rugg / Feldman, [151] [150] muestra el rendimiento de Integer en relación con el BASIC derivado de MS en la misma plataforma.
Sistema | UPC | BÁSICO | Prueba 1 | Prueba 2 | Prueba 3 | Prueba 4 | Prueba 5 | Prueba 6 | Prueba 7 |
---|---|---|---|---|---|---|---|---|---|
Manzana II | 6502 a 1 MHz | Entero BÁSICO | 1.3 | 3.1 | 7.2 | 7.2 | 8.8 | 18,5 | 28,0 |
Manzana II | 6502 a 1 MHz | Applesoft BASIC | 1.3 | 8.5 | 16,0 | 17,8 | 19,1 | 28,6 | 44,8 |
En teoría, Atari BASIC debería haberse ejecutado más rápido que los BASIC contemporáneos basados en el patrón de Microsoft. Debido a que el código fuente está completamente tokenizado cuando se ingresa, todos los pasos de tokenización y análisis ya están completos. Incluso las operaciones matemáticas complejas están listas para ejecutarse, con cualquier constante numérica ya convertida a su formato interno de 40 bits, y los valores de las variables se buscan por dirección en lugar de tener que buscarlos. A pesar de estas ventajas teóricas, en la práctica, Atari BASIC es más lento que otras computadoras básicas BASIC, a menudo en gran medida. [154] En la práctica, esto no se confirmó. En dos puntos de referencia ampliamente utilizados de la época, Sieve of Eratosthenes de la revista Byte y la prueba de referencia de Creative Computing escrita por David H. Ahl , el Atari terminó cerca del final de la lista en términos de rendimiento y fue mucho más lento que el Apple II contemporáneo. o Commodore PET , [155] a pesar de tener la misma CPU pero ejecutándola aproximadamente al doble de la velocidad de cualquiera. Terminó detrás de máquinas relativamente lentas como la Sinclair ZX81 e incluso algunas calculadoras programables. [156]
La mayor parte de la lentitud del lenguaje se debió a tres problemas. [154] La primera es que las rutinas matemáticas de punto flotante estaban pobremente optimizadas. En el punto de referencia Ahl, una operación de un solo exponente, que internamente recorre la función de multiplicación lenta, fue responsable de gran parte del mal rendimiento de la máquina. [154] En segundo lugar, la conversión entre el formato de coma flotante interno y los enteros de 16 bits utilizados en ciertas partes del lenguaje fue relativamente lenta. Internamente, estos enteros se usaron para números de línea e indexación de matrices, junto con algunas otras tareas, pero los números en el programa tokenizado siempre se almacenaron en formato decimal codificado en binario (BCD). [157] Siempre que se encuentre uno de estos, por ejemplo, en el número de línea en GOTO 100
, el valor BCD tokenizado debe convertirse a un número entero, una operación que puede tardar hasta 3500 microsegundos. [158] Otros BASIC evitaron este retraso al convertir en mayúsculas y minúsculas la conversión de números que solo podrían ser enteros, como el número de línea que sigue a GOTO
, cambiando a código especial ASCII a entero para mejorar el rendimiento. El tercero fue cómo Atari BASIC implementó ramas y FOR
bucles. Para realizar una bifurcación en un GOTO
o GOSUB
, el intérprete busca en todo el programa el número de línea coincidente que necesita. [159] Una mejora menor encontrada en la mayoría de los BASIC derivados de Microsoft es comparar el número de línea de destino con el número de línea actual y buscar hacia adelante desde ese punto si es mayor, o comenzar desde arriba si es menor. Esta mejora faltaba en Atari BASIC. [154] A diferencia de casi todos los demás BASIC, que empujaban un puntero a la ubicación del FOR
en una pila, por lo que cuando llegaba al NEXT
, podía volver fácilmente al de FOR
nuevo en una sola operación de bifurcación, Atari BASIC presionó el número de línea en su lugar. Esto significaba que cada vez que NEXT
se encontraba un, el sistema tenía que buscar en todo el programa para encontrar la FOR
línea correspondiente . Como resultado, cualquier bucle en un programa Atari BASIC causa una gran pérdida de rendimiento en relación con otros BASIC. [154]
Ver también
- Lista de dialectos BÁSICOS
- Lista de equipos con BASIC integrado
Notas
- ^ Microsoft BASIC dejó 780 bytes libres para el código del programa de usuario y los valores de las variables en una máquina de 4 KB, y eso estaba ejecutando una versión reducida que carecía de variables de cadena y otras funciones.
- ^ Tenga en cuenta la extraña sintaxis del SCRN, que técnicamente es una función porque devuelve un valor, pero no usa una sintaxis similar a la de una función que sería
A=SCRN(X,Y)
. - ^ El manual sugiere, pero no establece rotundamente, que el rango real de valores es menor de 0 a 255. [134]
- ^ El número negativo es un efecto secundario de los enteros que se almacenan en formato con signo, por lo que cualquier ubicación de memoria por encima de 32767 aparece como un valor negativo en BASIC. [135]
- ^ Bill Gates se quejó de esto, afirmando que era injusto comparar Integer BASIC con un BASIC "real" como MS. [150]
Referencias
- ^ "IBM VS el mundo: así es" . Computerworld . 5 de diciembre de 1973.
- ^ "Descripción del procesador Hewlett-Packard 2100, 1972" (PDF) . Consultado el 18 de agosto de 2020 .
- ^ "¿Podemos obtener una cronología completa sobre el sistema operativo IRIS para Data General Novas?" . Consultado el 5 de agosto de 2020 .
- ^ Savetz, Kevin (abril de 2013). "Dave Ahl y Betsy Ah" (Entrevista).
- ^ "Equipos antiguos: HP-9830A" . Consultado el 18 de agosto de 2020 .
- ^ Un intérprete de lenguaje BÁSICO para el microprocesador Intel 8008 . Departamento de Ciencias de la Computación, Universidad de Illinois en Urbana-Champaign (publicado en 1974). Junio de 1974.
- ^ "Tenemos un BASIC" . Museo de Historia Natural y Ciencia de Nuevo México . Archivado desde el original el 30 de noviembre de 2012 . Consultado el 18 de abril de 2007 .
- ^ Fisk, Nathan (2009). Comprensión de la piratería en línea . ABC-CLIO. pag. 14. ISBN 9780313354748.
- ^ Hertzfeld 1985 .
- ^ Pittman, Tom. "Tuviste que pagar $ 5 por adelantado para conseguirlo ..." . www.ittybittycomputers.com . Consultado el 14 de junio de 2017 .
- ^ Arnold, Mark; Wadsworth, Nat (febrero de 1976a). "SCELBAL - Un lenguaje de nivel superior para sistemas 8008/8080" . Diario del Dr. Dobb . Vol. 1. págs. 30–34.
- ^ "Parte 1 del intérprete básico LLL 8080" (PDF) .
- ^ Lorenzo 2017 , p. 118.
- ^ Curran, Lawrence J .; Shuford, Richard S. (noviembre de 1983). "Estridge de IBM" . BYTE . págs. 88–97 . Consultado el 19 de marzo de 2016 .
- ^ Wilkinson , 1982 , págs. Iv – v.
- ^ Cromemco 1978 .
- ^ Wilkinson , 1982 , p. ix.
- ^ Wilkinson , 1982 , p. v.
- ^ "Procesador de video para computadora Acorn / BBC" . BBC News . Consultado el 30 de noviembre de 2010 .
- ^ "BBC Micro enciende recuerdos de revolución" . BBC News . 21 de marzo de 2008 . Consultado el 30 de noviembre de 2010 .
- ^ http://www.sacnews.net/adamcomputer/09.html
- ^ Smith, Tony (12 de febrero de 2014). "NO estás despedido: la historia del increíble CPC 464 de Amstrad" . El registro . Consultado el 17 de febrero de 2014 .
- ^ Lien, David (1981). The BASIC Handbook (Segunda ed.). San Diego, CA: Compusoft Publishing. pag. cubierta interior. ISBN 0-932760-00-7.
- ^ Lorenzo 2017 , p. 83.
- ^ Gates, Bill . "Entrevista a Bill Gates" . Museo Nacional de Historia Estadounidense, Institución Smithsonian (Entrevista). Entrevistado por David Allison . Consultado el 10 de abril de 2013 .
- ^ Malloy, Rich (mayo de 1983). "Little Big Computer / The TRS-80 Model 100 Portable Computer" . BYTE . pag. 14 . Consultado el 19 de octubre de 2013 .
- ^ Lorenzo 2017 , p. 122.
- ^ Williams, Gregg (febrero de 1984). "La computadora Apple Macintosh". BYTE . pag. 30.
- ^ "¿GUI de Mac :: Re: Re: MAC Basic vs MS Basic?" . macgui.com . Consultado el 23 de enero de 2015 .
- ^ Manes, Stephen; Andrews, Paul (21 de enero de 1994). Gates: Cómo el magnate de Microsoft reinventó una industria y se convirtió en el hombre más rico de Estados Unidos: Stephen Manes, Paul Andrews: 9780671880743: Amazon.com: Books . ISBN 0671880748.
- ^ Bill Atkinson entrevistado en el programa de televisión Triangulation en lared TWiT.tv
- ^ "¿Fue Family BASIC para NES / Famicom lo suficientemente potente como para crear juegos y aplicaciones completos?" . Consultado el 27 de agosto de 2020 .
- ^ Thomas, Neil (19 de agosto de 2019). "STOS y Amos - Francois Lionet | Retro Tea Break" . Consultado el 11 de marzo de 2020 .
- ^ Plant, Robert T .; Murrell, Stephen (2007). Una guía para ejecutivos de tecnología de la información . Prensa de la Universidad de Cambridge . pag. 343 . ISBN 978-0-521-85336-1.
Resumen de aspectos positivos: Visual Basic es fácil de aprender y está ampliamente disponible.
- ^ "La Historia de Visual Basic" . www.johnsmiley.com .
- ^ Frank Wieduwilt (octubre de 2008). "Programación con el IDE básico de Gambas" . Revista Linux Pro . Consultado el 10 de diciembre de 2011 .
- ^ "Acerca de los creadores de juegos - TheGameCreators" .
- ^ "Descarga básica pequeña" . Consultado el 7 de septiembre de 2020 .
- ^ Chailloux, Emmanuel; Manoury, Pascal; Pagano, Bruno (2002). Desarrollo de aplicaciones con Objective Caml . Francia: O'Reilly. ISBN 2841771210.
- ^ Price, Ed (29 de abril de 2014). "Pequeño plan de estudios básico" . TechNet . Microsoft . Consultado el 9 de febrero de 2014 .
- ^ Price, Ed; Takahashi, Nonki (25 de febrero de 2014). "Small Basic Getting Started Guide" . TechNet . Microsoft . Consultado el 12 de febrero de 2015 .
- ^ "Pequeño Básico" . Consultado el 6 de septiembre de 2020 .
- ^ Price, Ed (22 de octubre de 2012). "Las características únicas de Small Basic" . Pequeño Básico . TechNet. Microsoft . Consultado el 22 de abril de 2015 .
- ^ Price, Ed (8 de octubre de 2012). "¿Cuáles son las 14 palabras clave de Small Basic?" . Pequeño Básico . Blogs de MSDN. Microsoft . Consultado el 9 de febrero de 2014 .
- ^ https://techcommunity.microsoft.com/t5/Small-Basic-Blog/Announcing-Small-Basic-Online-1-0-Public-Preview/ba-p/353682
- ^ https://social.technet.microsoft.com/wiki/contents/articles/52801.microsoft-small-basic-online-v1-0-cs-installation-guide.aspx
- ^ "Colaboradores de robinhedwards / ArduinoBASIC" .
- ^ "BleuLlama / TinyBasicPlus: implementación AC de Tiny Basic, con foco en soporte para Arduino" . Consultado el 11 de septiembre de 2020 .
- ^ "Vintage BASIC - Hogar" . Consultado el 11 de septiembre de 2020 .
- ^ Ensmenger, Nathan (2010). Los chicos de la computadora toman el control . pag. 55. ISBN 978-0-262-05093-7.
- ^ Wozniak, 2014 .
- ^ Manual de idiomas BASIC-PLUS (PDF). Maynard, Massachusetts: Corporación de equipos digitales. 1972. págs. 3-13.
- ^ Lorenzo 2017 , p. 106.
- ^ Allison, Dennis (julio de 1976). "Notas de diseño para TINY BASIC". Avisos SIGPLAN . ACM. 11 (7): 25–33. doi : 10.1145 / 987491.987494 . S2CID 18819472 .El Grupo de Interés Especial de ACM en Lenguajes de Programación (SIGPLAN) reimprimió las notas de diseño de Tiny Basic del Tiny BASIC Journal de enero de 1976.
- ^ Allison, Dennis (1976). "Construye tu propio BÁSICO" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 9.
- ^ Allison, Dennis (1976). "Guía de referencia rápida para Tiny BASIC" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 6.
- ^ "ZX80 - ACTUALIZACIÓN BÁSICA DE ROM 8K" .
- ^ a b Un intérprete de lenguaje BÁSICO para el microprocesador Intel 8008 . Departamento de Ciencias de la Computación, Universidad de Illinois en Urbana-Champaign (publicado en 1974). Junio de 1974. págs. 16-19.
- ^ "Hoja de códigos de TB". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
- ^ "Micro básico de Robert Uiterwyk" .
- ^ Weyhrich 2001 , El [Integer] BASIC, que enviamos con el primer Apple II, nunca se ensambló, nunca. Había una copia manuscrita, todo manuscrito, todo ensamblado a mano ...
- ^ Wozniak, 2018 .
- ^ Wallace, James; Jim Erickson (1992). Disco duro: Bill Gates y la creación del imperio de Microsoft . John Wiley e hijos. págs. 81–83 . ISBN 0-471-56886-4.
- ^ Gates, Bill (enero de 1976). "Una carta abierta a los aficionados" . Boletín del Homebrew Computer Club . Mountain View, California: Homebrew Computer Club. 2 (1): 2.
- ^ "Tenemos un BASIC" . Museo de Historia Natural y Ciencia de Nuevo México. Archivado desde el original el 23 de marzo de 2012 . Consultado el 18 de abril de 2007 .
- ^ Wallace, James; Jim Erickson (1992). Disco duro: Bill Gates y la creación del imperio de Microsoft . John Wiley e hijos. pag. 78 . ISBN 0-471-56886-4.
- ^ "XBASIC - Un intérprete BÁSICO conversacional" . Consultado el 7 de septiembre de 2020 .
- ^ http://home.iae.nl/users/mhx/basic.frt . Consultado el 23 de septiembre de 2020 . Falta o vacío
|title=
( ayuda ) - ^ Wilkinson, O'Brien y Laughton 1983 .
- ^ "Operadores en línea BASIC-PLUS, ¿realmente tienen sentido?" . Consultado el 5 de agosto de 2020 .
- ^ Allen, Dennis. "PEQUEÑO BÁSICO". Empresa de informática del pueblo . Vol. 4 no. 3.
- ^ Greening, Bernard (1976). "Corregido Tiny BASIC IL" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 12.
- ^ Veit, Holger. "6800 diminuto BASIC de Tom Pittman" . Consultado el 2 de mayo de 2017 .
- ^ Nouspikel, Thierry. "GPL: Lenguaje de programación gráfica" . Consultado el 2 de agosto de 2020 .
- ^ "Crecí y aprendí lo básico en una TI-99 / 4a. Fue una época maravillosa y sencilla ..." Hacker News . Consultado el 2 de agosto de 2020 .
- ^ Wozniak , 1977 , p. 43.
- ^ Ayuda para programadores de Apple (PDF) . Manzana. 1978.
- ^ Raskin 1978 , p. 11.
- ^ Raskin 1978 , p. 46.
- ^ Raskin 1978 , págs. 49-55.
- ^ Raskin 1978 , págs. 65–67.
- ^ "Tiny BASIC Extendido". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (2). Febrero de 1976.
- ^ "Denver Tiny BASIC". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (3). Marzo de 1976.
- ^ a b "MINOL". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (4). Abril de 1976.
- ^ a b Rauskolb, Roger (diciembre de 1976). "Palo Alto Tiny BASIC del Dr. Wang" (PDF) . Edad de la interfaz . págs. 92-108.
- ^ Allison, Dennis (enero de 1976). "Notas de diseño para Tiny BASIC" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 9.
- ^ Allison, Dennis (enero de 1976). "Construye tu propio BÁSICO" . Diario del Dr. Dobb . Vol. 1 no. 1. p. 8.
- ^ Steil, Michael (13 de enero de 2015). "Microsoft BASIC para el código fuente original 6502" .
- ^ "Archivo tokenizado MBASIC" . Simplemente resuelva el problema del formato de archivo . Consultado el 2 de agosto de 2020 .
- ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Desmontaje anotado" . pag. 1,11. Archivado desde el original el 5 de noviembre de 2001.
- ^ Paul R. Santa-Maria. "Desmontaje básico de Apple II Entero" (PDF) . Consultado el 14 de septiembre de 2020 .
- ↑ a b c Wozniak , 1977 , p. 42.
- ^ Wilkinson, O'Brien y Laughton 1983 , p. 5.
- ^ Vickers 1983 , p. 7-8.
- ^ a b "El intérprete BÁSICO - Explicado" . Consultado el 15 de septiembre de 2020 .
- ^ "Parte 1 del intérprete básico LLL 8080" (PDF) .
- ^ Raskin 1978 , p. 118.
- ^ Wang, Li-Chen (mayo de 1976). "Palo Alto Tiny BASIC". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (5): 12-25.
- ^ Raskin 1978 , p. 38.
- ^ "Parte 1 del intérprete básico LLL 8080" (PDF) .
- ^ "Parte 1 del intérprete básico LLL 8080" (PDF) .
- ^ "¿Cuál es la referencia más antigua a PEEK, POKE y USR?" . Consultado el 15 de agosto de 2020 .
- ^ Altair 8800 BASIC Reference_Manual 1975 , página 68 de PDF, "Usando la función PEEK y la declaración OUT de 8K BASIC, el usuario puede escribir un programa de volcado binario en BASIC. Usando INP y POKE es posible escribir un cargador binario. PEEK y POKE se puede usar para almacenar información orientada a bytes. Cuando inicialice BASIC, responda la pregunta ¿TAMAÑO DE LA MEMORIA? Con la cantidad de memoria en su ALTAIR menos la cantidad de memoria que desea usar como almacenamiento para datos formateados en bytes ".
- ^ Raskin 1978 , p. 27.
- ^ "BÁSICO de Robert Uiterwyk" .
- ^ Galés, David; Galés, Theresa (2007). Cebado de la bomba: cómo los entusiastas de TRS-80 ayudaron a encender la revolución de la PC . pag. 7.
- ^ Reed, Matthew. "Nivel I BÁSICO" . TRS-80.org . Consultado el 27 de agosto de 2017 .
- ^ Arnold y Wadsworth 1976 , p. 10.1.
- ^ Arnold y Wadsworth 1976 , Capítulo 10.
- ^ "Rutinas de punto flotante para el 6502". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (7). Agosto de 1976.
- ^ "Parte 1 del intérprete básico LLL 8080" (PDF) .
- ^ Un intérprete de lenguaje BÁSICO para el microprocesador Intel 8008 . Departamento de Ciencias de la Computación, Universidad de Illinois en Urbana-Champaign (publicado en 1974). Junio de 1974. p. 20.
- ^ "Documentos GE-2xx" . www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf , pág. IV-4.
- ^ Lorenzo 2017 , p. 149.
- ^ Steil, Michael (20 de octubre de 2008). "Cree su propia versión de Microsoft BASIC para 6502" .
- ^ Raskin 1978 , p. 61.
- ^ MITS Altair BASIC . Albuquerque, Nuevo México: MITS. 1975. p. 37.
- ^ Lien, David (1986). The Basic Handbook (Tercera ed.). San Diego, CA: Compusoft. pag. 589. ISBN 0-932760-33-3.
- ^ Raskin 1978 , p. 94.
- ^ MITS Altair BASIC . Albuquerque, Nuevo México: MITS. 1975. p. 31.
- ^ a b c Manual de referencia de HP 2000 / Access BASIC (PDF) . Hewlett Packard. Mayo de 1976., N ° de pieza 22687-90001
- ^ North Star BASIC versión 6 (PDF) . North Star Corporation. 1977.
- ^ El Manual de referencia de ATARI BASIC . Atari Inc. 1980.
- ^ "Variables enteras, de coma flotante y de cadena". Manual del programador C64 . Comodoro.
- ^ Raskin 1978 , p. 89.
- ^ "Crea tu propia versión de Microsoft BASIC" .
- ^ Lien, David (1977). Manual del usuario para el nivel I (primera edición). Fort Worth, TX: Tandy Corporation. págs. 105-108, 137 . Consultado el 9 de agosto de 2020 .
- ^ Raskin 1978 , p. 31.
- ^ Raskin 1978 , p. 32.
- ^ Raskin 1978 , p. 33.
- ↑ a b Raskin , 1978 , p. 120.
- ^ Lorenzo 2017 , p. 120.
- ^ "¿Se considerarían sistemas operativos algunos intérpretes BASIC para microcomputadoras?" . Consultado el 7 de agosto de 2020 .
- ↑ a b Raskin , 1978 , p. 36.
- ^ Mini 1977 , p. 18.
- ^ "NIBL". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (10). Noviembre de 1976.
- ^ "Problemas con BASIC". Dr. Dobb's Journal of Computer Calistenics & Orthodontia, Running Light Without Overbyte . 1 (2). Febrero de 1976.
- ^ "Diferencias entre GW-BASIC y QBasic" . 2003-05-12. Archivado desde el original el 19 de octubre de 2013 . Consultado el 28 de junio de 2008 .
- ^ Lorenzo 2017 , p. 137.
- ^ Helmers 1978 , p. 18.
- ^ Weyhrich 2001 .
- ^ Raskin 1978 , p. 100.
- ^ Raskin 1978 , p. 15.
- ^ Raskin 1978 , p. 52.
- ^ Raskin 1978 , p. 107.
- ^ Manual 1980 , Apéndice B.
- ^ "¿Qué tipo de intérprete eran la mayoría de las implementaciones BASIC de 8 bits?" . Consultado el 9 de agosto de 2020 .
- ^ Un intérprete de lenguaje BÁSICO para el microprocesador Intel 8008 . Departamento de Ciencias de la Computación, Universidad de Illinois en Urbana-Champaign (publicado en 1974). Junio de 1974. págs. 24–36.
- ^ Pittman, Tom (1981). "El primer libro de pequeños programas BÁSICOS" . Retrotechnology.com . Computadoras Itty Bitty . Consultado el 5 de agosto de 2020 .
Debido a que TA es tan grande (19,703 bytes), descubrí que la ejecución se volvió terriblemente lenta, simplemente debido al escaneo de memoria para GOTO, GOSUB y RETURN. Un simple parche para el intérprete lo convierte en un algoritmo de búsqueda binaria , para una aceleración de aproximadamente un orden de magnitud en el tiempo de ejecución. Los cambios necesarios se enumeran en el Apéndice.
- ^ a b Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICOS ... revisada y actualizada" . Kilobaud . págs. 20-25.
- ^ a b Rugg, Tom; Feldman, Phil (junio de 1977). "Comparaciones de tiempos BÁSICOS ... información para fanáticos de la velocidad" . Kilobaud . págs. 66–70.
- ^ Gilbreath, Jim (septiembre de 1981). "Un punto de referencia del lenguaje de alto nivel" . Byte . pag. 192.
- ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencia" . Computación creativa . pag. 260.
- ↑ a b c d e Wilkinson , 1985 , p. 139.
- ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencia" . Computación creativa . págs. 259-260.
- ^ Ahl, David (enero de 1984). "Benchmark de Computación Creativa" . Computación creativa . pag. 12.
- ^ Wilkinson, O'Brien y Laughton 1983 , p. 17.
- ^ Crawford , 1982 , p. 8.45.
- ^ Ganador, Lane (1982). "De Re Atari, Capítulo 10: Atari BASIC" . Atari, Inc.
Bibliografía
- Arnold, Mark; Wadsworth, Nat (1976). SCELBAL: un lenguaje de nivel superior para sistemas 8008/8080 (PDF) . Consultoría informática SCELBI.
- El Manual de referencia de ATARI BASIC . Atari Inc. 1980. Archivado desde el original el 1 de mayo de 2005.
- Crawford, Chris (1982). De Re Atari . Intercambio del programa Atari.
- Cromemco 16K Extended BASIC (PDF) . Cromemco. 1978.
- Hertzfeld, Andy (junio de 1985). "La triste historia de MacBasic" . Folklore .
- Lorenzo, Mark (2017). Bucle sin fin: La historia del lenguaje de programación BÁSICO . Filadelfia: SE Books. ISBN 978-1974-27707-0.
- Raskin, Jef (1978). Manual de programación básico de Apple II (PDF) . Computadora Apple.
- Vickers, Steven (1983). Programación BÁSICA Sinclair ZX Spectrum (2 ed.). Investigación de Sinclair.
- Weyhrich, Steven (12 de diciembre de 2001). "Historia parte 3: El Apple II" . Consultado el 16 de septiembre de 2007 .
- Wilkinson, Bill (1982). Dentro de Atari DOS . Software de sistemas optimizados, Inc. ISBN 0-942386-02-7. Consultado el 4 de abril de 2009 .
- Wilkinson, Bill (febrero de 1985). "INSIGHT: Atari" . Computación creativa . págs. 139–140.
- Wilkinson, Bill; O'Brien, Kathleen; Laughton, Paul (1983). El libro de consulta BÁSICO de Atari . ¡Calcular! Libros. ISBN 0-942386-15-9.
- Williams, Gregg; Moore, Rob (diciembre de 1984). "La historia de Apple / Parte 1: Historia temprana" . Byte . págs. A67 – A71 . Consultado el 23 de octubre de 2013 .
- Wozniak, Steven (mayo de 1977). "Descripción del sistema / Apple-II" . Byte . págs. 34–43.
- Wozniak, Steven (1 de mayo de 2014). "Cómo Steve Wozniak escribió BASIC para la Apple original desde cero" . Gizmodo .
- Wozniak, Steven (3 de enero de 2018). "Apple BASIC" . Woz.org .
Otras lecturas
Documentos de código fuente y diseño, en orden cronológico del lanzamiento de las implementaciones BASIC:
- Weaver, Alfred; Tindall, Michael; Danielson, Ronald (junio de 1974). Un intérprete de lenguaje BÁSICO para el microprocesador Intel 8008 . Departamento de Ciencias de la Computación, Universidad de Illinois en Urbana-Champaign (publicado en 1974).Mantenimiento de CS1: utiliza el parámetro de autores ( enlace )
- Arnold, Mark (1977). Suplemento de funciones matemáticas SCELBAL . Consultoría informática SCELBI.
- Arnold, Mark (1977). Suplemento de cuerdas SCELBAL . Consultoría informática SCELBI.
- "Altair BASIC 3.2 (4K) - Desmontaje anotado" .
- Revista de Calistenia y Ortodoncia por Computadora del Dr. Dobb, Volumen 1 . Empresa de informática del pueblo. 1976.
- Rauskolb, Roger (diciembre de 1976). "Palo Alto Tiny BASIC del Dr. Wang" (PDF) . Edad de la interfaz . págs. 92-108.
- Pittman, Tom (1977). Pequeño Kit de Experimentador BÁSICO .
- Santa-Maria, Paul. "Desmontaje básico de Apple II Entero" (PDF) .