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 miniordenadores de 16 bits a principios de la década de 1970 la década de 1980.
Paradigma | imperativo |
---|---|
Apareció por primera vez | 1970 |
SO | RSTS / E |
Influenciado por | |
Dartmouth BÁSICO , Tymshare SUPER BÁSICO | |
Influenciado | |
Microsoft BASIC |
BASIC-PLUS se basó en BASIC-8 para el TSS / 8 , [1] él mismo se basó muy de cerca en el Dartmouth BASIC original . BASIC-PLUS agregó una serie de nuevas estructuras, así como características de JOSS con respecto a las declaraciones condicionales y el formato. A su vez, BASIC-PLUS fue la versión en la que se modeló el Microsoft BASIC original . [2]
Más tarde, el lenguaje se reescribió como un verdadero compilador como BASIC-Plus-2 , y se trasladó 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 del 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 de cursor, BASIC-PLUS utilizó el sistema común de prefijar todo el código fuente con un número de línea. El código se editó escribiendo el número y luego cambiando el contenido del siguiente código. Una línea de código podría eliminarse escribiendo su número de línea y nada más, estableciendo así una línea vacía.
El espacio de direcciones virtuales de un usuario de 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 usado por el intérprete de comandos combinado y la biblioteca de tiempo de ejecución (llamado Run Time System en RSTS / E). Esto limita los programas de usuario a aproximadamente 32 kB de memoria.
Los programas grandes se dividieron en varias partes mediante el uso de la CHAIN
instrucción, y los programas podrían encadenarse a números de línea específicos en un programa secundario para indicar que un programa debe comenzar a ejecutarse en un punto diferente de su primera línea. Esta característica de encadenamiento a un cierto 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ó a los programas pasar datos entre sí según fuera necesario. Los archivos de disco también se pueden utilizar, pero son más lentos.
Para conservar la memoria, el sistema incluyó un administrador de memoria de recolección de basura, utilizado tanto para datos de cadena como para códigos de bytes.
Un programa en ejecución podría interrumpirse, examinar y modificar variables y luego reanudarlo.
Sintaxis y características
BASIC-PLUS se basa en versiones posteriores de Dartmouth BASIC , incluidos sus poderosos MAT
comandos. Además de esto, DEC agregó una serie de estructuras únicas de control de flujo.
Los números de línea eran enteros positivos del 1 al 32767. [3] Las líneas lógicas de código podrían continuar en múltiples líneas físicas utilizando un salto 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 un 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 que las pestañas se usaran como espacios en blanco en línea y se usaba para hacer los bucles más claros, como en los lenguajes modernos. [5] Los comentarios usaban la REM
palabra clave o el !
carácter, [6] en contraposición a MS BASIC, que usaba REM
y '
.
Los nombres de las 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 podrían tener hasta 29 caracteres y se agregó un punto (.) Como carácter permitido. Sin embargo, cada nombre de variable aún tenía que comenzar con una letra. [a]
Como en la mayoría de las versiones de BASIC, la LET
palabra clave, para la asignación de variables, era opcional. Podría establecer múltiples variables en un solo valor, como . [7] El idioma admitía tres tipos de datos; números de coma flotante, enteros y cadenas. Las variables sin sufijo eran de coma flotante (8 bytes, rango de 0,29 x 10E-38 a 1,7 x 10E38, hasta 16 dígitos de precisión). Las variables enteras (16 bits, rango -32768 a +32767) se indicaron con un sufijo, [8] las variables de cadena (longitud variable) se indicaron con un sufijo. [9]LET A,B,C=10
%
$
La DIM
declaració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 las MAT
declaraciones no establecían elementos en la fila 0 o la columna 0). [10] [11]
La DIM#
declaración "virtual DIM" podía asignar "matrices de datos virtuales" o "matrices virtuales" a un archivo de disco, lo que permitía matrices 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 virtual de datos" y "núcleo virtual", pero no utilizó el enfoque moderno de asignar las matrices y un archivo mapeado en memoria en la misma memoria virtual y luego permitir que el administrador de memoria virtual maneje todos los accesos a través de paginación . En su lugar, un programa ejecutaría primero la OPEN
instrucción, que abrió un archivo con un número de archivo asociado y le asignó un búfer de archivo de un registro (512 bytes). A continuación, la DIM#
declaración asociaría el área de datos de ese archivo con una o más matrices que podrían "usarse" de la misma manera que cualquier matriz basada en memoria. Tras cada acceso a un elemento de matriz virtual, BASIC-PLUS calcularía qué registro del archivo contenía el datum. Si el registro correcto no estuviera en el búfer del archivo, leería ese registro. (Si se hubiera escrito en el búfer, escribiría ese búfer "sucio" en el disco antes de leer el nuevo registro.) Cuando el registro correcto estuviera presente, BASIC-PLUS copiaría el dato hacia o desde la parte derecha del registro. buffer. La CLOSE
declaración hizo que el búfer se volviera a escribir (si es necesario) antes de cerrar el archivo. Debido a que no se almacenó en caché ningún sector adicional, acceder a los datos en el orden "incorrecto" podría multiplicar el número de accesos al disco. Se impusieron reglas adicionales a las matrices virtuales, de modo que un dato nunca podría abarcar un límite de registro: cada tipo de datos se alineó 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 accede a ellos mediante LSET
y RSET
. [12]
El lenguaje también incluyó una serie de MAT
comandos para trabajar con toda la matriz (o MATrix). El MAT READ
comando llenaría la matriz con valores en una DATA
declaración, [13] MAT INPUT
llenaría la matriz con valores escritos por el usuario e MAT PRINT
imprimiría los elementos en un formato 1D o 2D. [14] MAT
también podría usarse para establecer valores predeterminados en una matriz usando palabras clave asociadas, por ejemplo, MAT A=ZER
llenaría la matriz A con ceros. [15] TRN
transpondría una matriz completa y la INV
invertiría. [16] Además, +
, -
, y *
podrían usarse en matrices, realizar la operación de matriz asociada. [17]
El PRINT
comando dividió la pantalla en regiones de 14 espacios de ancho, y se usó la coma para moverse entre estas ubicaciones; PRINT 1,2,3
generaría 1, 2 y 3 de forma espaciada, [18] mientras PRINT 1;2;3
que dejaría un solo espacio y produciría "1 2 3". [19] INPUT
permitía especificar una cadena de solicitud, pero usaba el punto y coma para separarla en lugar de la coma; . [20]INPUT "WHAT IS THE VALUE";A
Las cadenas pueden estar delimitadas por comillas simples o dobles. [9] Además de las funciones CHR
y ASCII
que convertían caracteres individuales hacia y desde el formato de cadena, [21] BASIC-PLUS también admitía el poderoso CHANGE
comando de Dartmouth . CHANGE
iteraba la cadena y devolvía el valor ASCII de cada carácter como una ranura en una matriz numérica. Por ejemplo, CHANGE 'HELLO' TO X
devolvería una matriz de cinco elementos de longitud. [22] También CHANGE X TO A$
se podría invertir la operación, leer los números individuales en la matriz X y convertirlos en una cadena. [23]
FOR
los bucles funcionaron como en versiones posteriores de BASIC y el NEXT
comando no se pudo usar en una expresión. [24] En cambio, las palabras clave UNTIL
y WHILE
podrían usarse para controlar salidas anticipadas. Por ejemplo, continúe con el ciclo hasta I = 10, con la suposición de que el siguiente código establecería el valor de I. [25]FOR I=1 UNTIL I=10
BASIC-PLUS también permitió que la mayoría de las estructuras de control se colocaran después de otros comandos. Por ejemplo, es el equivalente de [26] También se proporcionó lo contrario, fue el equivalente de . [27] El uso de una expresión condicional podría hacer que un bucle, por ejemplo, se repita hasta que X sea 100. Esto ofrecía un formato compacto para muchas estructuras de bucle comunes. [28]PRINT I IF I < 10
IF I >= 10 THEN PRINT I
PRINT I UNLESS I = 10
IF I <> 10 THEN PRINT I
X=X+1 WHILE X<100
Máquina virtual
BASIC-PLUS no era un intérprete sino un sistema compile and go : cada línea de BASIC se traducía a "PPCODE" (Código Push-Pop) tal como se ingresaba, para su posterior ejecución rápida en su máquina virtual. Estas traducciones no tokenizaron las líneas BASIC, sino que las reescribieron para usarlas en una máquina de pila; no podría 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 COMPILE
comando, pero este no era un verdadero compilador; esto simplemente guardó la representación PPCODE del programa para que no tuviera que volver a compilarse la próxima vez que se cargara el programa BASIC en la memoria. El sistema almacena el programa de un usuario en dos formatos. Uno era el código fuente editable en formato de texto, creado usando el SAVE
comando y normalmente colocado en un archivo .BAS. El otro era la versión PPCODE del programa creado por el COMPILE
comando 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. [29]
BÁSICO Plus 2
Posteriormente, DEC desarrolló un producto relacionado llamado Basic Plus 2 ("BP2" o BASIC-Plus-2 ) para agregar funciones adicionales y un mayor rendimiento.
Utilizaba la compilación verdadera en código enhebrado y escribía 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 objeto se pueden guardar en bibliotecas. Luego, un enlazador (el constructor de tareas TKB) creaba archivos ejecutables a partir de archivos de objetos y bibliotecas. TKB también admitió superposiciones; esto permitió intercambiar rutinas individuales en el espacio de direcciones virtuales según fuera necesario, superponiendo rutinas que no se utilizan actualmente. Adicionalmente,
Los programas BP2 se ejecutaron bajo el RSX Run Time System; este RTS solo ocupaba 8 KB del espacio de direcciones virtuales del usuario, dejando 56 KB para el programa del usuario. [30] (La versión 9 de RSTS / E introdujo un espacio de instrucciones y datos separados, y el sistema de tiempo de ejecución RSX "desaparecido", que permite 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, a menudo reduciendo la necesidad de ENCADENAMIENTO entre múltiples programas.
A diferencia de BASIC-PLUS (que solo 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 VAX BASIC posterior .
Comparación con MS BASIC
Microsoft BASIC se diseñó muy de cerca 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 = 10
no se copió y no aparece en ninguna versión común de la microcomputadora BASIC. MS BASIC también carecía de los comandos de matriz.
Ver también
- Comparación de proyectiles de comando
Notas
- ^ Antes de la introducción del modo Extend, no se requerían espacios en blanco entre las variables y otros elementos del lenguaje:
FOR I=STOP
se interpretaría como.FOR I = S TO P
Referencias
Citas
- ^ C. Gordon Bell ; J. Craig Mudge; John N. McNamara. Ingeniería informática: una vista DEC del diseño de sistemas de hardware (PDF) . Prensa digital . ISBN 0-932376-00-2.
- ^ a b Manes, Stephen (1993). Gates . Doubleday. pag. 61.
- ^ MÁS 1972 , p. 2-1.
- ↑ a b PLUS 1972 , pág. 2-3.
- ↑ a b PLUS 1972 , pág. 2-6.
- ^ MÁS 1972 , p. 3-1.
- ^ MÁS 1972 , p. 3-3.
- ^ MÁS 1972 , p. 6-1, 6-2.
- ↑ a b PLUS 1972 , pág. 5-2.
- ^ MÁS 1972 , p. 3-21.
- ^ MÁS 1972 , p. 5-3.
- ^ MÁS 1972 , p. 9-17.
- ^ MÁS 1972 , p. 7-2.
- ^ MÁS 1972 , p. 7-3.
- ^ MÁS 1972 , p. 7-5.
- ^ MÁS 1972 , p. 7-7.
- ^ MÁS 1972 , p. A-1.
- ^ MÁS 1972 , p. 3-7.
- ^ MÁS 1972 , p. 3-8.
- ^ MÁS 1972 , p. 3-10.
- ^ MÁS 1972 , p. 5-12.
- ^ MÁS 1972 , p. 5-5.
- ^ MÁS 1972 , p. 5-7.
- ^ MÁS 1972 , p. 3-19.
- ^ MÁS 1972 , p. 8-14.
- ^ MÁS 1972 , p. 8-17.
- ^ MÁS 1972 , p. 8-18.
- ^ MÁS 1972 , p. 8-20.
- ^ "Operadores en línea BASIC-PLUS, ¿realmente tienen sentido?" . Consultado el 5 de agosto de 2020 .
- ^ Manual de referencia BASIC V2 (PDF) . Maynard, Massachusetts: Corporación de equipos digitales. 1991.
Bibliografía
- Manual de idiomas BASIC-PLUS (PDF). Maynard, Massachusetts: Corporación de equipos digitales. 1972.