stringtranslate.com

BÁSICO-PLUS

BASIC-PLUS es un dialecto extendido del lenguaje de programación BASIC que fue desarrollado por Digital Equipment Corporation (DEC) para su uso en su sistema operativo de tiempo compartido RSTS/E para la serie PDP-11 de minicomputadoras de 16 bits a principios de la década de 1970 hasta la década de 1980.

BASIC-PLUS se basó en BASIC-8 para el TSS/8 , [1] basado muy estrechamente en el BASIC original de Dartmouth . BASIC-PLUS agregó una serie de estructuras nuevas, así como características de JOSS relacionadas con declaraciones condicionales y formato. A su vez, BASIC-PLUS fue la versión sobre la que se basó el BASIC original de Microsoft . [2]

Entre las adiciones realizadas a BASIC-PLUS destaca la introducción de funciones de cadena como MID$ y LEFT$ , además del comando CHANGE original de uso múltiple de Dartmouth . En versiones futuras del lenguaje, especialmente la de Microsoft, se eliminó CHANGE y las funciones de cadena de BASIC-PLUS se convirtieron en las únicas formas de realizar este tipo de operaciones. La mayoría de los BÁSICOS hasta el día de hoy siguen esta convención.

Posteriormente, el lenguaje se reescribió como un verdadero compilador como BASIC-Plus-2 y se transfirió a la plataforma VAX-11 como la implementación BASIC nativa de esa máquina. Esta versión sobrevivió a varios cambios de plataforma y hoy se conoce como VSI BASIC para OpenVMS .

Operación

Los usuarios se sentarían en una terminal y escribirían declaraciones en lenguaje de programación. Las declaraciones pueden ingresarse directamente en el intérprete de comandos del sistema o ingresarse en un editor de texto , guardarse en un archivo y cargarse en el intérprete de comandos desde el archivo. Los errores en el código fuente se informaron al usuario inmediatamente después de escribir la línea.

Como no se podía garantizar un terminal inteligente con control del cursor, BASIC-PLUS utilizó el sistema común de anteponer a todo el código fuente un número de línea. El código se editó escribiendo el número y luego cambiando el contenido del siguiente código. Se podría eliminar una línea de código escribiendo su número de línea y nada más, configurándola así como una línea vacía.

El espacio de direcciones virtuales de un usuario RSTS/E estaba limitado a un poco menos de 64 KB de espacio. Usando BASIC-PLUS, aproximadamente la mitad de este espacio de direcciones virtuales fue utilizado por el intérprete de comandos combinado y la biblioteca en tiempo de ejecución (llamada Run Time System en RSTS/E). Esto limitó los programas de usuario a aproximadamente 32 kB de memoria.

Los programas grandes se dividían en partes ejecutables separadas mediante el uso de la CHAINdeclaración, y los programas podían encadenarse a números de línea específicos en un programa secundario para indicar que un programa debía comenzar la ejecución en un punto diferente de su primera línea. Esta característica de encadenar a un determinado número de línea permitió que los programas se indicaran entre sí que estaban siendo llamados desde otro programa. El uso de una sección de memoria compartida llamada núcleo común también permitió que los programas se pasaran datos entre sí según fuera necesario. También se podían utilizar archivos de disco , pero eran más lentos.

Para conservar la memoria, el sistema incluía un administrador de memoria de recolección de basura, utilizado tanto para datos de cadenas como para códigos de bytes.

Un programa en ejecución podría interrumpirse, examinarse y modificarse variables y luego reanudarse.

Sintaxis y características

BASIC-PLUS sigue el modelo de versiones posteriores de Dartmouth BASIC , incluidos sus potentes MATcomandos. Además de esto, DEC agregó una serie de estructuras únicas de control de flujo.

Edición

Los números de línea eran enteros positivos del 1 al 32767. [3] Las líneas lógicas de código podían continuar en múltiples líneas físicas utilizando un avance de línea al final de una línea en lugar del carácter de retorno de carro normal . [4] Para facilitar la edición externa del archivo fuente, las versiones posteriores de BASIC-PLUS también permitieron el &carácter como carácter de continuación de línea.

Se pueden colocar varias declaraciones en una sola línea utilizando :como separador de declaraciones. [4] El sistema permitía utilizar tabulaciones como espacios en blanco en línea y se utilizaba para hacer los bucles más claros, como en los lenguajes modernos. [5] Los comentarios usaban la REMpalabra clave o el !carácter, [6] a diferencia de los MS BASIC, que usaban REMy '.

Declaraciones estándar

El PRINTcomando dividió la pantalla en regiones de 14 espacios de ancho y la coma se usó para moverse entre estas ubicaciones; PRINT 1,2,3generaría 1, 2 y 3 de forma espaciada, [7] mientras que PRINT 1;2;3dejaría un solo espacio y produciría "1 2 3". [8] [a] INPUT permitió especificar una cadena de mensaje, pero usó el punto y coma para separarla en lugar de la coma; . [9]INPUT "WHAT IS THE VALUE";A

Las cadenas pueden estar delimitadas por comillas simples o dobles. [10] Además de las funciones CHRy ASCIIque convertían caracteres individuales hacia y desde el formato de cadena, [11] BASIC-PLUS también admitía el comando de Dartmouth CHANGE. CHANGErepitió la cadena y devolvió el valor ASCII de cada carácter como una ranura en una matriz numérica. Por ejemplo, CHANGE 'HELLO' TO Xdevolvería una matriz con los cinco códigos ASCII, 110, 105, 114, 114, 105, en los elementos 1 al 5, y el número 5, la longitud de la cadena, en el elemento 0. [12] Se podría invertir La operación también CHANGE X TO A$leería los números individuales en la matriz X y los convertiría en una cadena. [13]

Modificadores de declaraciones

BASIC-PLUS agregó el concepto de "modificadores de declaraciones", condiciones similares a JOSS que podrían aplicarse a cualquier declaración. Por ejemplo, es el equivalente a [14] También se proporcionó lo contrario, era el equivalente a . [15]PRINT I IF I <> 10IF I <> 10 THEN PRINT IPRINT I UNLESS I = 10IF I <> 10 THEN PRINT I

FORLos bucles funcionaron como en otras versiones de BASIC y el NEXTcomando no se pudo usar en una expresión para salir temprano. [16] En cambio, las palabras clave UNTILy WHILEpodrían usarse para controlar las salidas anticipadas. Por ejemplo, continúe el bucle hasta I=10, asumiendo que el siguiente código establecería el valor de I, [17] lo que significa que podría no salir después de 10 iteraciones, sino tan pronto como el código establezca I en 10. [18] Los modificadores podrían También se usaría para construir bucles compactos de una línea; por ejemplo, se buclearía hasta que X fuera 100. [19]FOR I=1 UNTIL I=10X=X+1 WHILE X<100

Variables, expresiones y matrices.

Los nombres de variables en las primeras versiones de BASIC-PLUS podían ser una sola letra o una sola letra seguida de un solo dígito. [5] Con la inclusión del "modo extendido" en versiones posteriores, los nombres de las variables podían tener hasta 29 caracteres y se agregó el punto (.) como carácter permitido. Cada nombre de variable todavía tenía que comenzar con una letra. [b] Como en la mayoría de las versiones de BASIC, la LETpalabra clave, para asignación de variables, era opcional. Podría establecer varias variables en un solo valor, como . [20]LET A,B,C=10

El lenguaje admitía tres tipos de datos; números de punto flotante, enteros y cadenas. Las variables sin sufijo eran de punto flotante (8 bytes, rango 0,29 × 10−38 a 1,7 × 1038 , hasta 16 dígitos de precisión). Las variables enteras (16 bits, rango −32768 a +32767) se indicaron con un%sufijo, [21] variables de cadena (longitud variable) se indicaron con un$sufijo. [10]

La lista de operadores matemáticos y lógicos era típica de la mayoría de los BÁSICOS, con algunas extensiones. Para matemáticas, se admitían +, -, y *, además de como forma alternativa de para terminales de computadora que podrían no tener ese carácter. Las comparaciones lógicas estándar fueron , , , , y . Una adición interesante fue el operador, que significa "aproximadamente igual". Esto sería verdadero si los dos números se imprimieran igual, es decir, sus seis dígitos más significativos fueran iguales. [22] Los operadores lógicos incluyen el típico , y , junto con , que devuelven verdadero si A y B son verdaderos o ambos son falsos, y que es falso si A es verdadero y B es falso y, en caso contrario, siempre es verdadero. [23]/^**^=<><=>=<>==NOT AA AND BA OR BA XOR BA EQV BA IMP B

La DIMdeclaración podría asignar matrices unidimensionales y bidimensionales de cualquiera de los tres tipos de datos. El rango de subíndices siempre comenzaba con 0 (pero MATlas declaraciones no establecían elementos en la fila 0 o la columna 0). [24] [25]

El lenguaje también incluía una serie de MATcomandos para trabajar con toda la matriz (o MATrix). El MAT READcomando llenaría la matriz con valores en una DATAdeclaración, [26] MAT INPUT llenaría la matriz con valores escritos por el usuario e MAT PRINTimprimiría los elementos en formato 1D o 2D. [27] MAT también podría usarse para establecer valores predeterminados en una matriz usando palabras clave asociadas; por ejemplo, MAT A=ZERllenaría la matriz A con ceros. [28] TRN transpondría una matriz completa y INVla invertiría. [29] Además, +, -y *podrían usarse en matrices, realizando la operación matricial asociada. [30]

Procesamiento de archivos

La DIM#declaración "DIM virtual" podría asignar "arreglos de datos virtuales" o "arreglos virtuales" a un archivo de disco, lo que permitía arreglos más grandes que la memoria disponible de la computadora (o incluso su espacio de direcciones) y permitía el uso de elementos de matriz para leer, escribir y ampliar archivos de disco (almacenamiento persistente). Llamaron a esta disposición "almacenamiento de datos virtual" y "núcleo virtual", pero no utilizaron el enfoque moderno de asignar matrices y un archivo mapeado en memoria . En su lugar, se utilizó un único búfer para almacenar 512 bytes de datos a la vez, y cuando se accedía a una entrada en la matriz virtual, se leían los datos correspondientes y se escribían los datos antiguos, según fuera necesario. La CLOSEdeclaración provocó que se volviera a escribir el búfer (si era necesario) antes de cerrar el archivo. Debido a que no se almacenaron en caché sectores adicionales, acceder a los datos en el orden "incorrecto" podría multiplicar el número de accesos al disco. Se impusieron reglas adicionales a los arreglos virtuales, de modo que un dato nunca podría abarcar un límite de registro: cada tipo de datos se alineaba con un múltiplo de su tamaño. Las cadenas virtuales se almacenaron como datos ASCIIZ de longitud fija, con tamaños restringidos a 2, 4, 8, 16, 32, 64, 128, 256 o 512 bytes, y se accedió a ellas mediante LSETy RSET. [31]

Máquina virtual

BASIC-PLUS no era un intérprete sino un sistema de compilación y listo : cada línea de BASIC se traducía a "PPCODE" (Código Push-Pop) a medida que se ingresaba, para su posterior ejecución rápida en su máquina virtual. Estas traducciones no tokenizaron las líneas BÁSICAS, sino que las reescribieron para usarlas en una máquina apilada; no se podrían traducir estas representaciones a declaraciones BÁSICAS. Esto evitó la necesidad de decodificar repetidamente las palabras clave como cadenas: una vez convertidas a PPCODE, las palabras clave eran números que apuntaban a rutinas para ejecutar esa función. BASIC-PLUS incluía un COMPILEcomando, pero no era un verdadero compilador; esto simplemente guardó la representación PPCODE del programa para que no fuera necesario volver a compilarlo la próxima vez que se cargara el programa BASIC en la memoria. El sistema almacenaba el programa de un usuario en dos formatos. Uno era el código fuente editable en formato de texto, creado mediante el SAVEcomando y normalmente colocado en un archivo .BAS. La otra era la versión PPCODE del programa creado por el COMPILEcomando y guardado en un archivo .BAC; Los archivos .BAC eran más pequeños, se cargaban y se ejecutaban más rápido, pero no se podían editar. [32]

BÁSICO Plus 2

Posteriormente, DEC desarrolló un producto relacionado llamado Basic Plus 2 ("BP2" o BASIC-Plus-2 ) para agregar funciones adicionales y aumentar el rendimiento.

Utilizó una verdadera compilación en código enhebrado y escribió su salida en archivos objeto compatibles con los archivos objeto de código máquina producidos por el ensamblador y otros sistemas de lenguaje. Estos archivos de objetos podrían guardarse en bibliotecas. Luego, un vinculador (el TKB, también conocido como creador de tareas) creó archivos ejecutables a partir de archivos objeto y bibliotecas. TKB también admitía superposiciones; esto permitió intercambiar rutinas individuales en el espacio de direcciones virtuales según fuera necesario, superponiendo rutinas que no se estaban utilizando actualmente.

Además, los programas BP2 se ejecutaron bajo el sistema RSX Run Time; este RTS solo ocupaba 8 KB del espacio de direcciones virtuales del usuario, dejando 56 KB para el programa del usuario. [33] (La versión 9 de RSTS/E introdujo un espacio separado de instrucciones y datos, y el sistema de tiempo de ejecución RSX "desapareciendo", permitiendo hasta 64 KB de cada código de instrucción y datos). Estos dos factores permitieron que los programas BP2 individuales fueran mucho más grandes. que los programas BASIC-PLUS, lo que a menudo reduce la necesidad de encadenar entre múltiples programas.

A diferencia de BASIC-PLUS (que sólo estaba disponible en RSTS/E), BP2 también estaba disponible para el sistema operativo RSX-11 . Los programas BP2 también eran más compatibles con el posterior VAX BASIC .

Comparación con MS BASIC

Microsoft BASIC se inspiró muy estrechamente en BASIC-PLUS. [2] Las versiones anteriores de MS BASIC, la serie 1.x, carecían de variables enteras, pero estas se agregaron en la serie 2.x que se encontró en muchas máquinas, incluidos los modelos posteriores de Commodore PET y Commodore 64 . La capacidad de colocar comandos lógicos y de bucle en línea, como I = I + 1 UNTIL I = 10no se copió y no aparece en ninguna versión común de microcomputadora BASIC. MS BASIC también carecía de comandos matriciales.

Ver también

Notas

  1. ^ El espacio delante de los números se dejó para un posible signo menos, este era el estándar en casi todos los BASIC.
  2. ^ Antes de la introducción del modo Extender, no se requerían espacios en blanco entre las variables y otros elementos del lenguaje: FOR I=STOPse interpretaría como .FOR I = S TO P

Referencias

Citas

  1. ^ Campana, C. Gordon ; Mudge, J. Craig; McNamara, John N. (1978). Ingeniería informática: una visión de DEC del diseño de sistemas de hardware (PDF) . Prensa Digital . ISBN 0-932376-00-2.
  2. ^ ab Manes, Stephen (1993). Puertas. Doble día. pag. 61.ISBN 9780385420754.
  3. ^ MÁS 1972, pag. 2-1.
  4. ^ ab MÁS 1972, pag. 2-3.
  5. ^ ab MÁS 1972, pag. 2-6.
  6. ^ MÁS 1972, pag. 3-1.
  7. ^ MÁS 1972, pag. 3-7.
  8. ^ MÁS 1972, pag. 3-8.
  9. ^ MÁS 1972, pag. 3-10.
  10. ^ ab MÁS 1972, pag. 5-2.
  11. ^ MÁS 1972, pag. 5-12.
  12. ^ MÁS 1972, pag. 5-5.
  13. ^ MÁS 1972, pag. 5-7.
  14. ^ MÁS 1972, pag. 8-17.
  15. ^ MÁS 1972, pag. 8-18.
  16. ^ MÁS 1972, pag. 3-19.
  17. ^ MÁS 1972, pag. 8-14.
  18. ^ MÁS 1972, pag. 8-15.
  19. ^ MÁS 1972, pag. 8-20.
  20. ^ MÁS 1972, pag. 3-3.
  21. ^ MÁS 1972, pag. 6-1, 6-2.
  22. ^ MÁS 1972, pag. 2-9.
  23. ^ MÁS 1972, pag. 2-10.
  24. ^ MÁS 1972, pag. 3-21.
  25. ^ MÁS 1972, pag. 5-3.
  26. ^ MÁS 1972, pag. 7-2.
  27. ^ MÁS 1972, pag. 7-3.
  28. ^ MÁS 1972, pag. 7-5.
  29. ^ MÁS 1972, pag. 7-7.
  30. ^ MÁS 1972, pag. A-1.
  31. ^ MÁS 1972, pag. 9-17.
  32. ^ "Operadores en línea BASIC-PLUS, ¿realmente tienen sentido?" . Consultado el 5 de agosto de 2020 .
  33. ^ Manual de referencia BÁSICO V2 (PDF) . Maynard, Massachusetts: Corporación de equipos digitales. 1991.

Bibliografía