stringtranslate.com

Intérprete BÁSICO

Un ejemplo de cómo escribir un programa popular en un intérprete BÁSICO (en este caso, HAMURABI )

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 iniciaban las computadoras. Se esperaba que los usuarios utilizaran 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 de 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, el Apple I ). Durante el período Altair, los intérpretes BASIC se vendieron por separado, convirtiéndose en el primer software vendido a individuos en lugar de 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 de 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 de Tiny BASIC en general y Palo Alto Tiny BASIC en particular.

Los intérpretes de BASIC dejaron de utilizarse a medida que las computadoras crecieron en potencia y sus programas asociados crecieron demasiado para escribirlos y convertirlos en un formato de distribución razonable. El software venía cada vez más precompilado y transmitido en disquetes o mediante sistemas de tablones de anuncios , lo que hacía que la necesidad de listados de fuentes fuera menos importante. Además, shells de comandos cada vez más sofisticados como MS-DOS y la GUI de Apple Macintosh se convirtieron en la interfaz de usuario principal , y la necesidad de que BASIC actuara como shell desapareció. El uso de intérpretes BÁSICOS como idioma principal e interfaz para los sistemas había desaparecido en gran medida a mediados de la década de 1980.

Historia

BASIC ayudó a impulsar la era del tiempo compartido, se convirtió en algo común en la era de las microcomputadoras, luego desapareció 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 de compilación y uso en lugar de un intérprete, BASIC surgió como parte de un movimiento más amplio hacia sistemas de tiempo compartido . General Electric , después de haber trabajado en el Dartmouth Time Sharing System y su Dartmouth BASIC asociado , 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 productos de venta. puntos. Otras empresas del sector emergente rápidamente siguieron su ejemplo. A principios de la década de 1970, BASIC era en gran medida universal en las computadoras centrales de propósito general. [1]

El sistema HP 2000 fue diseñado para ejecutar BASIC de tiempo compartido como tarea principal.

BASIC, como lenguaje simplificado diseñado teniendo en mente la edición de líneas integradas, era naturalmente adecuado para migrar al mercado de 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 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 consumiría menos recursos informáticos, a expensas del rendimiento. En 1968, Hewlett Packard presentó el HP 2000 , un sistema basado en su intérprete HP Time-Shared BASIC . [2] En 1969, Dan Paymar e Ira Baxter escribieron otro intérprete BASIC temprano para Data General Nova . [3]

Uno de los que se resistió fue Digital Equipment Corporation (DEC), el principal proveedor de minicomputadoras. Habían lanzado un nuevo lenguaje conocido como FOCAL , basado en el anterior JOSS desarrollado en una máquina DEC en el Instituto de Investigación de Stanford a principios de los años 1960. JOSS era similar a BASIC en muchos aspectos, y FOCAL era una versión diseñada para ejecutarse en sistemas de memoria muy pequeña, en particular el PDP-8 , que a menudo se entregaba con 4 KB de memoria principal . A finales de la década de 1960, los vendedores de DEC, especialmente en el departamento de ventas educativas, descubrieron que sus clientes potenciales no estaban interesados ​​en FOCAL y buscaban sus sistemas en otra parte. Esto llevó a David H. Ahl a contratar a un programador para producir un BASIC para el PDP-8 y otras máquinas DEC. Al cabo de un año, todo interés en alternativas como JOSS y FOCAL había desaparecido. [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 interesaban por las microcomputadoras, muchos de los cuales habían visto BASIC en minis. o mainframes. BASIC era uno de los pocos lenguajes que tenía un nivel suficientemente alto para ser utilizado por personas sin formació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 "Un intérprete de lenguaje básico para el microprocesador Intel 8008", en su artículo del mismo nombre, aunque sus La aplicación se implementó en un simulador 8008 para IBM 360/75 y requirió 16 KB. [6]

Altair 8K BASIC en cinta de papel

En enero de 1975, se anunció el Altair 8800 y provocó la revolución de las microcomputadoras . Una de las primeras versiones de BASIC para microcomputadoras fue coescrita por Gates, Allen y Monte Davidoff para su recién formada empresa, Micro-Soft. Esto fue lanzado por MITS en formato de cinta perforada para el Altair 8800 poco después de la propia máquina, [7] mostrando BASIC como el lenguaje principal de 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 aquel momento trabajaba en Hewlett Packard y utilizó su dialecto de miniordenador, HP Time-Shared BASIC , como base para su propia versión. Integer BASIC se lanzó en casete para Apple I y se suministró en ROM cuando se lanzó Apple II en el verano de 1977. [9]

Otros miembros del Homebrew Computer Club comenzaron a hacer circular 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 crear un BASIC aún más pequeño que pudiera ejecutarse útilmente 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 BASIC en los primeros tres números trimestrales del boletín informativo People's Computer Company publicado en 1975 y las implementaciones con código fuente publicadas en el Dr. Dobb's Journal of Tiny BASIC Calistenia y Ortodoncia: Correr ligero sin Overbyte . Esto dio lugar a una amplia variedad de Tiny BASIC con funciones añadidas 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. Los aficionados y profesionales crearon sus propias implementaciones, lo que convirtió a Tiny BASIC en un ejemplo de proyecto de software libre que existía antes del movimiento del software libre .

Muchas empresas desarrollaron intérpretes BÁSICOS. En 1976, SCELBI introdujo 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 Modelo 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.

¡Hola Mundo! , con video inverso y carácter de campana , ejecútelo y luego aparezca en Applesoft BASIC

Microsoft portó 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 licenciaron un Microsoft BASIC, personalizado según las capacidades del hardware. En 1978, MS BASIC era un estándar de facto y prácticamente todos los ordenadores domésticos de los años 80 lo incluían en la ROM . En 1980, como parte de un acuerdo de licencia más amplio que incluía otros lenguajes y PC DOS , IBM rechazó una propuesta de Atari y en su lugar autorizó MS-BASIC sobre su propia implementación, lanzando finalmente cuatro versiones de IBM BASIC , cada una mucho más grande que los intérpretes anteriores ( por ejemplo, el Cartucho BASIC ocupaba 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 centrales y es mucho más funcional que los BASIC de microcomputadoras... 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 vas a discutir eso? [14] (Consulte Microsoft BASIC para conocer la historia posterior de estas diferentes implementaciones).

Muchos proveedores "discutieron con eso" y utilizaron otras empresas o escribieron sus propios intérpretes. En septiembre de 1978, Shepardson Microsystems estaba terminando Cromemco 16K Structured BASIC para las máquinas bus Cromemco S-100 basadas en Z80 . [15] [16] Paul Laughton y Kathleen O'Brien luego crearon Atari BASIC [17] esencialmente como una versión reducida de Cromemco BASIC portada al 6502. [18] En 1979, Warren Robinett desarrolló el cartucho de programación BASIC para Atari , Inc. , aunque sólo 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 casi 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 nombres / procedimientos y funciones, bucles y estructuras inspiradas en COMAL . [19] [20] Jan Jones desarrolló SuperBASIC , otro BASIC británico que admite programación estructurada, 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 indexados ISAM . [22] En 1985, MetaComCo lanzó ABasiC para Amiga y ST BASIC para Atari ST . DEF PROCDEF FNREPEAT UNTILIF 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 documentaba palabras clave de más de 250 computadoras diferentes, mostrando el crecimiento explosivo de la era de las microcomputadoras. [23]

Los 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 sólo una aplicación entre muchas, en lugar de proporcionar el primer mensaje 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 editaban utilizando el sencillo editor de texto TEXT, en lugar de escribirlos 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 incluir 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 PC IBM 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 de línea de Microsoft que se remonta al Altair, y tal vez incluso del BASIC numerado de línea en general". [27] Con el lanzamiento de MS-DOS 5.0, QBasic ocupó el lugar de GW-BASIC .

MacBASIC presentaba 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 se lanzó como software beta en 1985 y se adoptó 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 eliminado en favor de un BASIC de Microsoft. En noviembre de 1985, Apple puso fin abruptamente al proyecto como parte de un acuerdo con Microsoft para ampliar la licencia de BASIC en el Apple II . [30] [31]

BASIC llegó a algunos sistemas de videojuegos, como la Nintendo Famicom .

Los intérpretes de BASIC no fueron sólo 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 números enteros diseñada para la 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 centrados en multimedia: STOS BASIC para Atari ST , en 1988, [33] y AMOS BASIC para Amiga , en 1990.

En mayo de 1991, Microsoft lanzó Visual Basic , un lenguaje de programación basado en eventos de tercera generación conocido por su modelo de programación Modelo de objetos componentes (COM). [34] Visual Basic apoyó el desarrollo rápido de aplicaciones (RAD) de aplicaciones de interfaz gráfica de usuario (GUI) , el acceso a bases de datos utilizando objetos de acceso a datos , objetos de datos remotos u objetos de datos ActiveX , y la creación de controles y objetos ActiveX . Visual Basic se utilizó para desarrollar aplicaciones internas patentadas, así como aplicaciones publicadas.

Conceptos básicos de nicho

En 1993, Microsoft lanzó Visual Basic para Aplicaciones , un lenguaje de programación para aplicaciones de Microsoft Office , que reemplaza y amplía las capacidades de lenguajes de programación de macros específicos de aplicaciones anteriores, como WordBASIC de Word (que se introdujo 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 , acompañado de IDE y herramientas de desarrollo. [37]

En 2001, se lanzó SmallBASIC 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ñado 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 lenguaje tiene sólo 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, posteriormente portado a C por Mike Field. [48]

Móvil BASIC para Android

Muchos intérpretes de BASIC ahora están disponibles para teléfonos inteligentes y tabletas a través de Apple App Store o Google Play Store para Android.

Hoy en día, codificar 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 mucha RAM han simplificado la implementación de intérpretes BÁSICOS. Por ejemplo, la gestión de líneas es sencilla si su lenguaje de implementación admite matrices dispersas , la gestión de variables es sencilla con matrices asociativas y la ejecución del programa es sencilla con funciones de evaluación . Como ejemplos, consulte el proyecto de código abierto Vintage BASIC, escrito en Haskell [49] o OCaml Tiny BASIC.

Ventas y distribuciones

Inicialmente, los intérpretes estaban incluidos en el hardware de la computadora o se desarrollaban como un servicio personalizado, antes de que a fines de la década de 1960 surgiera una industria que producía software empaquetado de forma independiente para las organizaciones. [50] Los intérpretes BASIC se vendieron primero por separado de las microcomputadoras, luego integrados, antes de volver a venderse como aplicaciones en la era DOS.

A medida que el mercado pasó a las ROM, el tamaño de la ROM pasó a dominar las decisiones sobre el tamaño de un intérprete BÁSICO. Debido a que la RAM se vendía 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, teniendo en cuenta los objetivos de precios y otras limitaciones.

Compiladores versus intérpretes

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 es directamente ejecutable en el lenguaje de máquina subyacente de la computadora host sin hacer referencia al código fuente. Este código a menudo se compone de llamadas a rutinas preescritas 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 grandes cantidades de memoria temporal. A medida que el compilador funciona, produce 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 números de línea en el caso de BASIC, aumenta el requisito de memoria. Las computadoras de la época tenían cantidades muy pequeñas de memoria; en términos modernos, una computadora central típica podría tener del orden de 64 KB. En un sistema de tiempo compartido, como era 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 funcionara, los sistemas debían 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 escribía el código fuente del usuario en un archivo temporal. Cuando el usuario ejecutaba el programa, el editor salía y ejecutaba el compilador, que leía ese archivo y producía 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 era necesario 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 menores: los sistemas de 4 y 8 KB eran típicos en la década de 1960. Pero lo que es mucho más importante es que las minicomputadoras tendían 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 al segmento alto del mercado. En este entorno, un sistema que escribiera el código fuente, lo compilara y luego ejecutara el resultado habría tomado unos minutos. Debido a estas limitaciones, proliferaron los intérpretes.

En última instancia, los intérpretes realizan las mismas tareas básicas que los compiladores: leen el código fuente y lo convierten en instrucciones ejecutables que llaman a funciones de tiempo de ejecución. La principal diferencia es cuándo realizan las distintas tareas. En el caso de un compilador, todo el código fuente se convierte durante lo que al usuario le parece una sola operación, mientras que un intérprete convierte y ejecuta el código fuente una declaración a la vez. El código de máquina resultante se ejecuta, en lugar de generarse, y luego ese código se descarta y el proceso se repite con la siguiente declaració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 se pueden dividir las diferentes partes del proceso general: el código necesario para convertir el código fuente en operaciones de 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 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 desafío importante, pero elimina la necesidad de almacenamiento secundario y fue la única solución práctica para las primeras minicomputadoras 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 fueron un manual de HP BASIC y una copia de 101 BASIC Computer Games . Basándose en estas fuentes, Wozniak comenzó a esbozar un diagrama 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 Games . 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 números 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] Bob Albrecht del Homebrew Computer Club instó a Allison a crear el estándar , quien había visto BASIC en minicomputadoras 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 enteros y no admitía matrices ni manipulación de cadenas. El objetivo era que el programa cupiera entre 2 y 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 el listado, un asterisco (" *") denota cero o más objetos a su izquierda, excepto el primer asterisco en la definición de " term", que es el operador de multiplicación; los paréntesis agrupan objetos; y un épsilon (" ε") significa el conjunto vacío. Como es común en la notación gramatical del lenguaje informático, la barra vertical (" |") distingue las alternativas, al igual que las enumeradas en líneas separadas. El símbolo " CR" indica un retorno de carro .

 línea  :: = declaración numérica CR | declaración Declaración CR :: = IMPRIMIR lista-expr IF expresión relop expresión ENTONCES declaración GOTO expresión INPUT lista-var LET var = expresión expresión GOSUB VOLVER BORRAR LISTA EJECUTAR FINAL lista-expr :: = ( cadena | expresión ) ( , ( cadena | expresión ) ) * lista-var :: = var ( , var ) * expresión :: = ( +|-|ε ) término (( +|- ) término ) * término :: = factor (( * | / ) factor ) * factor :: = var | número | ( expresión ) var :: = A | B | C ... | Y | Número Z :: = dígito dígito * dígito :: = 0 | 1 | 2 | 3 | ... | 8 | 9 relop :: = < ( >| =) | > ( <| =) | =                                                                                                              

Esta sintaxis, tan simple como era, agregó una innovación: GOTOpodía GOSUBtomar una expresión en lugar de un número de línea, proporcionando un GOTO asignado [56] en lugar de la instrucción switch de la ON-GOTO/GOSUBestructura más típica de BASIC.

Sinclair BASIC utilizó como definición de lenguaje el estándar Mínimo BASIC del Instituto Nacional Estadounidense de Estándares (ANSI) de 1978, pero era en sí mismo 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 BÁSICO: [58]

Codificación

Las primeras microcomputadoras carecían de herramientas de desarrollo y los programadores desarrollaban su código en minicomputadoras o a mano. 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 en código de 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 BASIC de Microsoft. [62] )

Gates y Allen no tenían un sistema Altair para desarrollar y probar 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 dejó de usar 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, que el valor del tiempo de computadora durante el primer año de desarrollo de software era de 40.000 dólares. [64]

No es que Allen no pudiera codificar a mano en lenguaje de máquina. Mientras hacía la aproximación final al aeropuerto de Albuquerque en un viaje para hacer una demostración del 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. Escribiendo en lenguaje de máquina 8080, Allen terminó el programa antes de que aterrizara el avión. Sólo 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 Paisley XBASIC para sistemas grandes de Burroughs . [67] Otra excepción, y programa de escritura , 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 completo anotado 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 BASIC fueron codificados 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 .

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 implementarse 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 duración de todo el programa de interpretación fue de sólo 120 operaciones de máquina virtual, que consta 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 BÁSICOS ejecutados en ella 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í lo hicieron incluyeron Tiny BASIC Extended, 6800 Tiny BASIC, [73] y NIBL.

Para sus computadoras TI-99/4 y TI-99/4A , Texas Instruments diseñó una máquina virtual con un lenguaje llamado GPL, por "Lenguaje de programación gráfico". [74] (Aunque se le culpa ampliamente por el lento rendimiento de TI-BASIC , parte del problema era que la máquina virtual estaba almacenada en una ROM de gráficos, 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 mediante punteros indirectos de 16 bits y funciones matemáticas de 16 bits calculadas sin la necesidad de traducirlas al 6502 de 8 bits de múltiples instrucciones subyacente. código. [76] Sin embargo, SWEET16 no fue utilizado por el código BASIC central, aunque luego se usó para implementar varias utilidades, como una rutina de renumeración de líneas. [77]

Edición y almacenamiento de programas.

Edición de programas

La mayoría de las implementaciones BASIC de la época actuaron tanto como intérprete de lenguaje como como editor de línea . Cuando se ejecutaba BASIC, se mostraba un > símbolo del sistema donde el usuario podía ingresar declaraciones. [78] Esto se conocía como " modo directo ". Al arrancar, un intérprete BÁSICO 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 pudiera haber tenido el mismo número anteriormente. [80] Las declaraciones que se ingresaban sin un número de línea se denominaban comandos y se ejecutaban inmediatamente. Los números de línea sin declaraciones (es decir, seguidos de un retorno de carro ) eliminaron una línea previamente almacenada.

Cuando un programa estaba presente en la memoria y el usuario escribe el RUNcomando, el sistema ingresa al "modo indirecto". En este modo, se configura un puntero para que apunte a la primera línea del programa, por ejemplo, la línea 10. Luego, el texto original de esa línea se recupera de la tienda y se ejecuta como si el usuario acabara de escribirlo en modo directo. Luego, el puntero avanza a la siguiente línea y el proceso continúa.

Diferentes implementaciones ofrecieron otras capacidades de edición de programas. Altair BASIC 8K tenía un EDITcomando para cambiar al modo de edición de una línea. Integer BASIC, también incluía el AUTOcomando para ingresar automáticamente números de línea en un número inicial determinado como AUTO 100, agregando 10 al último número con cada nueva línea. AUTO 300,5comenzarí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 renumerar 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 convertían en números enteros almacenados como bytes o palabras , y a las palabras clave se les podían asignar tokens de un solo byte (por ejemplo, almacenar PRINTcomo valor de byte 145, en MS-BASIC). Estas representaciones luego se convertirían nuevamente en texto legible al LISTejecutar el programa.

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] palabras clave truncadas: PRfor PRINT, INfor INPUT, RETfor RETURN. No se aceptaron las palabras clave tradicionales completas.

Por el contrario, Palo Alto Tiny BASIC aceptaba palabras clave tradicionales pero permitía abreviar cualquier palabra clave a su cadena única mínima, con un punto final. Por ejemplo, PRINTse podría escribir P., aunque PR.también funcionaban otras variaciones. Este sistema se mantuvo en el Nivel I BASIC para el TRS-80 , que usaba PATB, y también se encontró en Atari BASIC y el BASIC de varias Sharp Pocket Computers . [85]

Para ampliar una abreviatura, el tokenizador Atari BASIC busca en su lista de palabras reservadas la primera que coincida con la porción proporcionada. Los comandos más utilizados aparecen primero en la lista de palabras reservadas, REMal principio (se puede escribir como .). Cuando el programa se LISTedite posteriormente, normalmente escribirá las palabras completas. MS BASIC también permitía ?una forma abreviada de PRINT, pero la ampliaba al incluirla en la lista, tratándola 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 texto original a varios formatos específicos de la plataforma. Tiny BASIC era 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 hizo 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 sólo 1 a 254 o 255, aunque la mayoría utiliza 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 del 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 FORo PRINT, en un valor de un solo byte, el "token". [88] El valor del token tenía el bit alto establecido para permitir que se distinguieran fácilmente en tiempo de ejecución. Todo lo demás en una línea se dejó en su formato original, por ejemplo, la línea:

10 PARA I=1 A 10

sería tokenizado como:

$64$81 I$B211$A410

Tenga en cuenta que el espacio entre FORy Ipermanece en la línea tokenizada y que los nombres de variables y las constantes no están tokenizadas. El código que realizó esta tokenización, conocido como "el fragmentador", simplemente copió todo lo que no reconoció como un token en la salida, preservando los espacios tal como están. Esto significaba que PRINTAse almacenaba en dos bytes, mientras que PRINT Ase almacenaba en tres bytes, y eliminar espacios era una forma común de mejorar el uso de la memoria. [89] Sinclair BASIC modificó esto ligeramente, eliminando espacios del código almacenado e insertándolos en el código durante un LIST, de modo que PRINTAparecería que PRINT Aaún no ocupa el byte adicional en la memoria.

Por el contrario, Integer BASIC convertiría la línea 10 GOTO 100completamente en tokens que podrían leerse y ejecutarse inmediatamente. En MS-BASIC, la línea produciría $64 $89 100, y en tiempo de ejecución el "100" tendría que convertirse al formato de 16 bits cada vez que se encontrara. Por el contrario, Integer BASIC también tokeniza variables numéricas, evitando esta conversión y acelerando la ejecución. El valor de dos bytes resultante se insertó en el código tokenizado junto con un byte de prefijo que indica un número seguido. El prefijo era un valor entre $B0 y $B9 , siendo el último mordisco del valor el primer dígito decimal del valor original. En cambio, los literales de cadena, como "HELLO WORLD", se codificaron estableciendo el bit alto de cada carácter para que se almacenara como $C1 . Los nombres de las variables se convirtieron de la misma manera, con las letras codificadas para tener el bit alto activado y los dígitos del nombre representados por los correspondientes $B0 a $B9 , de modo que la variable se codificaría como $C1B5 (no reducido a una ficha). [90] Hubo muchas otras optimizaciones; donde Microsoft BASIC tenía un token para la palabra clave , Integer BASIC tenía tres tokens: uno si la palabra clave iba seguida de ningún argumento, otro si iba seguida de una expresión aritmética y otro si iba seguida de una cadena literal. [91]AA5PRINT

Llevando esto aún más lejos, el tokenizador de Atari BASIC analiza la línea completa cuando se ingresa o modifica. Las constantes numéricas se analizan en su forma interna de 48 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, en lugar de en tiempo de ejecución, 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 precompilador"; Las declaraciones con errores de sintaxis en realidad no se podían almacenar y se solicitaba inmediatamente al usuario que las corrigiera. [92]

Tokenización en el teclado

Teclado Sinclair ZX Spectrum
Las combinaciones de teclas se utilizan para ingresar palabras clave BÁSICAS.

Algunos intérpretes, como los sistemas Sinclair, básicamente hacían que el usuario realizara la tokenización proporcionando pulsaciones de teclas especiales para ingresar palabras reservadas. Los comandos más comunes sólo necesitan pulsar una 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. [93] Como cada línea comienza con una palabra clave, LETno es opcional; después de escribir una palabra clave, el sistema vuelve a aceptar texto carácter por carácter. Una ventaja de este enfoque es que el tokenizador no puede confundir cadenas con palabras clave. Por ejemplo, permite nombrar una variable PRINTy generar su valor con PRINT PRINT.

Muchas " computadoras de bolsillo " usan de manera similar una pulsación de tecla (a veces precedida por varios tipos de teclas Mayús) para producir un byte (el token de palabra clave) que representa una palabra clave BÁSICA completa, como EXP, SQR, IF o PEEK , como Sharp pocket. juegos de caracteres de computadora y TI-BASIC . La expansión BÁSICA para Bally Astrocade también usa esto.

Manejo de linea

Los números de línea válidos variaban de una implementación a otra, pero normalmente eran del 1 al 32767.

La mayor parte de la memoria utilizada por los intérpretes de BASIC era para almacenar la lista de programas. 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:

Microsoft BASIC, comenzando con Altair BASIC, almacenó líneas de la siguiente manera: [94]

LLL BÁSICO: [95]

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 Entero BASIC; [96] y 255 caracteres en MS-BASIC (sin incluir el número de línea).

Los intérpretes buscarían en el programa línea por línea, mirando cada número de línea. Si fuera menor que el nuevo número de línea, las líneas posteriores 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. [97] (Debido a que el orden secuencial siempre se mantuvo en la memoria, estas no eran listas vinculadas ).

En Tiny BASIC, estas búsquedas requerían verificar cada byte en una línea: el puntero se incrementaba una y otra vez hasta encontrar 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 al inicio de la siguiente línea secuencial; esto era mucho más rápido, pero requería 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 memoria.

Cuando el usuario escribía LISTen 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 nuevamente al formato decimal y luego imprimió 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 por completo la necesidad de números de línea 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 limitaban los nombres de variables a dos caracteres como máximo (ya sea una sola letra o una letra seguida de un dígito; por ejemplo, de A a Z9). MS-BASIC permitía nombres de variables de una letra seguida de una letra o dígito opcional (por ejemplo, de A a ZZ) pero ignoraba los caracteres posteriores: por lo tanto, era posible escribir inadvertidamente un programa con las variables "PÉRDIDA" y "PRÉSTAMO", 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 contuviera una palabra reservada. [98] Las palabras clave no se podían utilizar en variables en muchos de los primeros BASIC; "PUNTUACIÓN" se interpretaría como "SC" O "E", donde OR era una palabra clave.

Las variables de cadena generalmente se distinguen en muchos dialectos de microcomputadoras de BASIC por tener el sufijo $ en su nombre, y los valores a menudo se identifican como cadenas al estar delimitados por "comillas dobles". Implementaciones posteriores usarían otra puntuación para especificar el tipo de 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, y a diferencia de Pascal y otros lenguajes de programación más estructurados, BASIC no requiere que se declare una variable antes de hacer referencia a ella. Los valores normalmente serán 0 (de la precisión adecuada) o la cadena nula de forma predeterminada.

Tabla de símbolos

Debido a que Tiny BASIC solo usaba 26 variables de una sola letra, las variables se podían almacenar 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', multiplicado por dos) hasta 181 (ASCII 90, 'Z', multiplicado por dos). , más uno para el segundo byte). [85]

La mayoría de los BASIC ofrecían 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 aquellas variables utilizadas.

En LLL BASIC, cada entrada en la tabla de símbolos se almacenó de la siguiente manera: [99]

A diferencia de la mayoría de los intérpretes de BASIC, UIUC BASIC tenía una función hash , que aplicaba el 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]

En Atari BASIC, un conjunto de punteros (direcciones) indicaba varios datos: los nombres de las variables se almacenaban en la tabla de nombres de variables (VNTP – 82, 83 16 ) y sus valores se almacenaban en la tabla de valores de variables (apuntada en VVTP – 86, 87 16 ). Al dirigir los nombres de las variables de esta manera, una referencia a una variable necesitaba sólo un byte para abordar su entrada en la tabla apropiada. Las variables de cadena tenían su propia área.

Una optimización del rendimiento de BBC BASIC incluyó el uso de múltiples listas vinculadas para la búsqueda de variables en lugar de una única 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 gestión de la memoria. Altair BASIC permitió a los usuarios recuperar espacio para funciones trigonométricas si no se utilizaban durante una sesión. PATB colocó el inicio de las subrutinas más comunes al frente del programa para que las use el RSTcódigo de operación 8080 de 1 byte en lugar del CALLcódigo de operación de 3 bytes. En LLL BASIC, algunas variables ocupaban las mismas ubicaciones de memoria, en los casos en que las diferentes variables se usaban solo en modo comando o solo en tiempo de ejecución. [100]

El vídeo 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 de gráficos) en Applesoft BASIC. El POKEcomando y la PEEKfunción (adaptados de monitores de código de máquina como el monitor DECsystem-10 [101] ) proporcionaron acceso directo a la memoria, para una variedad de propósitos, [102] especialmente para modificar registros de hardware especiales asignados 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 su uso con PEEK y POKE , siendo uno de los mapas de memoria más conocidos el libro Mapping the Atari , escrito por Ian Chadwick.

Algunas implementaciones del intérprete de Microsoft, por ejemplo las que se ejecutan en TRS-80 Modelos I/III, requerían que el usuario especificara la cantidad de memoria que utilizaría el intérprete. Esto fue para permitir reservar una región de memoria para la instalación de subrutinas en lenguaje de máquina que podrían ser llamadas por el programa interpretado, para una mayor velocidad de ejecución. Cuando se encienden los Modelos I/III, el usuario recibe el mensaje "¿Tamaño de memoria?" para este propósito.

Matemáticas

Integer BASIC, como su nombre lo indica, utiliza números enteros como base para su paquete matemático. Estos se almacenaban internamente como un número de 16 bits, little-endian (como lo 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. [103]

La mayoría de los intérpretes de Tiny BASIC (así como Sinclair BASIC 4K) admitían matemáticas utilizando únicamente números enteros, careciendo de 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 podía leerse y procesarse más rápidamente que los formatos de punto flotante de 32 o 40 bits que se encontraban en la mayoría de los BASIC de la época. Sin embargo, esto limitó su aplicabilidad como lenguaje de propósito general.

Las implementaciones de Business BASIC , como Data General Business Basic , también eran solo números enteros, pero normalmente con una precisión más alta: "doble precisión", 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 utilizaban 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 . [104] 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 modelo TRS-80 ejecuté la versión de dominio público de Tiny BASIC de Li-Chen Wang . Esto requería sólo 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 manifestación ante 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ó enteros con signo de 2 bytes con un valor máximo de 32,767. El resultado fue una solicitud de matemáticas de punto flotante para la versión de producción. [105] Esto llevó a la sustitución del código entero de 16 bits existente por una versión que utiliza números de punto flotante de precisión simple de 32 bits por parte del empleado de Tandy, Steve Leininger. [106]

SCELBAL utilizó 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 bits 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 por el byte medio y luego el más significativo con el signo en el bit alto. El exponente quedó último, nuevamente con el signo en la parte alta. [107] El manual proporciona código ensamblador bien documentado para todo el paquete matemático, incluidos puntos de entrada y notas de uso. [108]

Por lo general, los consultores se ocupaban de 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 enteros . Contrataron a Davidoff para escribir 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; [109] 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 en busca de soporte de punto flotante. [110] Para UIUC BASIC, se obtuvo la licencia de un paquete de punto flotante Datapoint 2200 . [111]

Por el contrario, los sistemas de tiempo compartido a menudo dependían del hardware. Por ejemplo, se eligió el GE-235 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. [112] [113]

Los primeros intérpretes utilizaban formatos de 32 bits, similares al formato de punto flotante binario de precisión simple IEEE 754 , que especifica:

Aquí está el valor 0,15625 almacenado en este formato:

Si bien los formatos de 32 bits eran comunes en esta época, 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. [114]

Operadores y funciones

Los operadores infijos normalmente incluían +(suma), -(resta), *(multiplicación), /(división) y exponente usando el ^carácter. Las operaciones relativas incluían el conjunto estándar de =, >, <, >=, <=y para "no iguales" <>o el inspirado en HP-TSB# . [115] Los operadores binarios, como AND, ORy 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( arcotangente ), COS( coseno ), EXP( e elevado a la potencia), INT(truncar cualquier valor fraccionario, devolviendo un número entero), LOG( logaritmo ), RND( generador de números pseudoaleatorios ) , SIN( seno ), SQR( raíz cuadrada ) y TAN( tangente ). También incluía la DEF FNdeclaración para declarar funciones de una línea, a las que luego se les denominaría FNA(), FNB(), etc.

La RNDfunción era la más extendida admitida en los primeros BASIC, aunque las implementaciones variaban:

matrices

La segunda versión de Dartmouth BASIC admitía matrices y operaciones matriciales , útiles para la solución de conjuntos de ecuaciones algebraicas lineales simultáneas; MATSe 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 memoria principal limitada disponible en las primeras microcomputadoras , a menudo 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 tuvo que ser dimensionado pero usó RAM no utilizada por el intérprete o el listado del programa A().

SCELBAL admitía múltiples matrices, pero en conjunto estas matrices no podían tener más de 64 elementos. Integer BASIC admitía matrices de una sola dimensión, limitadas en tamaño únicamente por la memoria disponible. [118] Tiny BASIC Extended admitía matrices bidimensionales de hasta 255 por 255. Altair BASIC 4K admitía solo matrices (una dimensión), mientras que la versión 8K admitía matrices de hasta 34 dimensiones. [119]

Muchas implementaciones respaldaron la práctica de Dartmouth BASIC de no requerir que se dimensione una matriz, en cuyo caso se supuso 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: [94]

Entonces la matriz se valora a sí misma:

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 tuvieron que registrar el tipo de datos de la matriz.

Aunque Microsoft y otros BASIC admitían matrices, las operaciones matriciales no estaban integradas, sino que debían programarse explícitamente en los elementos de la 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. Surgieron dos escuelas competitivas de manejo de cuerdas, de las cuales HP y DEC fueron pioneras, aunque más tarde surgieron otros enfoques. Estos requirieron diferentes estrategias para su implementación.

El manejo de cadenas más simple copió HP Time-Shared BASIC y definió variables de cadena como matrices de caracteres que debían DIMmodificarse antes de su uso. Las cadenas en HP TSB se tratan como una matriz de caracteres, hasta 72 en total, en lugar de un único 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. [120]DIM A$[10]

Se accede a las subcadenas dentro de cadenas usando una notación de " slicing ": 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 con 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 matrices y subcadenas comienzan con 1.A$(L,R)A$[L,R]A$[L]

Esto contrasta marcadamente con los BASIC que siguen el patrón DEC que utilizan funciones como LEFT$(), MID$()y RIGHT$()para acceder a subcadenas. Adoptada posteriormente por ANSI BASIC, la notación de HP también se puede utilizar en el lado de destino de una declaración LETo INPUTpara modificar parte de un valor de cadena existente, por ejemplo o , lo que no se puede hacer con las primeras implementaciones 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 CHANGEcomando que convertía la cadena hacia y desde valores ASCII equivalentes. (Posteriormente adoptado tal como está por DEC y adaptado por HP, que cambió la palabra clave a CONVERT. [120] ) Además, se podrían usar comillas simples para convertir una constante numérica en un carácter ASCII, lo que permitiría construir una cadena en partes. ; A$='23 '64 '49 "DEF"produjo la cadena "ABCDEF", sin necesidad de la CHR$()función. [120] Dartmouth BASIC Sexta edición compatible SEG$(para MID$) y POS(para INSTR).

Integer BASIC, North Star BASIC [121] y Atari BASIC [122] imitaron el enfoque de HP, que nuevamente contrastaba con el estilo encontrado en los BASIC derivados de DEC , incluido Microsoft BASIC , donde las cadenas son un tipo intrínseco de longitud variable. [123]

Algunas de las implementaciones de Tiny BASIC admitían una o más matrices de enteros predefinidas, que podían usarse para almacenar códigos de caracteres, siempre que el lenguaje tuviera funcionalidad para ingresar y generar códigos de caracteres (por ejemplo, Astro BASIC tenía KPy TVpara este propósito).

Recolección de basura

Un ejemplo de fragmentación externa

Hacer que las cadenas usen una cantidad fija de memoria independientemente de la cantidad de caracteres utilizados dentro de ellas, hasta un máximo de 255 caracteres, puede haber desperdiciado memoria [124] pero tenía la ventaja de evitar la necesidad de implementar la recolección de basura del montón , una Forma de gestión automática de la memoria que se utiliza 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 utilizara cuando se necesitara 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 de la familia Apple II , escanearon repetidamente los descriptores de cadena en busca de la cadena que tenía la dirección más alta para compactarla en memoria alta, lo que resultó en un rendimiento O(n 2 ) , que podría introducir minutos de duración. pausas en la ejecución de programas con uso intensivo de cadenas. La recolección de basura era notoriamente lenta o incluso rota en otras versiones de Microsoft BASIC. [125] Algunos sistemas operativos que admitían tareas en segundo plano impulsadas por interrupciones, como TRSDOS/LS-DOS 6.x en el TRS-80 Modelo 4 , explotaban períodos de inactividad del usuario (como los períodos de milisegundos de duración entre pulsaciones de teclas y períodos posteriores actualización de la pantalla de video) para procesar la recolección de basura durante las ejecuciones del programa BASIC.

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 dramáticamente de una microcomputadora a otra. 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 el conjunto 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 podían ser cualquier expresión y oscilaban entre 0 y 127 para el eje X y entre 0 y 47 para el eje Y. Sólo se admitía la visualización en blanco y negro. [126]

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 GRdeclaración y se desactivó con TEXT. [127] El dibujo era modal y normalmente comenzaba emitiendo un comando para cambiar el color, lo que se lograba estableciendo una pseudovariable; COLOR=12Establecería el color del dibujo en 12, verde claro. Luego, se podría PLOT 10,10producir un solo punto de ese color, [128] HLIN 0,39 AT 20 dibujar una línea horizontal en la fila 20 que abarque la pantalla, o VLIN 5,15 AT 7dibujar una línea vertical más corta en la columna 7. [129] A=SCRN X,Y devolvió el color de la pantalla en X ,Y. [130] [b]

conjunto de gráficos de bloques de texto del ZX-81

Los fabricantes de hardware a menudo incluían soporte propietario para semigráficos , formas simples e íconos tratados como caracteres especiales . Los ejemplos incluyeron los gráficos de bloques del ZX-81 y los símbolos de las tarjetas de ♠, ♣, ♥ y ♦ en el conjunto de caracteres PETSCII de Commodore International . BASIC podría generar estos símbolos usando .PRINT CHR$();

Microsoft agregó muchos comandos gráficos a IBM BASIC : LINE, PSET​​(Pixel SET), PRESET(Pixel RESET), GET(almacena un rectángulo de la pantalla en una matriz), PUT(muestra un segmento rectangular almacenado), LOCATE(para mover el cursor de texto) y DRAW, que dibuja formas utilizando una sintaxis similar a la de 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 . [131]

De entrada y salida

Otra área donde 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).

Dado que los intérpretes BASIC basados ​​en ROM a menudo funcionaban como shells para cargar otras aplicaciones, las implementaciones agregaron comandos relacionados con cintas de casete (p. ej., CLOADy CSAVE), archivos de disco binarios (p. ej. BLOAD, BSAVE, y BRUN) y programas BASIC en el disco (p. ej. 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 destinados a ser utilizados como sistemas operativos, y las microcomputadoras más pequeñas simplemente carecían de sistema operativo. [132] )

Dartmouth BASIC carecía de un comando para obtener entradas desde el teclado sin pausar el programa. Para admitir videojuegos , los BASIC agregaron comandos propietarios para hacerlo: INKEY$era una función en Microsoft BASIC que devolvería una cadena vacía si no se presionaba ninguna tecla o si no se presionaba 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 las INPUTdeclaraciones; Al configurar variables, como Y=1; N=0, el usuario podría responder "Y" o "1" o incluso "3*2-5" cuando se le solicite sí o no.

Algunos sistemas admitían controladores de juegos. Compatible con Astro BASIC JX()(posición horizontal del joystick especificada), 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 PDLfunción, pasando el número del controlador, 0 o 1, como A=PDL(0):PRINT A, devolviendo un valor entre 0 y 255. [133] [c]

Integer BASIC carecía de comandos personalizados de entrada/salida y también carecía de la DATAdeclaración y el archivo READ. Para ingresar y salir datos de un programa, la funcionalidad de entrada/salida se redirigía a una ranura de tarjeta seleccionada con PR#xy IN#x, que redirigía la salida o entrada (respectivamente) a la ranura numerada. A partir de entonces, los datos podrían enviarse a la tarjeta mediante PRINTcomandos convencionales y leerse mediante INPUT. [130] La producción de sonidos se logró localizando PEEKla ubicación asignada en la memoria de un simple "biper", −16336. [d]

Programación estructurada

Si bien Kemeny y Kurtz conocían la programación estructurada , a través de los ejemplos de ALGOL 58 y ALGOL 60 , 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. paso 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 WHILEe incluso WHILEcláusulas (ambas en BASIC-PLUS ).

De las implementaciones de Tiny BASIC, solo el Lenguaje Básico Industrial Nacional (NIBL) ofrecía un comando de bucle de cualquier tipo DO/UNTIL. [135] Esto fue a pesar de que el inventor de Tiny BASIC, Dennis Allison, lamentó públicamente el estado de BASIC. [136]

BBC BASIC fue uno de los primeros intérpretes de microcomputadoras en ofrecer programación BASIC estructurada, con nombres DEF PROC/ DEF FNprocedimientos y funciones, REPEAT UNTILbucles y IF THEN ELSEestructuras 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 en el lenguaje y se reemplaza con etiquetas (para GOTO ) y procedimientos para fomentar un diseño más fácil y flexible. [137] 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). [138]

Ejemplo de REM QBASICDeclaración directa REM: 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 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 utiliza 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 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 BASIC de Integer también incluían un monitor de código de máquina , un "miniensamblador " y un desensamblador para crear y depurar programas en lenguaje ensamblador . [90] [139] [140]

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, lo que hizo posible utilizar 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 RUNcomando y, como era común, podían dirigirse a un número de línea particular como RUN 300. [141] La ejecución se puede detener en cualquier momento usando + [142] (o BREAK como en el TRS-80) y luego reiniciar con inue ( en Integer BASIC). [143] Aprovechando las capacidades únicas de los programas interpretados (el código se procesa en tiempo real una declaración a la vez, a diferencia de los compiladores ), el usuario en la consola podría examinar datos variables usando la declaración PRINT y cambiar dichos datos en el momento. al vuelo, luego reanude la ejecución del programa. CtrlCCONTCON

Para la ejecución paso a paso, la instrucción TRONo TRACEpodría usarse en el símbolo del sistema o colocarse dentro del programa mismo. Cuando se activó, se imprimieron los números de línea para cada línea que visitó el programa. La función se puede desactivar nuevamente con TROFFo NOTRACE. [144]

Algunas implementaciones como los intérpretes de Microsoft para las distintas marcas de TRS-80 incluían el comando ON ERROR GOSUB. Esto redirigiría la ejecución del programa a un número de línea específico para un manejo especial de errores.

A diferencia de la mayoría de los BASIC, Atari BASIC escaneó la línea del programa recién ingresada e informó errores de sintaxis de inmediato. Si se encontraba un error, el editor volvía 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. [145] Muchos MS-BASIC utilizaban abreviaturas de dos caracteres (por ejemplo, SN para ERROR DE SINTAXIS). Palo Alto Tiny BASIC y Nivel I BASIC utilizaron tres palabras para los mensajes de error: "¿QUÉ?" para errores de sintaxis, "¿CÓMO?" para errores en tiempo de ejecución como GOTO a una línea que no existía o desbordamientos numéricos, y "LO SENTIMOS" para problemas de falta de memoria.

Analizando

Si bien el lenguaje BASIC tiene una sintaxis simple, las expresiones matemáticas no la tienen, lo que admite diferentes reglas de precedencia para paréntesis y diferentes operadores matemáticos. Para admitir tales expresiones es necesario implementar un analizador de descenso recursivo . [146]

Este analizador se puede implementar de varias maneras:

Actuación

La gama de decisiones de diseño que se tomaron en la programación de un intérprete BASIC a menudo se reveló a través de diferencias de rendimiento.

Las implementaciones de gestión de líneas a menudo afectaban el rendimiento y normalmente utilizaban búsqueda lineal . Delimitar cada línea con un CR haría que 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 registraba y almacenaba después del número de línea, de modo que el programa no tuviera 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 pasar desde el inicio del programa; MS-BASIC buscaría desde la línea actual, si el número de línea de destino fuera mayor. Pittman añadió un parche a su 6800 Tiny BASIC para utilizar una búsqueda binaria. [148]

Trabajar únicamente con matemáticas de números enteros proporciona otro aumento importante en la velocidad. Como muchos puntos de referencia informáticos de la época eran pequeños y a menudo realizaban operaciones matemáticas 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 fue más del doble de rápido que Applesoft BASIC en la misma máquina. [150] En Byte Sieve , donde las matemáticas eran menos importantes pero dominaban el acceso a la matriz y el rendimiento de bucle, Integer BASIC tardó 166 segundos mientras que Applesoft tardó 200. [151] No apareció en Creative Computing Benchmark , que se publicó por primera vez en 1983. , momento en el que Integer BASIC ya no se suministraba de forma predeterminada. [152] La siguiente serie de pruebas, tomadas de los dos artículos originales de Rugg/Feldman, [150] [149] muestran el rendimiento de Integer en relación con el BASIC derivado de MS en la misma plataforma.

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 las constantes numéricas ya convertidas a su formato interno de 48 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 otros BASIC de computadoras domésticas , a menudo en gran medida. [153] En la práctica, esto no se confirmó. En dos puntos de referencia ampliamente utilizados de la época, el Tamiz de Eratóstenes de la revista Byte y la prueba de referencia de Computación Creativa escrita por David H. Ahl , el Atari terminó cerca del final de la lista en términos de rendimiento y era mucho más lento que el Apple II contemporáneo. o Commodore PET , [154] a pesar de tener la misma CPU pero ejecutarla aproximadamente al doble de velocidad que cualquiera de los dos. Terminó detrás de máquinas relativamente lentas como la Sinclair ZX81 e incluso algunas calculadoras programables. [155]

La mayor parte de la lentitud del lenguaje se debía a tres problemas. [153] La primera es que las rutinas matemáticas de punto flotante estaban mal optimizadas. En el punto de referencia de Ahl, una operación de un solo exponente, que internamente recorre la función de multiplicación lenta, fue responsable de gran parte del pobre desempeño de la máquina. [153] En segundo lugar, la conversión entre el formato interno de punto flotante y los números enteros de 16 bits utilizados en ciertas partes del lenguaje fue relativamente lenta. Internamente, estos números enteros se usaban 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 almacenaban en formato decimal codificado en binario (BCD). [156] Cada vez que se encuentra 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. [157] Otros BASIC evitaron este retraso al convertir en mayúsculas y minúsculas especiales números que solo podrían ser enteros, como el número de línea que sigue a GOTO, cambiando a código especial de ASCII a entero para mejorar el rendimiento. En tercer lugar, fue cómo Atari BASIC implementó ramas y FORbucles. Para realizar una bifurcación en a GOTOo GOSUB, el intérprete busca en todo el programa el número de línea coincidente que necesita. [158] Una mejora menor que se encuentra 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. [153] A diferencia de casi todos los demás BASIC, que empujarían un puntero a la ubicación de FORen una pila, de modo que cuando alcanzara NEXTpodría regresar fácilmente a la FORparte posterior en una sola operación de rama, Atari BASIC empujó el número de línea en su lugar. Esto significaba que cada vez que NEXTencontraba un, el sistema tenía que buscar en todo el programa para encontrar la FORlínea correspondiente. Como resultado, cualquier bucle en un programa Atari BASIC provoca una gran pérdida de rendimiento en relación con otros BASIC. [153]

Ver también

Notas

  1. ^ 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 que ejecutaba una versión reducida que carecía de variables de cadena y otras funciones.
  2. ^ Tenga en cuenta la sintaxis extraña de SCRN, que técnicamente es una función porque devuelve un valor, pero no utiliza una sintaxis similar a una función que sería A=SCRN(X,Y).
  3. ^ El manual sugiere, pero no afirma directamente, que el rango real de valores es inferior a 0 a 255. [133]
  4. ^ El número negativo es un efecto secundario de que los números enteros se almacenen en formato con signo, por lo que cualquier ubicación de memoria superior a 32767 aparecía como un valor negativo en BASIC. [134]
  5. ^ Bill Gates se quejó de esto, afirmando que era injusto comparar Integer BASIC con un BASIC "real" como MS. [149]

Referencias

  1. ^ "IBM VS el mundo: así es". Mundo de la informática . 5 de diciembre de 1973.
  2. ^ "Descripción del procesador Hewlett-Packard 2100, 1972" (PDF) . Consultado el 18 de agosto de 2020 .
  3. ^ "¿Podemos obtener una cronología completa sobre el sistema operativo IRIS para Data General Novas?" . Consultado el 5 de agosto de 2020 .
  4. ^ Savetz, Kevin (abril de 2013). "Dave Ahl y Betsy Ah" (Entrevista).
  5. ^ "Computadoras antiguas: HP-9830A" . Consultado el 18 de agosto de 2020 .
  6. ^ 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.
  7. ^ "Tenemos un BÁSICO". 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 .
  8. ^ Fisk, Nathan (2009). Comprender la piratería en línea. ABC-CLIO. pag. 14.ISBN _ 9780313354748.
  9. ^ Hertzfeld 1985.
  10. ^ Pittman, Tom. "Tenías que pagar $5 por adelantado para conseguirlo...". www.ittybittycomputers.com . Consultado el 14 de junio de 2017 .
  11. ^ Arnold, Marcos; 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.
  12. ^ "Parte 1 del intérprete BÁSICO LLL 8080" (PDF) .
  13. ^ Lorenzo 2017, pag. 118.
  14. ^ Curran, Lawrence J.; Shuford, Richard S. (noviembre de 1983). "Estridge de IBM". BYTE . págs. 88–97 . Consultado el 19 de marzo de 2016 .
  15. ^ Wilkinson 1982, págs. iv-v.
  16. ^ Cromemco 1978.
  17. ^ Wilkinson 1982, pág. IX.
  18. ^ Wilkinson 1982, pág. v.
  19. ^ "Procesador de vídeo para computadora Acorn/BBC". Noticias de la BBC . Consultado el 30 de noviembre de 2010 .
  20. ^ "BBC Micro enciende recuerdos de revolución". Noticias de la BBC . 21 de marzo de 2008 . Consultado el 30 de noviembre de 2010 .
  21. ^ "ECN - julio/agosto de 1985". Archivado desde el original el 7 de marzo de 2018 . Consultado el 4 de agosto de 2020 .
  22. ^ 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 .
  23. ^ Gravamen, David (1981). El manual BÁSICO (Segunda ed.). San Diego, CA: Compusoft Publishing. pag. cubierta interior. ISBN 0-932760-00-7.
  24. ^ Lorenzo 2017, pag. 83.
  25. ^ Puertas, 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 .
  26. ^ Malloy, Rich (mayo de 1983). "Pequeña gran computadora / La computadora portátil TRS-80 modelo 100". BYTE . pag. 14 . Consultado el 19 de octubre de 2013 .
  27. ^ Lorenzo 2017, pag. 122.
  28. ^ Williams, Gregg (febrero de 1984). "La computadora Apple Macintosh". BYTE . pag. 30.
  29. ^ "GUI de Mac :: Re: Re: ¿MAC Basic frente a MS Basic?". macgui.com . Consultado el 23 de enero de 2015 .
  30. ^ Melenas, 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 . Piedra de toque. ISBN 0671880748.
  31. ^ Bill Atkinson entrevistado en el programa de televisión Triangulación de la red TWiT.tv
  32. ^ "¿Era Family BASIC para NES/Famicom lo suficientemente potente como para crear juegos y aplicaciones completos?" . Consultado el 27 de agosto de 2020 .
  33. ^ Thomas, Neil (19 de agosto de 2019). "STOS y Amos - Francois Lionet | Pausa para el té retro". YouTube . Consultado el 11 de marzo de 2020 .
  34. ^ Planta, Robert T.; Murrell, Stephen (2007). Una guía para ejecutivos sobre 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.
  35. ^ "La historia de Visual Basic". www.johnsmiley.com .
  36. ^ Frank Wieduwilt (octubre de 2008). "Programación con el IDE Gambas Basic". Revista Linux Pro . Consultado el 10 de diciembre de 2011 .
  37. ^ "Acerca de los creadores de juegos: TheGameCreators".
  38. ^ "Descarga básica pequeña". 19 de noviembre de 2018 . Consultado el 7 de septiembre de 2020 .
  39. ^ Chailloux, Emmanuel; Manoury, Pascal; Pagano, Bruno (2002). Desarrollo de Aplicaciones con Objective Caml . Francia: O'Reilly. ISBN 2841771210.
  40. ^ Precio, Ed (29 de abril de 2014). "Pequeño plan de estudios básico". Technet . Microsoft . Consultado el 9 de febrero de 2014 .
  41. ^ Precio, Ed; Takahashi, Nonki (25 de febrero de 2014). "Pequeña guía básica de introducción". Technet . Microsoft . Consultado el 12 de febrero de 2015 .
  42. ^ "Pequeño básico" . Consultado el 6 de septiembre de 2020 .
  43. ^ Precio, 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 .
  44. ^ Precio, 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 .
  45. ^ "Anuncio de Small Basic Online 1.0: vista previa pública". 20 de febrero de 2019.
  46. ^ "Microsoft Small Basic Online v1.0 (CS): Guía de instalación". Microsoft TechNet . Consultado el 8 de enero de 2022 .
  47. ^ "Colaboradores de robinhedwards/ArduinoBASIC". GitHub .
  48. ^ "BleuLlama/TinyBasicPlus: implementación de CA de Tiny Basic, centrada en la compatibilidad con Arduino". GitHub . Consultado el 11 de septiembre de 2020 .
  49. ^ "Vintage BÁSICO - Inicio" . Consultado el 11 de septiembre de 2020 .
  50. ^ Ensmenger, Nathan (2010). "Los chicos de la informática se hacen cargo" . Prensa del MIT. pag. 55.ISBN _ 978-0-262-05093-7.
  51. ^ Wozniak 2014.
  52. ^ Manual de idiomas BASIC-PLUS (PDF). Maynard, Massachusetts: Corporación de equipos digitales. 1972, págs. 3-13.
  53. ^ Lorenzo 2017, pag. 106.
  54. ^ 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.
  55. ^ Allison, Dennis (1976). "Construye tu propio BÁSICO". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 9.
  56. ^ Allison, Dennis (1976). "Guía de referencia rápida para Tiny BASIC". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 6.
  57. ^ "ZX80 - ACTUALIZACIÓN DE ROM BÁSICA 8K".
  58. ^ ab 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.
  59. ^ "Hoja de códigos de tuberculosis". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (1). Diciembre de 1975.
  60. ^ "Micro básico de Robert Uiterwyk".
  61. ^ Weyhrich 2001, El BASIC [Integer], que enviamos con los primeros Apple II, nunca se ensambló, nunca. Había una copia manuscrita, toda escrita a mano, toda ensamblada a mano.
  62. ^ Wozniak 2018.
  63. ^ Wallace, James; Jim Erickson (1992). Disco duro: Bill Gates y la creación del imperio Microsoft. John Wiley e hijos. págs. 81–83. ISBN 0-471-56886-4.
  64. ^ Gates, Bill (enero de 1976). "Una carta abierta a los aficionados". Boletín del Homebrew Computer Club . Mountain View, California: Club de informática Homebrew. 2 (1): 2.
  65. ^ "Tenemos un BÁSICO". 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 .
  66. ^ Wallace, James; Jim Erickson (1992). Disco duro: Bill Gates y la creación del imperio Microsoft. John Wiley e hijos. pag. 78.ISBN _ 0-471-56886-4.
  67. ^ "XBASIC - Un intérprete BÁSICO conversacional". GitHub . Consultado el 7 de septiembre de 2020 .
  68. ^ Lennart Benschop (8 de marzo de 2002). «Intérprete BÁSICO Versión 1.22» . Consultado el 23 de septiembre de 2020 .
  69. ^ Wilkinson, O'Brien y Laughton 1983.
  70. ^ "Operadores en línea BASIC-PLUS, ¿realmente tienen sentido?" . Consultado el 5 de agosto de 2020 .
  71. ^ Allen, Dennis. "PEQUEÑO BÁSICO". Compañía de Computación del Pueblo . vol. 4, núm. 3.
  72. ^ Ecologización, Bernard (1976). "Tiny BASIC IL corregido". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 12.
  73. ^ Veit, Holger. "El pequeño BASIC 6800 de Tom Pittman" . Consultado el 2 de mayo de 2017 .
  74. ^ Nouspikel, Thierry. "GPL: Lenguaje de programación gráfica" . Consultado el 2 de agosto de 2020 .
  75. ^ "Crecí y aprendí lo básico con una TI-99/4a. Fue una época maravillosa y sencilla..." Hacker News . Consultado el 2 de agosto de 2020 .
  76. ^ Wozniak 1977, pág. 43.
  77. ^ Ayuda para programadores de Apple (PDF) . Manzana. 1978.
  78. ^ Raskin 1978, pág. 11.
  79. ^ Raskin 1978, pág. 46.
  80. ^ Raskin 1978, págs. 49–55.
  81. ^ Raskin 1978, págs. 65–67.
  82. ^ "Pequeño BASIC extendido". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (2). Febrero de 1976.
  83. ^ "Denver Tiny BÁSICO". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (3). Marzo de 1976.
  84. ^ ab "MINOL". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (4). Abril de 1976.
  85. ^ ab Rauskolb, Roger (diciembre de 1976). "Palo Alto Tiny BASIC del Dr. Wang" (PDF) . Era de la interfaz . págs. 92-108.
  86. ^ Allison, Dennis (enero de 1976). "Notas de diseño para Tiny BASIC". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 9.
  87. ^ Allison, Dennis (enero de 1976). "Construye tu propio BÁSICO". Diario del Dr. Dobb . vol. 1, núm. 1. pág. 8.
  88. ^ Steil, Michael (13 de enero de 2015). "Microsoft BASIC para el código fuente original 6502".
  89. ^ Hardiman, Roger. "Altair BASIC 3.2 (4K) - Desmontaje comentado". pag. 1.11. Archivado desde el original el 5 de noviembre de 2001.
  90. ^ a b C Wozniak 1977, pag. 42.
  91. ^ Paul R. Santa María. "Desmontaje básico del Apple II Integer" (PDF) . Consultado el 14 de septiembre de 2020 .[ enlace muerto permanente ]
  92. ^ Wilkinson, O'Brien y Laughton 1983, pág. 5.
  93. ^ Vickers 1983, pag. 7–8.
  94. ^ ab "El intérprete BÁSICO - Explicado" . Consultado el 15 de septiembre de 2020 .
  95. ^ "Parte 1 del intérprete BÁSICO LLL 8080" (PDF) .
  96. ^ Raskin 1978, pág. 118.
  97. ^ Wang, Li-Chen (mayo de 1976). "Palo Alto Tiny BÁSICO". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (5): 12–25.
  98. ^ Raskin 1978, pág. 38.
  99. ^ "Parte 1 del intérprete BÁSICO LLL 8080" (PDF) .
  100. ^ "Parte 1 del intérprete BÁSICO LLL 8080" (PDF) .
  101. ^ "¿Cuál es la referencia más antigua a PEEK, POKE y USR?" . Consultado el 15 de agosto de 2020 .
  102. ^ 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 utilizar para almacenar información orientada a bytes. Cuando inicialice BASIC, responda la pregunta ¿TAMAÑO DE MEMORIA? con la cantidad de memoria en su ALTAIR menos la cantidad de memoria que desea usar como almacenamiento para datos formateados en bytes."
  103. ^ Raskin 1978, pág. 27.
  104. ^ "BÁSICO de Robert Uiterwyk".
  105. ^ Galés, David; Galés, Teresa (2007). Preparando la bomba: cómo los entusiastas del TRS-80 ayudaron a impulsar la revolución de las PC . pag. 7.
  106. ^ Caña, Mateo. “Nivel I BÁSICO”. TRS-80.org . Consultado el 27 de agosto de 2017 .
  107. ^ Arnold y Wadsworth 1976, pág. 10.1.
  108. ^ Arnold y Wadsworth 1976, capítulo 10.
  109. ^ "Rutinas de coma flotante para el 6502". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (7). Agosto de 1976.
  110. ^ "Parte 1 del intérprete BÁSICO LLL 8080" (PDF) .
  111. ^ 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.
  112. ^ "Documentos GE-2xx". www.bitsavers.org . CPB-267_GE-235-SystemManual_1963.pdf, pág. IV-4.
  113. ^ Lorenzo 2017, pag. 149.
  114. ^ Steil, Michael (20 de octubre de 2008). "Cree su propia versión de Microsoft BASIC para 6502".
  115. ^ Raskin 1978, pág. 61.
  116. ^ MITS Altair BÁSICO . Albuquerque, Nuevo México: MITS. 1975. pág. 37.
  117. ^ Gravamen, David (1986). El manual básico (Tercera ed.). San Diego, California: Compusoft. pag. 589.ISBN _ 0-932760-33-3.
  118. ^ Raskin 1978, pág. 94.
  119. ^ MITS Altair BÁSICO . Albuquerque, Nuevo México: MITS. 1975. pág. 31.
  120. ^ abc Manual de referencia de HP 2000/Access BASIC (PDF) . Hewlett Packard. Mayo de 1976., N.º de pieza 22687-90001
  121. ^ North Star BASIC versión 6 (PDF) . Corporación Estrella del Norte. 1977. Archivado desde el original (PDF) el 5 de marzo de 2020 . Consultado el 1 de agosto de 2020 .
  122. ^ El manual de referencia de ATARI BASIC. Atari Inc. 1980. Archivado desde el original el 1 de mayo de 2005 . Consultado el 1 de agosto de 2020 .
  123. ^ "Variables enteras, de coma flotante y de cadena". Manual del programador C64. Comodoro.
  124. ^ Raskin 1978, pág. 89.
  125. ^ "Crea tu propia versión de Microsoft BASIC".
  126. ^ Gravamen, David (1977). Manual de usuario para el nivel I (Primera ed.). Fort Worth, TX: Tandy Corporation. págs. 105-108, 137 . Consultado el 9 de agosto de 2020 .
  127. ^ Raskin 1978, pág. 31.
  128. ^ Raskin 1978, pág. 32.
  129. ^ Raskin 1978, pág. 33.
  130. ^ ab Raskin 1978, pág. 120.
  131. ^ Lorenzo 2017, pag. 120.
  132. ^ "¿Se considerarían sistemas operativos algunos intérpretes BÁSICOS para microcomputadoras?" . Consultado el 7 de agosto de 2020 .
  133. ^ ab Raskin 1978, pág. 36.
  134. ^ Mini 1977, pag. 18.
  135. ^ "NIBL". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (10). Noviembre de 1976.
  136. ^ "Problemas con BÁSICO". Revista de calistenia y ortodoncia informática del Dr. Dobb, Running Light Without Overbyte . 1 (2). Febrero de 1976.
  137. ^ "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 .
  138. ^ Lorenzo 2017, pag. 137.
  139. ^ Helmers 1978, pag. 18.
  140. ^ Weyhrich 2001.
  141. ^ Raskin 1978, pág. 100.
  142. ^ Raskin 1978, pág. 15.
  143. ^ Raskin 1978, pág. 52.
  144. ^ Raskin 1978, pág. 107.
  145. ^ Manual de 1980, Apéndice B.
  146. ^ "¿Qué tipo de intérprete eran la mayoría de las implementaciones BÁSICAS de 8 bits?" . Consultado el 9 de agosto de 2020 .
  147. ^ 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.
  148. ^ Pittman, Tom (1981). "El primer libro de pequeños programas BÁSICOS". Retrotecnología.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 en busca de GOTO, GOSUB y RETURN. Un simple parche al intérprete lo convierte en un algoritmo de búsqueda binaria , lo que acelera aproximadamente un orden de magnitud en el tiempo de ejecución. Los cambios necesarios se enumeran en el Apéndice.
  149. ^ ab Rugg, Tom; Feldman, Phil (octubre de 1977). "Comparaciones de tiempos BÁSICAS... revisadas y actualizadas". Kilobaudios . págs. 20-25.
  150. ^ ab Rugg, Tom; Feldman, Phil (junio de 1977). "Comparaciones BÁSICAS de tiempos... información para fanáticos de la velocidad". Kilobaudios . págs. 66–70.
  151. ^ Gilbreath, Jim (septiembre de 1981). "Un punto de referencia del lenguaje de alto nivel". Byte . pag. 192.
  152. ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencias". Computación creativa . pag. 260.
  153. ^ abcde Wilkinson 1985, pág. 139.
  154. ^ Ahl, David (noviembre de 1983). "Prueba de comparación de referencia". Computación creativa . págs. 259–260.
  155. ^ Ahl, David (enero de 1984). "Parámetro de referencia de la informática creativa". Computación creativa . pag. 12.
  156. ^ Wilkinson, O'Brien y Laughton 1983, pág. 17.
  157. ^ Crawford 1982, pág. 8.45.
  158. ^ Ganador, Lane (1982). "De Re Atari, Capítulo 10: Atari BASIC". Atari, Inc.

Bibliografía

Otras lecturas

Código fuente y documentos de diseño, en orden cronológico de lanzamiento de las implementaciones BASIC: