stringtranslate.com

BÁSICO completo

Full BASIC , a veces conocido como Standard BASIC o ANSI BASIC , es un estándar internacional que define un dialecto del lenguaje de programación BASIC . Fue desarrollado por el grupo X3.60 del Instituto Nacional Estadounidense de Estándares (ANSI) en asociación con la ECMA europea . Describe una versión avanzada de BASIC con muchas características que incluyen programación estructurada , matemáticas matriciales , entrada/salida para manejo de archivos y muchas otras opciones.

La estandarización BASIC de ANSI fue un proceso de dos etapas. El primero, llevado a cabo como Minimal BASIC a partir de 1974, fue un esfuerzo por definir y estandarizar claramente el lenguaje Dartmouth BASIC original para que pudiera implementarse correctamente en diferentes plataformas. Después de su lanzamiento a finales de 1977, la atención se centró en el BASIC completo, que se basaría en el BASIC estructurado más potente que se estaba desarrollando en Dartmouth College . La complejidad del sistema y las numerosas adiciones promovidas por los miembros del comité de normas hicieron que el esfuerzo se estancara y el primer borrador de norma no estuvo listo hasta 1986, con cuatro años de retraso.

La norma fue ratificada el 26 de junio de 1986 como ECMA-116 [1] y en enero de 1987 como ANSI X3.113-1987 . Fue completamente ignorado; la revolución de los microordenadores se había producido mientras se discutía la especificación y, a principios de los años 1980, Microsoft BASIC, que se ejecutaba en decenas de millones de ordenadores domésticos , ya había aparecido y desaparecido. Al ver cómo se prolongaba el proceso, los participantes de Dartmouth se dedicaron a producir True BASIC basado en partes del estándar, pero esto tuvo poca utilidad. Los estándares de facto como el de Microsoft dominaron el mercado y formaron la base para lenguajes más nuevos como Microsoft Visual Basic que incorporaban conceptos similares. [ cita necesaria ]

Historia

BÁSICO Mínimo

La introducción de Dartmouth BASIC en 1964 combinó una serie de conceptos emergentes en el campo de la informática, incluido el tiempo compartido y la interacción directa con el usuario, conocido en ese momento como "interfaz conversacional". General Electric , que suministró la computadora central GE 235 en la que se ejecutaba, utilizó una versión modificada del sistema de Dartmouth para iniciar una oficina de servicios que eventualmente evolucionaría hasta convertirse en el servicio en línea GEnie . Muchas otras empresas, entre ellas Tymshare y CompuServe , introdujeron rápidamente sus propios servicios BASIC alojados, siguiendo el modelo de Dartmouth. [2] [3]

En 1968, Hewlett-Packard (HP) presentó las minicomputadoras de la serie HP 2000 , que ofrecían las mismas características de los sistemas mainframe anteriores en un sistema de montaje en bastidor que podía configurarse de forma completa por alrededor de 100 000 dólares (equivalente a 876 172 dólares en 2023). . [4] Su HP Time-Shared BASIC tenía una serie de diferencias con respecto a Dartmouth, [5] y pronto fueron copiadas por otros mini proveedores como Data General . Uno de los que se resistió fue Digital Equipment Corporation (DEC), que no introdujo un BASIC de su propio diseño hasta 1972. Esta versión, BASIC-PLUS, era diferente de los dialectos HP o Dartmouth. A principios de la década de 1970, se utilizaban en el mercado tres dialectos principales y docenas de variaciones menores.

En enero de 1974 se formó un nuevo grupo bajo el paraguas de ANSI para definir un estándar único BÁSICO. [6] El equipo de Dartmouth formó una parte central del grupo. Dartmouth estaba trabajando en una versión muy ampliada de BASIC conocida como BASIC Estructurado (SBASIC) que se convirtió en la base de ANSI. En ese momento, pocos dialectos admitían sus numerosas características nuevas. El grupo decidió que llevaría algún tiempo acordar un estándar completo basado en SBASIC, por lo que el esfuerzo de ANSI BASIC se dividió en dos hitos. El primero, Minimal BASIC , produciría un estándar que incluyera sólo las características más básicas que se requerirían en cualquier implementación. Incluso las funciones que Dartmouth admite desde hace mucho tiempo, como las matemáticas matriciales, quedarían fuera. El borrador del estándar para Minimal BASIC se publicó en enero de 1976, el borrador final en julio de 1977 y fue ratificado en diciembre. Arthur Luehrmann, un físico de Dartmouth College que fue un defensor de BASIC y parte del grupo ANSI, declaró más tarde:

"Los primeros años de X3J2 se dedicaron (en retrospectiva, algunos podrían decir 'desperdiciados') a estandarizar lo que equivale al Dartmouth Basic original de 1964... Minimal Basic era más un juguete que un lenguaje real". [7]

BÁSICO completo

Luego, el grupo centró su atención en Full BASIC. En ese momento, la revolución de las microcomputadoras estaba en pleno apogeo y millones de máquinas que ejecutaban Microsoft BASIC o un BASIC similar estaban ingresando al mercado. [a] A pesar de esto, ninguno de los participantes era vendedor o proveedor de microcomputadoras. En cambio, los participantes siguieron siendo proveedores de mainframes como IBM , Control Data y General Electric , proveedores de minicomputadoras como Digital Equipment Corporation (DEC), Data General y Wang Laboratories , y otras empresas muy grandes como 3M , American Express y Kodak . [9]

El esfuerzo inmediatamente entró en conflicto con el efecto del segundo sistema, ya que cada miembro comenzó a agregar su propia lista de características "imprescindibles". Algunos querían que el lenguaje continuara la tradición de estar dirigido a usos educativos que se ejecutan en máquinas pequeñas y deseaban un lenguaje simple con soporte de archivos rudimentario y características similares. Otros eran usuarios de mainframe que querían admitir programas modulares cargables y otras características de programación expansivas para competir con lenguajes como COBOL o FORTRAN y al mismo tiempo ofrecer una mejor manipulación de cadenas . Un tercer grupo estaba interesado principalmente en aplicaciones comerciales, especialmente usuarios europeos donde BASIC se había convertido en el principal lenguaje comercial, y exigieron que el sistema incluyera un manejo extensivo de archivos y matemáticas decimales que no sufrieran problemas de redondeo. [10]

John G. Kemeny y Thomas E. Kurtz , los diseñadores originales de BASIC y miembros del grupo ANSI, criticaron el proceso. En un artículo de 1982, Kurtz escribió sobre cómo incluso cuestiones aparentemente pequeñas se habían convertido en grandes controversias. Usó el ejemplo de la OPTION BASEdeclaración. Cuando las matrices se agregaron por primera vez a BASIC, comenzaban en el índice 1, de modo que DIM A(3)formaban una matriz con tres ranuras, 1, 2 y 3. En algunos casos, un índice 0 es más natural, por lo que OPTION BASE 0se agregó en versiones posteriores del código Dartmouth. por lo que la misma definición tendría cuatro espacios, del 0 al 3. Durante Minimal, hubo un debate continuo sobre cuál debería ser la base predeterminada y finalmente se seleccionó 0. Cinco años más tarde, durante los esfuerzos de Full, se decidió que las matrices podrían definir cualquier límite inferior utilizando una nueva sintaxis DIM YEAR(1970 TO 1990). Esto eliminó la demanda OPTION BASE 0y se tomó la decisión de cambiar el valor predeterminado a 1 nuevamente. [11]

Inicialmente, el grupo X3.60 tenía como objetivo la fecha del verano de 1982 para la primera copia de revisión técnica, que se enviaría al comité ANSI X3 en el otoño. Durante este período se enviaría la norma propuesta y se aceptarían comentarios del público. El borrador final se enviaría de nuevo a X3 en 1983 para su ratificación ese año. [12] Esto resultó bastante optimista. El primer borrador no se publicó hasta enero de 1985 [1] y el borrador final en 1986 para su ratificación en enero de 1987. [13] Durante este tiempo, el estándar creció tanto que finalmente se dividió en un módulo principal y cinco complementos opcionales. Además, incluía manejo de archivos complejos, soporte informático en tiempo real, matemáticas decimales fijas, comandos de edición opcionales e incluso un módulo de gráficos independiente de la plataforma. [14]

El resultado fue criticado durante el período de comentarios públicos. Un crítico señaló que había crecido tanto que "el lenguaje resultante rivaliza en complejidad con cualquier lenguaje de programación actual" y que "cumplir con todo el estándar se compararía con los proyectos de compilación más importantes jamás intentados". [15] Continúa describiendo, por ejemplo, cómo hay no menos de cinco formas diferentes de describir una subrutina, tres para definir la longitud máxima de una cadena y dos formas de definir una matriz. [16] Refiriéndose a la cuestión de los límites de la matriz, se observa que el comité estuvo de acuerdo en que la solución adoptada era "intolerable" e hizo planes para arreglarla "más tarde". [17]

No hay evidencia de que alguno de los participantes realmente haya creado una versión conforme después del lanzamiento del estándar y cualquier mención de un esfuerzo en curso desaparece rápidamente. Desde 1987, las únicas menciones del estándar son que existe y que True BASIC abarca algunas de sus características. Además, con millones de micros ejecutando alguna variación del estándar de facto de MS en este momento, el nuevo estándar ANSI fue visto como la solución no estándar. [18] Gran parte del éxito original de BASIC en las microplataformas fue que permitía escribir programas a partir del código fuente impreso , pero a mediados de la década de 1980 esto había sido reemplazado por aplicaciones retractiladas y la necesidad de BASIC como sistema de distribución. se había desvanecido. [19] En el lado de los sistemas grandes, el uso original como lenguaje de enseñanza estaba siendo reemplazado cada vez más por Pascal , ya que los problemas externos que BASIC pretendía abordar, como la interactividad y la edición en línea, ahora estaban disponibles en la mayoría de los sistemas. [20]

Verdadero BÁSICO

El proceso de estándares fue tan lento que incluso el autor de Structured BASIC finalmente lo abandonó. A Stephen Garland se le pidió que preparara una serie de exámenes del College Board para estudiantes de secundaria y, en su lugar, los escribió en Pascal . Esto fue algo controvertido dado que muchas computadoras de uso generalizado, como la Commodore 64 y la TRS-80, no tenían una implementación completa de Pascal. Luehrmann, criticó el esfuerzo y sugirió un curso más general que sería aplicable a más estudiantes. [21]

A los participantes de Dartmouth en el grupo ANSI les quedó claro que el esfuerzo no tenía esperanzas de completarse en un período de tiempo razonable. Dejaron el esfuerzo y comenzaron una nueva empresa para llevar su versión del lenguaje al mercado como True BASIC . True BASIC combinó muchas de las características del estándar principal pero también realizó una serie de cambios propios. Entre los más notables estaba que la numeración de líneas ahora era opcional. El lenguaje no fue bien recibido, y muchas críticas expresaron las mismas preocupaciones sobre el exceso de funciones que se habían planteado sobre el estándar Full BASIC. Jerry Pournelle lo calificó de "locura" [22] y John Dvorak lo calificó de "triste" y "condenado al fracaso". [23]

Descripción

Edición de programas

Al igual que las versiones anteriores de BASIC, Full BASIC fue diseñado para funcionar en un entorno de editor de líneas y, por lo tanto, utiliza números de línea para indicar líneas individuales o rangos de líneas que se editarán o eliminarán. Los números de línea podían oscilar entre 1 y 50.000, en contraste con Minimal, que iba de 0 a 9999. Esto significaba que los programas Minimal válidos que usaban la línea 0 no eran válidos en su totalidad. Las líneas lógicas tenían al menos 132 caracteres. Las líneas lógicas se pueden extender a varias líneas físicas utilizando el "carácter de continuación", el signo comercial. Desafortunadamente, el signo comercial también fue seleccionado como operador de concatenación de cadenas, lo que complicó el analizador. [24]

Se incluyeron comandos de edición adicionales RENUMBERy DELETE, que en ese momento eran comunes en los dialectos de microcomputadoras más nuevos. Un nuevo concepto fue EXTRACT, que copiaba una serie de líneas en un nuevo archivo y las eliminaba del programa original, lo que permitía extraerlas a un subprograma. [25] Estos podrían luego invocarse usando el CHAINcomando. CHAINTambién podría incluir un opcional WITHseguido de una lista de parámetros, en cuyo caso se esperaba que devolviera un valor en una variable con el mismo nombre que el programa (ver "Estructura", más abajo). [26]

Funcionalidad básica

Muchas de las palabras clave de uso común que se encuentran en Minimal u otros dialectos permanecieron; PRINT, INPUTy DATApor READejemplo. Hubo numerosos cambios menores en estos comandos. Por ejemplo, en el momento de la edición, las palabras clave se pueden escribir en mayúsculas o minúsculas, o cualquier combinación. Como era el caso en el pasado, normalmente se mostraban en mayúsculas, mientras que una nueva convención era utilizar mayúsculas y minúsculas para nombres de variables de varios caracteres. [27]

Dartmouth BASIC introdujo la REMdeclaración para comentarios en línea y esto fue universalmente apoyado en otros dialectos. Muchos dialectos también agregaron una forma corta, comúnmente usando comillas simples, 'como se ve en Microsoft BASIC. Para Completo, seleccionaron el signo de exclamación, !para esta función, [28] aunque no parece haber razón para no usar la comilla simple ya que no se usa de otro modo; las cadenas no permiten delimitadores de comillas simples, por ejemplo. [29] Un cambio más controvertido fue que la LETpalabra clave ahora era obligatoria para todas las tareas para simplificar el análisis, mientras que en todos los demás dialectos LETera opcional. Esto incluía Minimal, por lo que cualquier código Minimal que usara este atajo era incompatible con Full. [30]

Además del conjunto relativamente pequeño de 23 palabras clave y 11 funciones de Minimal, Full agregó docenas propias, para un total de 176 palabras clave (que definen 161 conceptos separados), 38 funciones matemáticas y 14 funciones de cadena si se incluyeran todas las extensiones. [31] Una lista simple de palabras clave, dispuesta en tres columnas, ocupa dos páginas del documento de estándares. [32]

Estructura

La principal diferencia entre Full y Minimal fue la adición de construcciones de programación estructuradas orientadas a bloques. En Minimal y en la mayoría de los intérpretes BASIC, el programa lógicamente consistía en líneas de código independientes y uno podía comenzar la ejecución en cualquier punto ingresando GOTOcualquier número de línea. La única excepción a esta regla fue el FOR...NEXTbucle, donde todas las líneas desde FOR hasta NEXT se consideraban lógicamente como un solo bloque de código. La ramificación hacia o fuera de un bloque FOR daría como resultado un comportamiento extraño, generalmente dependiente de la implementación, pero generalmente algún tipo de error como "SIGUIENTE SIN FOR". [33]

En su totalidad, no se permite la bifurcación a un bloque FOR...NEXT, ni tampoco la bifurcación sin utilizar la EXITdeclaración. Se suponía que las implementaciones verificarían tales declaraciones y no las permitirían, por ejemplo, encontrando casos en los que codificar GOTOed en un bucle. Es difícil comprobar dicho código en un intérprete que normalmente examina el programa línea por línea; comprobar si hay ramas en un bloque desde otro código del programa normalmente requeriría un análisis de todo el programa como un compilador. [dieciséis]

En su totalidad, se ampliaron varias palabras clave existentes y se agregaron otras para proporcionar estructuras de bloques adicionales. Notable fue la multilínea IF...THEN...ELSE...END IF, que permitía ejecutar múltiples líneas de código si la condición se cumplía o fallaba. SELECT...CASE...CASE ELSE...END SELECTse agregó para hacer árboles de decisión, [34] que anteriormente se habrían implementado usando ON...GOTOo múltiples IFs para seleccionar una línea para ejecutar. FOR...NEXTLos bucles permanecieron como estaban en Mínimo, pero DO...LOOPse agregó uno nuevo con las variedades DO WHILE...LOOPprobadas en la parte superior e inferior DO...LOOP UNTIL.... Ahora se puede salir de todos los bucles de forma segura utilizando los comandos EXIT FORy EXIT DO. [35]

Además de estos cambios en las estructuras de bloques, Full también agregó palabras clave para definir procedimientos, funciones y bloques de programa. Los programas en su conjunto ahora se abrían con la PROGRAMpalabra clave opcional seguida del nombre del programa y terminaban, como antes, con END. Las rutinas se pueden construir SUB...END SUBy llamar usando CALL name. Las funciones de varias líneas se crearon FUNCTION...END FUNCTIONy no declararon un tipo de retorno, ya que era parte del nombre: los nombres de las funciones de cadena terminaban con el signo de dólar. El valor de retorno se proporcionó estableciendo una variable con el mismo nombre que la función; por ejemplo, una función llamada "DOIT" contendría una línea como LET DOIT=1. Las funciones podían llamar a otras funciones y a sí mismas, lo que significa que el lenguaje era naturalmente recursivo . [36] Full también conservó el estilo anterior de definiciones de funciones de una línea usando la DEFpalabra clave, pero eliminó el requisito de que el nombre de la función comience con "FN". Por ejemplo, DEF AVERAGE(X,Y)=(X+Y)/2. [37]

En los BASIC anteriores, no existía el concepto de alcance y todas las variables eran globales . Esto no es adecuado para la construcción de programas modulares grandes, ya que una sección de código puede haberse escrito usando nombres de variables comunes como Iy podría cambiar el valor de esa variable. Como la variable es global, conserva el valor modificado cuando vuelve al código original. Un concepto clave de la programación estructurada es la variable local , que mantiene su valor separado de otras variables con el mismo nombre en otras ubicaciones del programa compuesto. Como BASIC no tenía el concepto de alcance, muchos programas se basaron en el comportamiento global y utilizaron variables para pasar información dentro y fuera de las subrutinas. Para permitir ambos conceptos en el nuevo lenguaje, Full BASIC agregó la EXTERNALpalabra clave que podría agregarse a una función o subrutina y convirtió cualquier variable dentro en local. [38] Como los programas BASIC generalmente colocaban subrutinas al final del código fuente del programa, DECLAREse agregó la palabra clave para proporcionar declaraciones directas . [39]

Tipos de datos y variables

Full BASIC introdujo nombres de variables largos, liberándose finalmente de los nombres de una sola letra o dígitos del pasado. Estableció el nuevo límite en 31 caracteres. Una pequeña desventaja de este cambio fue que las palabras clave debían tener espacios entre ellas, mientras que la mayoría de las versiones anteriores permitían omitir los espacios. Esto se debía a que con nombres de una sola letra una línea como FORS=1TOApuede analizarse como "FORS", que no puede ser una variable en una variedad de BASIC de dos letras. En su totalidad, esto debería escribirse FOR S=1 TO Aporque "FORS" es un nombre de variable válido. [40] Como era el caso en BASIC anteriores, los tipos de datos en Completo se indicaban mediante sufijos en el nombre de la variable. Minimal había evitado este problema al tener solo variables numéricas, pero Full también incluía cadenas, indicadas mediante el signo de dólar, por ejemplo A$. [27]

BASIC completo requería matemáticas decimales para la implementación predeterminada del sistema de punto flotante . Como esto no era universalmente compatible con el hardware, especialmente en minis y micros, también agregó lo OPTION ARITHMETIC NATIVEque indica que las matemáticas deben realizarse utilizando la implementación de punto flotante predeterminada del sistema, cualquiera que sea. Se puede volver al modo BCD con OPTION ARITHMETIC DECIMAL. Esto se suma a la opción matemática de punto fijo, si está instalada. Por lo demás, las variables numéricas y de cadena funcionaban como las de otros BASIC. [41]

Una nueva incorporación fue la extensión matemática de punto fijo, que permitía que las variables tuvieran una precisión específica. Esto se activó usando el comando OPTIONAL ARITHMETIC FIXED[b] seguido de un asterisco y un especificador de formato, por ejemplo, OPTION ARITHMETIC FIXED*8.2establecería todas las variables numéricas para que tuvieran 8 dígitos de precisión y dos decimales. Dicha declaración debe colocarse antes de cualquier código matemático en el resto del programa. [43] Además, cualquier variable individual podría definirse individualmente usando algo como DECLARE NUMERIC*8.2 A, B. [44]

La mayoría de los BASIC admitían la construcción de variables de matriz usando la DIMpalabra clave, por ejemplo, DIM A(5), B(2,2)define dos matrices, la de una sola dimensión A y la de dos dimensiones (matriz) B. En Full BASIC, el límite inferior de cualquier matriz normalmente era 1, por lo que en este En este caso, la variable A tiene cinco "espacios", numerados del 1 al 5. El uso de OPTION BASE 0esta declaración anterior agregaría otro espacio en el índice 0. [45] Full también agregó un nuevo sistema para especificar directamente los límites inferior y superior usando la TOpalabra clave, por ejemplo, DIM A(100 TO 200)que crea una matriz unidimensional de 101 ranuras. [45] Para confundir aún más las cosas, DECLARE NUMERICtambién podría usarse para crear matrices; Se podrían crear las mismas dimensiones que en el último ejemplo DECLARE NUMERIC A(100 TO 200). [dieciséis]

Matemáticas, lógica y matrices.

La lista de operadores matemáticos admitidos incluía todos los de Minimal, +, -, *y . [46] La nueva función devuelve el resto de una división de un número entero. La lista de operadores lógicos se amplió, y se eliminó de Minimal y ahora se volvió a agregar, y se agregaron formas alternativas de operadores de comparación , y . [31]/^MODANDORNOT=<=>><

La lista de funciones integradas principales siguió siendo similar a la de versiones anteriores de BASIC, incluidos ejemplos comunes como SQRo ABS. Las funciones trigonométricas se ampliaron para incluir ASIN, ACOS, ATN, y COT. La nueva función devolvió el ángulo entre el origen y un punto X,Y dado. BASIC normalmente calculaba ángulos en radianes, pero convertía todos los parámetros y salidas a grados, y el sistema exponía la función que se usaba en estas conversiones y en otros lugares. [47]CSCSECANGLEOPTION ANGLE DEGREESPI

Dartmouth BASIC había introducido operaciones matriciales relativamente temprano en su evolución, y éstas eran parte de Full. Estos sobrecargan las funciones matemáticas existentes, por lo que se pueden multiplicar dos matrices usando MAT A=A*Bo multiplicar el contenido de una matriz por un escalar si el parámetro B no es una matriz. El sistema también agrega varias funciones exclusivas de matriz, que incluyen ZERo, INVert y DETerminate, entre otras. La adición de matemáticas matriciales también requiere la modificación de palabras clave existentes como PRINTy INPUT, que generan o ingresan múltiples elementos según sea necesario para completar el parámetro de la matriz. [48]

Las matrices se pueden redimensionar como parte de a MAT INPUTespecificando los nuevos límites, como MAT INPUT A(3.3). Las nuevas dimensiones deben tener un número total de elementos igual o menor que el original DIM, por lo que en este ejemplo, si la definición original fuera DIM A(2,2), la entrada provocaría un error. [49]

Instrumentos de cuerda

Las primeras versiones de Dartmouth BASIC no incluían variables de cadena ni manipulación, las únicas cadenas en un programa eran constantes como PRINT "HELLO, WORLD!". La versión 4, de 1968, agregó variables de cadena y un método único para manipularlas, CHANGEque convertía cadenas hacia y desde una matriz que contenía los valores ASCII de los caracteres. Por ejemplo, CHANGE "HELLO, WORLD!" TO Aproduciría una matriz de valores en A, donde A(0) era 72, el valor decimal ASCII para "H". Esto hacía que la manipulación de cadenas fuera bastante difícil; por ejemplo, para extraer "HOLA" de "¡HOLA, MUNDO!", habría que:

10 A$ = "¡HOLA MUNDO!" 20 DIM A ( 25 ), B ( 5 ) 30 CAMBIAR A$ A A 40 PARA I = 1 A 5 50 B ( I ) = A ( I ) 60 SIGUIENTE I 70 CAMBIAR B A B$                   

Muchos dialectos de BASIC habían agregado sus propios métodos para realizar manipulaciones de cadenas más útiles para evitar tal complicación. Para Full BASIC, el comité seleccionó una variación del concepto introducido por HP, "string slicing". Este concepto trata la cadena como una matriz de caracteres y puede acceder a ellos mediante una especificación similar a una matriz conocida como "segmento" . Para extraer "HOLA" de "HOLA, MUNDO" en su totalidad, se usaría B$=A$(1:5). El concepto es similar al de CHANGE, pero este método produce resultados que son en sí mismos cadenas, no valores numéricos, y por lo tanto se puede PRINT B$producir "HOLA". Una diferencia significativa entre el enfoque de Full y los anteriores como HP es que usaba una sintaxis diferente para el corte, mientras que los sistemas anteriores usaban sintaxis de matriz. Por ejemplo, en HP, la línea equivalente es B$=A$(1,5). Como esta es la misma sintaxis que los accesos a matrices, HP (y similares) generalmente no permitían matrices de cadenas, [50] mientras que esto estaba permitido en su totalidad. [51]

Este enfoque debe contrastarse con la solución seleccionada por DEC, el uso de funciones que devuelven nuevas cadenas LEFT$, MID$y RIGHT$. Esta fue la solución adoptada por Microsoft cuando escribieron su BASIC en el PDP-10 . La conversión entre los dos puede ser propensa a errores; para realizar el equivalente de RIGHT$(n), Full usaría DEF Right$(A$, n) = A$(Len(A$)-n+l). [37]

De entrada y salida

Otra área de enfoque para Full BASIC fue la entrada/salida (E/S). La única E/S de Minimal BASIC eran los comandos INPUTand PRINTy la capacidad de codificar datos usando las DATAdeclaraciones y READit. Casi todos los dialectos prácticos agregaban OPENy CLOSEcreaban un "canal" que luego se usaba para referirse a ese archivo o dispositivo en particular.

INPUTahora incluye un opcional PROMPT, seguido de una cadena, dos puntos y luego las variables de entrada, por ejemplo INPUT PROMPT "What is your age? " : A. [52] En ese momento, casi todos los BASIC incluían una característica similar sin la palabra PROMPTy usaban el punto y coma del separador de impresión existente en lugar de dos puntos; por ejemplo, en MS BASIC la misma línea sería INPUT "What is your age? "; A. Además de esto, Full también agregó las palabras clave new TIMEOUTy ELAPSED: INPUT TIMEOUT 30, ELAPSED T, PROMPT "What is your age? ": A, que continuará la ejecución después de 30 segundos incluso si el usuario no ingresa nada, y pondrá el tiempo que tomó, posiblemente los 30 segundos, en la variable T. Para sistemas que carecen de reloj (lo cual no era infrecuente en ese momento), T siempre devolvería -1. [53]

PRINTing se amplió de manera similar con la USINGdeclaración opcional, que ya había aparecido en varias implementaciones. Normalmente iba USINGseguido de una cadena de formato que utilizaba signos numéricos, asteriscos y signos de porcentaje para marcar los lugares decimales. La cadena de formato podría colocarse en una variable de cadena y luego hacer referencia a ella, o se IMAGE :podría hacer referencia a una línea separada opcional que contenga a por número de línea. [54] [c] Full también agregó nuevos comandos para configurar el área de impresión SET MARGINy SET ZONEWIDTH. [55] Los valores actuales de estas diversas configuraciones (y otras) podrían devolverse usando ASK. Por ejemplo, SET MARGIN 10seguido de ASK MARGIN Jestablecería J en 30. [56]

Operaciones de archivos totalmente compatibles con OPENy CLOSEy un número de canal precedido de un signo numérico, por ejemplo, OPEN #3: NAME "afile". Luego, los datos se pueden escribir usando INPUTy PRINTo READy el nuevo WRITE. [57] Se incluyeron comandos adicionales de manejo de archivos ERASEy REWRITE, y todos estos comandos tenían numerosas opciones y modos. Gran parte de esto se debió a los diferentes tipos de dispositivos físicos que todavía eran comunes a fines de la década de 1970; a la cinta magnética , por ejemplo, solo se podía acceder secuencialmente, por lo que el nuevo estándar ofrecía opciones para SEQUENTIALo STREAM, etc. La lista de opciones y sus interacciones y limitaciones cubre muchas páginas del estándar. [58] Por ejemplo, es posible acceder PRINTa un archivo de DISPLAYtipo, pero no INTERNALde tipo, lo que requiere WRITE. [59]

Manejo de excepciones y depuración

Como muchos BÁSICOS de la época, Full agregó el TRACE ONcomando que imprimiría los números de línea a medida que se ejecutaba el programa. También podría redirigir la impresión de los números de línea a otro dispositivo o archivo usando TRACE ON TO #3, donde el número 3 era un canal previamente abierto. También agregó la declaración DEBUG ONrelacionada y BREAK, la última de las cuales causaría una excepción si la depuración se hubiera activado previamente. El estado de depuración estaba limitado a un programa en particular, por lo que podía activarse en un programa y desactivarse en un subprograma, por ejemplo. [60]

Además, Full agregó verdaderos controladores de excepciones, según el WHEN EXCEPTION...END WHENbloque. Había dos formas de usar esto: si el bloque de código que comenzaba con WHEN EXCEPTION INel siguiente código se ejecutaba como un bloque y cualquier excepción dentro de él causaría que saltara a la USEsección, que funciona de manera similar a un archivo ELSE. También se puede usar definiendo un bloque separado similar a una subrutina HANDLER nameque luego se llamará por su nombre usando WHEN EXCEPTION USE name. [61] El código podría probar qué excepción se había producido utilizando las metavariables EXTYPEo EXTEXT$, ninguna de las cuales necesitaba un archivo ASK. RETRYsalió del controlador de errores y regresó a la línea del error, mientras que CONTINUEpodría usarse dentro del código de la línea principal para ignorar errores incluso dentro de WHENlos bloques. [62]

Gráficos

Casi al mismo tiempo que se diseñaba Full, se estaba llevando a cabo un esfuerzo paralelo para definir el Graphics Kernel System , o GKS. Este se ofreció como uno de los módulos opcionales en Full. Esto agregó docenas de palabras clave especiales como LINE STYLEy WINDOWcon una sintaxis que no coincidía con la de los otros módulos del estándar. Por ejemplo, el CLIPcomando activó el recorte en la ventana gráfica actual de modo que los elementos dibujados fuera de sus límites no fueran visibles; esto tomó un valor de cadena en lugar de un valor booleano CLIP "On". [63] Se agregaron varios comandos comunes de modificación de imágenes , SHIFT, SCALEy . [64]ROTATESHEAR

Como las imágenes a menudo se crean a partir de elementos comunes, Full agregó la nueva PICTUREestructura de bloques, que por lo demás es similar a a SUBy se invoca con DRAWen lugar de CALL. [65] La diferencia es que la salida de un bloque de imagen se puede modificar con la modificación usando WITH. Por ejemplo, si uno definiera a PICTURE CIRCLEque produjera un círculo de radio uno, se podría dibujar un círculo más pequeño y moverlo hacia el lado con DRAW CIRCLE WITH SHIFT(2) * SCALE(.4). [sesenta y cinco]

Tiempo real

El módulo de tiempo real de Full agregó el concepto de "secciones paralelas", a través de la PARACTpalabra clave. Parecían subrutinas (e imágenes) pero tenían una serie de palabras clave adicionales que controlaban su invocación. Por ejemplo, se podría definir un código que responda a un EVENTy luego provocar que se ejecute emitiendo un MESSAGEen otra parte del código. Los mensajes podrían invocar múltiples controladores utilizando el SHAREDconcepto de puertos. [66]

El sistema también permitió que estos bloques y objetos se conectaran a un código externo que crearía estos mensajes. Se podría, por ejemplo, tener un código que esperara en un dispositivo que creara periódicamente resultados de texto y luego se llamara automáticamente al controlador apropiado cuando hubiera nuevo texto disponible. Debido a que los datos reales de tales dispositivos tienden a ser de varias partes, no algo simple como una cadena o un número, la biblioteca en tiempo real también agregó la capacidad de definir STRUCTUREmensajes de correo electrónico que luego podrían leerse o escribirse como una unidad atómica. [67] Estos luego se leyeron y escribieron usando los comandos IN FROMy OUT TO, [68] o si los datos eran SHARED, por lo demás similares GET FROMy PUT TO. [69]

Aunque muchos programas en tiempo real pueden modelarse como un sistema que simplemente responde a eventos externos, también es común que el programa mismo publique periódicamente estos eventos. Para esto, Full agregó el STARTcomando y lo asociado WAITque pausaría la ejecución durante un tiempo determinado DELAY(una cantidad de segundos) o TIME(una hora explícita del día) o hasta que EVENTse viera un. [70]

ECMA frente a ANSI

Los estándares ECMA y ANSI no se desarrollaron conjuntamente sino en paralelo, aunque con miembros de comité superpuestos. Por el contrario, el grupo de trabajo ISO para BASIC no desarrolló un estándar propio, sino que planeó adoptar el estándar ECMA o ANSI. [71]

Independientemente de ANSI, el comité ECMA responsable del estándar BASIC lo dividió en dos: ECMA BASIC-1 y ECMA BASIC-2. BASIC-1 incluía parte del sistema de manipulación de archivos pero carecía de manejo de excepciones, mientras que BASIC-2 agregó el conjunto completo de comandos de archivos, matemáticas decimales fijas y el sistema de manejo de excepciones. [1] Además, en BASIC-1 todas las palabras clave fundamentales como PRINTeran palabras reservadas que simplificaban el analizador, mientras que en BASIC-2 seguían el patrón ANSI y podían usarse dentro de subrutinas y funciones creadas por el usuario. [1]

El grupo de trabajo ISO había planeado inicialmente utilizar el estándar ECMA. Ante el problema de dos candidatos a estándares diferentes, en septiembre de 1987 se ordenó desarrollar un estándar internacional único que los unificara. Esto se logró especificando que el cumplimiento de cualquiera de las normas podría considerarse como cumplimiento de la norma ISO. [71]

Notas

  1. ^ En un artículo de 1984, Luehrmann estimó que había 10 millones de máquinas de este tipo. [8]
  2. ^ Las OPTIONALpalabras clave no aparecen en los ejemplos del documento de estándares [42] pero son obligatorias.
  3. ^ IMAGE funciona de la misma manera que FORMATen FORTRAN.

Referencias

Citas

  1. ^ abcd ECMA 1986, pag. i.
  2. ^ McCracken, Harry (29 de abril de 2014). "Cincuenta años de BASIC, el lenguaje de programación que hizo que las computadoras fueran personales". Tiempo .
  3. ^ "IBM VS el mundo: así es". Mundo de la informática . 5 de diciembre de 1973.
  4. ^ Leibson, Steve (2017). "HP: la empresa de informática accidentalmente diseñada para un propósito". HP9825.COM .
  5. ^ "Descripción del procesador Hewlett-Packard 2100, 1972" (PDF) . Consultado el 18 de agosto de 2020 .
  6. ^ ECMA 1978, pag. III.
  7. ^ Luehrmann 1984, pag. 173.
  8. ^ Luehrmann 1984, pag. 152.
  9. ^ Estándar 1987, págs. I, ii.
  10. ^ Kurtz 1982, págs.182, 186.
  11. ^ Kurtz 1982, pag. 214.
  12. ^ Kurtz 1982, págs.188.
  13. ^ Estándar 1987, pag. i.
  14. ^ Kurtz 1982, pag. 190.
  15. ^ Guntheroth 1983, pág. 51.
  16. ^ a b C Guntheroth 1983, pag. 52.
  17. ^ Guntheroth 1983, pág. 53.
  18. ^ "Puntos de vista". Revista PC . 29 de septiembre de 1987. p. 15.
  19. ^ Bellis, Mary (26 de enero de 2019). "La Historia del Lenguaje de Programación BÁSICO".
  20. ^ McGregor, JJ; Watt, AH (octubre de 1981). "¿Las reglas PASCAL están bien?: Una comparación de PASCAL y BASIC como lenguajes para enseñar programación informática a principiantes". La Gaceta Matemática . 65 (433): 171–182. doi :10.2307/3617129. JSTOR  3617129. S2CID  64737920.
  21. ^ Maza 1982, pag. 29.
  22. ^ Pournelle 1985, pag. 366.
  23. ^ Dvorák 1984, pág. 88.
  24. ^ Guntheroth 1983, pág. 54.
  25. ^ Estándar 1987, pag. 272.
  26. ^ Estándar 1987, pag. 106.
  27. ^ ab Estándar 1987, pág. 31.
  28. ^ Estándar 1987, pag. 29.
  29. ^ Estándar 1987, pag. 50.
  30. ^ Kurtz 1982, pag. 196.
  31. ^ ab Guntheroth 1983, pág. 55.
  32. ^ Estándar 1987, págs. 17-19.
  33. ^ "Siguiente sin Para". Construcción de Microsoft . 13 de septiembre de 2021.
  34. ^ Estándar 1987, pag. 87.
  35. ^ Estándar 1987, pag. 84.
  36. ^ Estándar 1987, págs.94, 95.
  37. ^ ab Estándar 1987, pág. 94.
  38. ^ Estándar 1987, págs. 94-100.
  39. ^ Estándar 1987, pag. 105.
  40. ^ Kurtz 1982, pag. 192.
  41. ^ Estándar 1987, pag. 49.
  42. ^ Estándar 1987, pag. 263.
  43. ^ Estándar 1987, pag. 262.
  44. ^ Estándar 1987, pag. 265.
  45. ^ ab Estándar 1987, pág. 66.
  46. ^ Estándar 1987, pag. 37.
  47. ^ Guntheroth 1983, pág. 49.
  48. ^ Guntheroth 1983, pág. 70.
  49. ^ Guntheroth 1983, pág. 71.
  50. ^ Brannon, Charles (abril de 1981). "Matrices de cadenas en Atari BASIC". ¡Calcular! . pag. 103.
  51. ^ Estándar 1987, pag. 74.
  52. ^ Estándar 1987, pag. 111.
  53. ^ Estándar 1987, págs.111, 112.
  54. ^ Estándar 1987, pag. 123.
  55. ^ Estándar 1987, pag. 164.
  56. ^ Estándar 1987, pag. 151.
  57. ^ Estándar 1987, pag. 142.
  58. ^ Estándar 1987, págs. 141-154.
  59. ^ Estándar 1987, pag. 144.
  60. ^ Estándar 1987, pag. 195.
  61. ^ Estándar 1987, págs. 187–188.
  62. ^ Estándar 1987, pag. 188.
  63. ^ Estándar 1987, pag. 199.
  64. ^ Estándar 1987, pag. 230.
  65. ^ ab Estándar 1987, pág. 229.
  66. ^ Estándar 1987, pag. 239.
  67. ^ Estándar 1987, págs. 239-240.
  68. ^ Estándar 1987, pag. 248.
  69. ^ Estándar 1987, pag. 250.
  70. ^ Estándar 1987, pag. 244.
  71. ^ ab Kurtz 1994, pag. 478.

Bibliografía

Otras lecturas

enlaces externos