Minimal BASIC es un dialecto del lenguaje de programación BASIC desarrollado como estándar internacional . El esfuerzo comenzó en ANSI en enero de 1974 y en septiembre se unió a él un grupo paralelo en ECMA . El primer borrador se publicó para comentarios en enero de 1976 y el estándar final, conocido alternativamente como ANSI X3.60-1978 o ECMA-55 , se publicó en diciembre de 1977. La Oficina de Normas de los Estados Unidos introdujo el conjunto de pruebas NBSIR 77-1420 para garantizar que las implementaciones cumplieran con la definición.
En ese momento, Microsoft BASIC estaba empezando a tomar el control del mercado después de su introducción en los primeros microordenadores en 1975, y especialmente después de la introducción de la "trinidad" de 1977 - el Apple II , Commodore PET y TRS-80 , todos los cuales consolidarían los BASIC de estilo MS como el estándar de facto . La estandarización ISO de Minimal BASIC comenzó como ISO 6373:1984 pero fue abandonada en 1998. Un esfuerzo para producir un dialecto más potente, Full BASIC (también conocido como Standard BASIC), no fue lanzado hasta enero de 1987 y tuvo poco impacto en el mercado.
El Dartmouth BASIC se introdujo en mayo de 1964 en el Dartmouth College como un lenguaje interactivo mejorado inspirado en FORTRAN . [1] El sistema reunía varios conceptos que eran temas candentes en la industria informática en ese momento, en particular el uso compartido del tiempo para permitir que varios usuarios accedieran a una sola máquina y la interacción directa con la máquina mediante terminales de computadora . General Electric , que suministró la computadora GE-225 en la que funcionaba, comercializó una ligera variación para usuarios comerciales y tuvo una aceptación inmediata. [2] Varias otras empresas pronto introdujeron sus propios sistemas similares, vendiendo tiempo en línea por minuto. A fines de la década de 1960, había una versión de BASIC para casi todas las plataformas de mainframe y servicios en línea . [3] [4]
En 1966, Hewlett-Packard (HP) presentó una nueva minicomputadora , la HP 2100. Pensada para ser utilizada en laboratorios y fábricas, la compañía se sorprendió al descubrir que la mayoría se vendía para procesamiento comercial. [5] Buscando aprovechar esto, en noviembre de 1968 presentaron la HP 2000, un sistema que utilizaba dos CPU HP 2100 que implementaban tiempo compartido para admitir hasta 32 usuarios. El sistema funcionaba de manera similar al modelo Dartmouth, utilizando una máquina para controlar la entrada/salida y otra para ejecutar los programas. A diferencia de las versiones Dartmouth que eran compiladores , HP Time-Shared BASIC era un intérprete . [6]
Los intérpretes se hicieron rápidamente comunes en máquinas más pequeñas y minicomputadoras. Otros fabricantes copiaron rápidamente el dialecto de HP, en particular Data General para su serie Nova , que tuvo mucho éxito a principios de los años 70. Wang Laboratories también tuvo cierto éxito con sus máquinas BASIC dedicadas, la serie Wang 2200. Cada versión tenía sus propias diferencias. Una de las que se resistieron fue Digital Equipment Corporation (DEC), que había estado involucrada con el programa JOSS en el Stanford Research Institute (SRI) e introdujo su lenguaje FOCAL basado en él. A principios de los años 70, el éxito de BASIC obligó a DEC a introducir un BASIC propio con su propio conjunto de modificaciones. [7]
La divergencia de BASIC generó interés en producir un estándar para intentar unirlos nuevamente. Las primeras reuniones sobre esta posibilidad tuvieron lugar en enero de 1974 en el marco del recién formado grupo de trabajo ANSI X3J2. Esto llevó a que se estableciera un grupo correspondiente en septiembre de 1974 en Europa en el marco de la ECMA, TC 21. Los dos grupos se mantuvieron en estrecho contacto durante todo el proceso y publicaron sus respectivos estándares al mismo tiempo. El primer borrador fue publicado por ANSI en enero de 1976. La versión final se preparó en junio de 1977 y fue adoptada oficialmente por la ECMA el 14 de diciembre de 1977. [8]
Los primeros años de X3J2 se dedicaron (en retrospectiva, algunos podrían decir que fueron "desperdiciados") a estandarizar lo que equivale al Dartmouth Basic original de 1964... Minimal Basic era más un juguete que un lenguaje real.
Arthur Luehrmann [9]
El BASIC minimalista era esencialmente el BASIC Dartmouth original de 1964 escrito como un estándar formal que utilizaba una forma Backus-Naur extendida con un conjunto de pruebas asociado para garantizar que la implementación cumpliera con la definición. Aclaraba conceptos que antes no estaban definidos, como si GO TO
y GOTO
eran lo mismo, en este caso afirmando que goto statement = GO space* TO line number
, significaba GOTO
, GO TO
e incluso GO TO
eran idénticos. [10] Cuando existían diferencias entre las implementaciones, como en el manejo de las FOR
declaraciones o si se requerían o no espacios entre palabras clave y valores, el estándar siempre seleccionaba el patrón Dartmouth. [9]
Siempre se entendió que el BASIC Minimal no era realmente útil por sí solo, ya que carecía de muchas características comunes como la manipulación de cadenas . Estas características más avanzadas serían el foco del esfuerzo posterior, Full BASIC , que comenzó a trabajarse seriamente después de la publicación de Minimal. Full BASIC no era simplemente una versión de Minimal con más características, sino que se basaba en los esfuerzos de BASIC Estructurado de Dartmouth y estaba diseñado para ofrecer programación estructurada para respaldar la construcción de programas grandes. A diferencia de Minimal, el BASIC Estándar fue diseñado para actualizar significativamente el BASIC. [11]
Mientras se desarrollaba el esfuerzo del BASIC mínimo, se lanzó el primer microordenador ampliamente disponible, el Altair 8800. Poco después, Microsoft lanzó Altair BASIC . En el transcurso del año, se lanzaron docenas de nuevos microordenadores y otras tantas versiones nuevas de BASIC. Para cuando se ratificó el estándar Minimal, ya había decenas de miles de máquinas que ejecutaban alguna variación del lenguaje. El dialecto que seguía cada intérprete en particular generalmente se basaba en las máquinas utilizadas para desarrollarlo; MS BASIC se desarrolló en un PDP-10 [12] y tiene muchas características del BASIC-PLUS de DEC , mientras que Apple BASIC fue escrito por Steve Wozniak basándose en un manual de HP y utiliza el sistema de manejo de cadenas de HP. [13] [a]
El primer borrador del estándar mínimo fue publicado para comentarios en enero de 1976. Se utilizaron numerosos comentarios para actualizar el borrador y su publicación final se preparó en junio de 1977 y fue ratificada formalmente por la ECMA el 14 de diciembre de 1977. [14] La Oficina de Normas de los EE. UU. publicó el conjunto de pruebas NBSIR 77-1420 para permitir que los proveedores probaran el cumplimiento del estándar. [15] Como no había proveedores de microcomputadoras en los grupos de estándares, el sistema se utilizó principalmente en versiones de mainframe, que invariablemente tenían muchas extensiones. Una de las pocas versiones de microcomputadoras que implementaron el estándar fue BASIC-80 de Microsoft para Zilog Z80 , mejor conocido como MBASIC , que obtuvo el cumplimiento del estándar en su versión 5.0. [16]
Después del lanzamiento de Minimal, los grupos de normalización dirigieron su atención al BASIC completo, pero esto se prolongó durante años. El esfuerzo se realizó tan lentamente que los participantes de Dartmouth se fueron y lanzaron su propia versión del estándar aún emergente como True Basic en 1984. Esta versión estaba plagada de errores y era confusa, lo que llevó a Jerry Pournelle a ridiculizarla como una "locura" [17] y a John Dvorak a descartarla como "triste" y "condenada al fracaso". [18] Los planes para trasladar el BASIC mínimo a la Organización Internacional de Normalización (ISO) fueron abandonados, [19] y el grupo ANSI se disolvió dejando los estándares originales inactivos. [20]
El BASIC minimalista se basa en gran medida en las primeras versiones del BASIC Dartmouth y sigue sus convenciones. El estándar aclara principalmente ciertas limitaciones en un esfuerzo por producir un estándar que pueda ejecutarse en casi cualquier máquina. La siguiente descripción supone un conocimiento básico de los BASIC comunes y destaca las diferencias en el Minimal.
Al igual que la mayoría de las implementaciones de BASIC, Minimal se basa en la edición del código fuente subyacente mediante un editor de líneas y, por lo tanto, cada línea de código en Minimal debe tener un número de línea . El estándar permite números de línea entre 0 y 9999. A diferencia de algunos intérpretes, Minimal requiere un espacio antes de cada palabra clave y un espacio o final de línea después de esta. [21]
Las palabras clave incluyen REM
, DIM
, OPTION
, DEF
, LET
, PRINT
, INPUT
, READ
, DATA
, RESTORE
, IF...THEN
, FOR...TO...STEP...NEXT
, GO TO
, GO SUB...RETURN
y , ON...GO TO
y . [ 22 ]ON...GO SUB...
RANDOMIZE
STOP
END
Los programas deben tener un END
como su última línea. [23] INPUT
puede tener una cadena de solicitud opcional, pero eso depende de la implementación, no es parte del estándar. [24] RESTORE
no permitía un número de línea, una opción vista en la mayoría de los intérpretes de la época. FOR...NEXT
Los bucles son probados al máximo y no ejecutarán su cuerpo si la prueba falla en la primera iteración. [25]
Los nombres de las variables pueden constar de una sola letra o de una letra y un solo dígito. No se permiten nombres de variables de dos letras. [26] Los números están limitados al rango 1E-38 a 1E38. [21] Las variables de cadena pueden tener un máximo de 18 caracteres. [27] Las matrices pueden ser unidimensionales o bidimensionales utilizando DIM
, pero solo se admiten matrices numéricas. A todas las variables se les asigna normalmente espacio en una matriz unidimensional asociada sin utilizar DIM
, se les da espacio para 11 elementos, índices 0 a 10. El límite inferior de las matrices es normalmente 0, pero utilizando OPTION BASE 1
puede cambiar el índice a 1. [28]
Hay 11 funciones definidas; ABS
, ATN
, COS
, EXP
, INT
, LOG
, RND
, SGN
, SIN
, SQR
y TAN
. [29] Los operadores incluyen =
, <=
, >=
, <>
. Las cadenas solo se podían comparar para valores iguales o desiguales, no se admitían comparaciones más grandes o más pequeñas. Tenga en cuenta que los operadores lógicos, AND
, OR
y NOT
, no se suministran. [10]
Se admitían funciones definidas por el usuario DEF FN
, pero solo para números. No había funciones integradas ni de usuario disponibles para cadenas. [30]
Este código implementa la Criba de Eratóstenes : [31]
1000 REM TAMIZ DE ERATOSTENES 1010 REM MODIFICADO DE LA DEMOSTRACIÓN RÁPIDA DEL PROYECTO DE MATEMÁTICA BÁSICA 1020 REM 2010 REM L ES EL LÍMITE DE LA TAMIZ 2020 REM ENCONTRAREMOS TODOS LOS NÚMEROS PRIMOS HASTA L 2030 SEA L = 1000 2040 REM N ES LA TAMIZ EN SÍ 2050 DIM N ( 1000 ) 2060 REM LLENE LA TAMIZ CON TODOS LOS NÚMEROS HASTA L 2070 PARA I = 1 A L 2080 SEA N ( I ) = I 2090 SIGUIENTE I 2100 REM COMIENCE CON EL PRIMER NÚMERO PRIMO: 2 2110 SEA P = 2 2120 IMPRIMA P , 2130 REM "CRUZAR OUT" MULTIPLOS DE P 2140 PARA I = P A L PASO P 2150 SEA N ( I ) = 0 2160 SIGUIENTE I 2170 REM ENCONTRAR EL SIGUIENTE NÚMERO NO TACHADO 2180 SEA P = P + 1 2190 SI P = L ENTONCES 2220 2200 SI N ( P ) <> 0 ENTONCES 2120 2210 IR A 2180 2220 IMPRIMIR 2230 FIN