Articulo de referencia

BÁSICO-PLUS

BASIC-PLUS es un dialecto extendido del lenguaje de programación BASIC que fue desarrollado por EGH para Digital Equipment Corporation (DEC) para su uso en su sistema operativo ...

BASIC-PLUS es un dialecto extendido del lenguaje de programación BASIC que fue desarrollado por EGH para 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 desde principios de la década de 1970 hasta la década de 1980.

BASIC-PLUS se basó en BASIC-8 para TSS/8 , [ 1 ] que a su vez se basó muy de cerca en el BASIC original de Dartmouth . BASIC-PLUS añadió varias estructuras nuevas, así como características de JOSS relativas a sentencias condicionales y formato. A su vez, BASIC-PLUS fue la versión en la que se basó el BASIC original de Microsoft. [ 2 ]

Entre las novedades más destacadas de BASIC-PLUS se encuentran las funciones de cadena como MID$ y LEFT$ , además del comando CHANGE original de Dartmouth, que era de uso general . En versiones posteriores del lenguaje, especialmente en la de Microsoft, se eliminó CHANGE y las funciones de cadena de BASIC-PLUS se convirtieron en la única forma de realizar este tipo de operaciones. La mayoría de las versiones de BASIC siguen esta convención hasta el día de hoy.

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

Historia

Sistemas anteriores

A mediados de la década de 1960, DEC consiguió vender un ordenador central PDP-6 a la RAND Corporation , que buscaba una máquina más rápida para ejecutar su lenguaje de programación interactivo JOSS . Al año siguiente, DEC presentó el mucho más pequeño PDP-8 , generalmente considerado el primer miniordenador de éxito . Para esta máquina desarrollaron una versión reducida de JOSS conocida como FOCAL , que se popularizó en el PDP-8, uno de los ordenadores más vendidos de la época. [ 3 ]

El mismo año en que RAND presentó JOSS, Dartmouth College presentó la primera versión de Dartmouth BASIC . Pronto se adaptó a varias otras plataformas y, a finales de la década de 1960, estaba ganando terreno en la industria informática como un lenguaje interactivo diseñado para usarse con sistemas de tiempo compartido . A finales de la década de 1960, la mayoría de los proveedores estaban introduciendo un BASIC para su plataforma, incluyendo IBM y las principales compañías de tiempo compartido en línea como SUPER BASIC de Tymshare .

DEC siguió promocionando FOCAL entre sus clientes, tanto por razones de no haber sido inventado allí como por alguna ventaja técnica. A finales de 1968, al departamento educativo de DEC le resultaba cada vez más difícil presentar FOCAL a los clientes potenciales, ya que BASIC comenzaba a ganar terreno. La dirección no estaba interesada, así que en 1969 David H. Ahl decidió contratar a un programador para que escribiera BASIC-8 para el PDP-8. Fue un éxito inmediato y se convirtió en uno de los programas más vendidos de DEC. [ 3 ]

PDP-11

Ese mismo año, DEC comenzó el diseño de una nueva computadora que se convertiría en la PDP-11 . [ 4 ] El primer sistema operativo para la plataforma fue DOS-11 , un sistema de un solo usuario que posteriormente se adaptó para el procesamiento por lotes . El tiempo compartido era un objetivo principal para la nueva máquina, por lo que se desarrolló un segundo sistema, MUM-1 (Multi-User Monitor), basado en DOS, junto con BASIC-11 que se ejecutaba sobre él. El resultado fue muy lento. [ 5 ]

La compañía finalmente concluyó que necesitaba un sistema operativo de tiempo compartido completamente nuevo y puso a Tom Barnett y Nathan Teicholtz a cargo de su desarrollo. Formaron un nuevo equipo para desarrollar lo que entonces se conocía como IOX, Input Output eXecutive, el 11 de junio de 1970. Teicholtz, el líder técnico, había formado parte anteriormente del proyecto TSS-8 para el PDP-8. Entre los muchos conceptos nuevos que IOX debía incluir estaba la idea de utilizar un lenguaje de programación que también pudiera funcionar como un sistema de programación de línea de comandos . [ 5 ]

En la empresa surgió una discusión sobre en qué lenguaje debía basarse. Algunos sugirieron FOCAL, principalmente porque DEC consideraba que debían desarrollar su propio lenguaje. Otros opinaban que no admitir BASIC sería un problema importante para la popularidad de la máquina. Como no parecía haber un argumento contundente en ningún sentido desde el punto de vista técnico, la decisión se dejó en manos del departamento de marketing, que optó por BASIC. [ 5 ] Finalmente, decidieron usar ambos y crear un dialecto de BASIC que también incorporaría algunas características de FOCAL. [ 4 ]

EGH toma el control

A medida que crecía la parte del sistema operativo del proyecto, la carga de ingeniería absorbía todo el tiempo de programación disponible y no había nadie trabajando en BASIC. [ 5 ] En un encuentro casual mientras compraba un avión, Tim Hart descubrió que el vendedor trabajaba en DEC y terminaron hablando de los problemas que tenía DEC. Gracias a esta oportunidad, Hart, junto con dos amigos de toda la vida, Tom Evans y Tom Griffiths, que habían formado EGH Inc., recibieron una licitación de DEC el 25 de agosto. Como pensaron que sería un proyecto divertido, presentaron una oferta muy baja de 10.500 dólares el 4 de septiembre. Para su sorpresa, ganaron el contrato el 18 de septiembre, pero DEC se dio cuenta de que el precio era demasiado bajo y ofreció compensarlo mediante una cláusula de bonificación de 3000 dólares. [ 6 ]

Anteriormente, DEC había introducido varios dialectos BASIC diferentes para sus distintas plataformas, los cuales eran lo suficientemente distintos como para requerir conversión al cambiar de máquina, además de ser generalmente decepcionantes en comparación con otras plataformas. [ 6 ] BASIC-PLUS introdujo muchas características nuevas que lo convirtieron en uno de los dialectos más completos, incluyendo matemáticas matriciales, manejo de archivos y otras características que antes solo se veían en sistemas mainframe. BASIC-PLUS se convertiría en la base de todos los dialectos futuros de la compañía.

El concepto original era que EGH escribiría solo el compilador [ a ] y las utilidades relacionadas, mientras que DEC escribiría el sistema de tiempo de ejecución , que sería independiente. La idea era que los sistemas con cantidades limitadas de memoria y almacenamiento secundario solo contarían con el tiempo de ejecución, y el pequeño tamaño de este y del código del lenguaje intermedio (IL) del compilador permitirían su ejecución. El desarrollo en BASIC requeriría una máquina con más recursos, pero la simple ejecución de los programas resultantes funcionaría incluso en las máquinas más pequeñas. Inicialmente, EGH debía escribir solo el compilador, pero con el tiempo se les encomendó la responsabilidad de todo el sistema, que entregaron en enero de 1971. La idea de un sistema solo de tiempo de ejecución se descartó posteriormente. [ 5 ]

IOX finalmente pasó a llamarse RSTS-11 y se envió con BASIC-PLUS en 1971. [ 6 ]

Operación

Los usuarios se sentaban frente a una terminal y escribían instrucciones en lenguaje de programación. Estas instrucciones podían introducirse directamente en el intérprete de comandos del sistema o en un editor de texto , guardarse en un archivo y cargarse desde allí en el intérprete. Los errores en el código fuente se notificaban al usuario inmediatamente después de escribir la línea.

Dado que no se podía garantizar un terminal inteligente con control de cursor, BASIC-PLUS utilizaba el sistema común de anteponer un número de línea a todo el código fuente. El código se editaba escribiendo el número y modificando el contenido del código siguiente. Una línea de código se podía eliminar escribiendo únicamente su número, dejándola así como una línea vacía.

El espacio de direcciones virtuales de un usuario de RSTS/E estaba limitado a poco menos de 64 KB. Al usar BASIC-PLUS, aproximadamente la mitad de este espacio de direcciones virtuales era utilizado por el intérprete de comandos y la biblioteca de tiempo de ejecución combinados (denominado Sistema de Tiempo de Ejecución en RSTS/E). Esto limitaba los programas de usuario a unos 32 kB de memoria.

Los programas grandes se dividían en partes ejecutables independientes mediante una CHAINinstrucción específica, y podían encadenarse a números de línea concretos en un programa secundario para indicar que debían comenzar su ejecución en un punto distinto al de su primera línea. Esta función de encadenamiento a un número de línea determinado permitía a los programas comunicarse entre sí para indicar que estaban siendo llamados por otro programa. El uso de una sección de memoria compartida llamada core common también permitía a los programas transferirse datos según fuera necesario. También se podían usar archivos de disco , pero eran más lentos.

Para ahorrar memoria, el sistema incluía un gestor de memoria con recolección de basura, utilizado tanto para datos de cadena como para código de bytes.

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

Sintaxis y características

BASIC-PLUS se basa en gran medida en versiones posteriores de Dartmouth BASIC , incluyendo sus potentes MATcomandos. Además, DEC añadió varias estructuras de control de flujo únicas.

Edición

Los números de línea eran enteros positivos del 1 al 32767. [ 7 ] Las líneas lógicas de código podían continuar en varias 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 . [ 8 ] 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 podían colocar varias instrucciones en una sola línea usando :como separador de instrucciones. [ 8 ] El sistema permitía usar tabulaciones como espacio en blanco en línea y se usaba para hacer los bucles más claros, como en los lenguajes modernos. [ 9 ] Los comentarios usaban la REMpalabra clave o el !carácter, [ 10 ] a diferencia de MS BASIC, que usaba REMy '.

Declaraciones estándar

El PRINTcomando dividía la pantalla en regiones de 14 espacios de ancho, y la coma se usaba para moverse entre estas ubicaciones; PRINT 1,2,3mostraría 1, 2 y 3 de forma espaciada, [ 11 ] mientras que PRINT 1;2;3dejaría un solo espacio y produciría "1 2 3". [ 12 ] [ b ]INPUT permitía especificar una cadena de mensaje, pero usaba el punto y coma para separarla en lugar de la coma; . [ 13 ]INPUT"WHAT IS THE VALUE";A

Las cadenas podían estar delimitadas por comillas simples o dobles. [ 14 ] Además de las CHRfunciones ASCIIque convertían caracteres individuales a y desde formato de cadena, [ 15 ] BASIC-PLUS también admitía el comando de Dartmouth CHANGE. CHANGEiteraba 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 Xdevolvería una matriz con los cinco códigos ASCII, 110, 105, 114, 114, 105, en los elementos del 1 al 5, y el número 5, la longitud de la cadena, en el elemento 0. [ 16 ] También se podía invertir la operación, CHANGE X TO A$leería los números individuales en la matriz X y la convertiría a una cadena. [ 17 ]

Modificadores de sentencias

BASIC-PLUS añadió el concepto de "modificadores de sentencia", condiciones similares a las de JOSS que podían aplicarse a cualquier sentencia. Por ejemplo, es el equivalente de [ 18 ]. También se proporcionó lo contrario, era el equivalente de . [ 19 ].PRINTIIFI<>10IFI<>10THENPRINTIPRINTIUNLESSI=10IFI<>10THENPRINTI

FORLos bucles funcionaban como en otras versiones de BASIC, y el NEXTcomando no podía usarse en una expresión para salir anticipadamente. [ 20 ] En cambio, las palabras clave UNTILy WHILEpodían usarse para controlar las salidas anticipadas. Por ejemplo, continuar el bucle hasta que I=10, con la suposición de que el código siguiente establecería el valor de I, [ 21 ] lo que significa que podría no salir después de 10 iteraciones sino tan pronto como el código estableciera I en 10. [ 22 ] Los modificadores también podían usarse para construir bucles compactos de una sola línea, por ejemplo, haría un bucle hasta que X fuera 100. [ 23 ]FORI=1UNTILI=10X=X+1WHILEX<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. [ 9 ] Con la inclusión del "modo extendido" en versiones posteriores, los nombres de variables podían tener hasta 29 caracteres de longitud, y se añadió el punto (.) como carácter permitido. Todos los nombres de variables debían seguir comenzando con una letra. [ c ] Como en la mayoría de las versiones de BASIC, la LETpalabra clave, para la asignación de variables, era opcional. Podía asignar un único valor a varias variables, como . [ 24 ]LETA,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 de −32768 a +32767) se indicaron con un%sufijo, [ 25 ] las variables de cadena (longitud variable) se indicaron con un$sufijo. [ 14 ]

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

La DIMinstrucción podí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 instrucciones no establecían elementos en la fila 0 ni en la columna 0). [ 28 ] [ 29 ]

El lenguaje también incluía una serie de MATcomandos para trabajar con toda la matriz (o MATrix). El comando llenaría la matriz con valores en una instrucción, [ 30 ] llenaría la matriz con valores escritos por el usuario e imprimiría los elementos en un formato 1D o 2D. [ 31 ] también podría usarse para establecer valores predeterminados en una matriz usando palabras clave asociadas, por ejemplo, llenaría la matriz A con ceros. [ 32 ] transpondría una matriz completa y la invertiría. [ 33 ] Además, , , y podrían usarse en matrices, realizando la operación matricial asociada. [ 34 ]MATREADDATAMATINPUTMATPRINTMATMAT A=ZERTRNINV+-*

Procesamiento de archivos

La DIM#instrucció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 del ordenador (o incluso su espacio de direcciones), y permitía el uso de elementos de la matriz para leer, escribir y extender archivos de disco (almacenamiento persistente). A esta disposición la denominaban "almacenamiento de datos virtuales" y "núcleo virtual", pero no utilizaba el enfoque moderno de asignar las matrices y un archivo mapeado en memoria . En su lugar, se utilizaba 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 CLOSEinstrucción hacía que el búfer se reescribiera (si era necesario) antes de cerrar el archivo. Dado que no se almacenaban sectores adicionales en caché, acceder a los datos en el orden "incorrecto" podía multiplicar el número de accesos al disco. Se impusieron reglas adicionales a las matrices virtuales, de modo que un dato nunca podía abarcar un límite de registro: cada tipo de dato se alineaba a 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. [ 35 ]

Máquina virtual

BASIC-PLUS no era un intérprete, sino un sistema de compilación y ejecución : cada línea de BASIC se traducía a "PPCODE" (Push-Pop Code) a medida que se introducía, para su posterior ejecución rápida en su máquina virtual. Estas traducciones no tokenizaban las líneas de BASIC , sino que las reescribían para su uso en una máquina de pila ; no se podían traducir estas representaciones de nuevo a sentencias BASIC. Esto evitaba 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 (es decir, código multihilo ). BASIC-PLUS incluía un COMPILEcomando, pero este no era un compilador propiamente dicho; simplemente guardaba la representación PPCODE del programa para que no tuviera que recompilarse cuando el programa BASIC se cargara en memoria. El sistema almacenaba el programa del usuario en dos formatos. Uno era el código fuente editable en formato de texto, creado mediante el SAVEcomando y normalmente ubicado en un archivo .BAS. La otra era la versión PPCODE del programa creada por el COMPILEcomando y guardada en un archivo .BAC; los archivos .BAC eran más pequeños, se cargaban y ejecutaban más rápido, pero no se podían editar. [ 36 ] [ 37 ]

BÁSICO Plus 2

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

Utilizaba una compilación real en código multihilo y escribía su salida en archivos objeto compatibles con los archivos objeto de código máquina generados por el ensamblador y otros sistemas de lenguaje. Estos archivos objeto podían almacenarse en bibliotecas. Un enlazador (el TKB, también conocido como constructor de tareas) creaba archivos ejecutables a partir de los archivos objeto y las bibliotecas. El TKB también admitía superposiciones; esto permitía intercambiar rutinas individuales en el espacio de direcciones virtuales según fuera necesario, superponiendo las rutinas que no se estuvieran utilizando.

Además, los programas BP2 se ejecutaban bajo el sistema de tiempo de ejecución RSX; este RTS solo ocupaba 8 KB del espacio de direcciones virtuales del usuario, dejando 56 KB para el programa del usuario. [ 38 ] (La versión 9 de RSTS/E introdujo espacios separados para instrucciones y datos, y el sistema de tiempo de ejecución RSX "desaparecedor", lo que permitía hasta 64 KB de 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 redujo la necesidad de encadenar entre varios 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 posterior VAX BASIC .

Comparación con MS BASIC

Microsoft BASIC se basó 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 añadieron en la serie 2.x que se encontraba 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 BASIC para microcomputadoras. MS BASIC también carecía de los comandos de matriz.

Véase también

Notas

  1. En términos modernos, esto se consideraría un tokenizador, no un compilador en el uso actual del término.
  2. El espacio delante de los números se dejaba para un posible signo menos; este era el estándar en casi todos los BASIC.
  3. Antes de la introducción del modo Extender, no se requería espacio en blanco entre las variables y otros elementos del lenguaje:se interpretaría como.FORI=STOPFORI=STOP

Referencias

Citas

  1. Bell, C. Gordon ; Mudge, J. Craig; McNamara, John N. (1978). Ingeniería informática: Una perspectiva DEC del diseño de sistemas de hardware (PDF) . Digital Press . ISBN 0-932376-00-2.
  2. 1 2 Manes, Stephen (1993). Puertas . Doubleday. pág. 61. ISBN  9780385420754.
  3. 1 2 Ahl 2013 .
  4. 1 2 Fleig 1983 , pág. 52.
  5. 1 2 3 4 5 Dick 1990 .
  6. 1 2 3 Fleig 1983 , pág. 53.
  7. PLUS 1972 , pág. 2-1.
  8. 1 2 PLUS 1972 , pág. 2-3.
  9. 1 2 PLUS 1972 , págs. 2-6.
  10. PLUS 1972 , pág. 3-1.
  11. PLUS 1972 , págs. 3-7.
  12. PLUS 1972 , págs. 3-8.
  13. PLUS 1972 , págs. 3-10.
  14. 1 2 PLUS 1972 , pág. 5-2.
  15. PLUS 1972 , págs. 5-12.
  16. PLUS 1972 , pág. 5-5.
  17. PLUS 1972 , págs. 5-7.
  18. PLUS 1972 , págs. 8-17.
  19. PLUS 1972 , págs. 8-18.
  20. PLUS 1972 , págs. 3-19.
  21. PLUS 1972 , págs. 8-14.
  22. PLUS 1972 , págs. 8-15.
  23. PLUS 1972 , págs. 8-20.
  24. PLUS 1972 , pág. 3-3.
  25. PLUS 1972 , pág. 6-1, 6-2.
  26. PLUS 1972 , págs. 2-9.
  27. PLUS 1972 , págs. 2-10.
  28. PLUS 1972 , págs. 3-21.
  29. PLUS 1972 , pág. 5-3.
  30. PLUS 1972 , pág. 7-2.
  31. PLUS 1972 , pág. 7-3.
  32. PLUS 1972 , págs. 7-5.
  33. PLUS 1972 , pág. 7-7.
  34. PLUS 1972 , pág. A-1.
  35. PLUS 1972 , págs. 9-17.
  36. "¿Los operadores en línea de BASIC-PLUS realmente tienen sentido?" . Consultado el 5 de agosto de 2020 .
  37. Gary Luckenbaugh. "Funcionamiento interno de BASIC-PLUS" . 2 de abril de 2024.
  38. Manual de referencia de BASIC V2 (PDF) . Maynard, Massachusetts: Digital Equipment Corporation. 1991.

Bibliografía

  • Manual del lenguaje BASIC-PLUS (PDF). Maynard, Massachusetts: Digital Equipment Corporation. 1972.
  • Ahl, David; Ahl, Betsy (3-4 de abril de 2013). "Dave Ahl y Betsy Ahl" (Entrevista). Entrevistados por Kevin Savetz. ANTIC: El podcast de Atari de 8 bits.
  • Fleig, Clare (marzo de 1983). "Evans, Griffiths & Hart prospera bajo RSTS/E". Copia impresa .
  • Dick, Peter (1990). RSTS 80 cumpleaños . DECUS USA RSTS SIG.