VSI BASIC para OpenVMS es el nombre más reciente de un dialecto del lenguaje de programación BASIC creado por Digital Equipment Corporation (DEC) y ahora propiedad de VMS Software Incorporated (VSI). Originalmente se desarrolló como BASIC-PLUS en la década de 1970 para el sistema operativo RSTS-11 en la minicomputadora PDP-11 . Posteriormente se adaptó a OpenVMS , primero para VAX , luego para Alpha , Integrity y, más recientemente, para x86-64 .
Entre los nombres anteriores del producto se incluyen: BASIC-PLUS , Basic Plus 2 ( BP2 o BASIC-Plus-2 ), VAX BASIC , DEC BASIC , Compaq BASIC para OpenVMS y HP BASIC para OpenVMS . También existen varias variantes de los títulos que indican la plataforma de hardware (VAX, AlphaServer, etc.).
Características destacadas
VSI BASIC cuenta con numerosas extensiones similares a las de FORTRAN , además de ser compatible con los operadores matriciales originales de Dartmouth BASIC .
Los números de línea son opcionales, a menos que esté presente la función "ERL". Esta permite escribir manejadores de errores "WHEN ERROR" alrededor de las sentencias protegidas . La sentencia "ON ERROR", más tradicional pero menos elegante, carece de dicho contexto o alcance.
Una de las características más destacadas de VSI BASIC es la compatibilidad integrada con los potentes servicios de gestión de registros (RMS) de OpenVMS . Antes del lanzamiento de VAX BASIC, la compatibilidad nativa con RMS solo estaba disponible en el compilador COBOL de DEC .
Historia
La historia del producto VSI BASIC para OpenVMS abarca más de 30 años, periodo durante el cual ha experimentado numerosos cambios de nombre y de propietario. Asimismo, se ha adaptado a diversas plataformas desarrolladas por DEC, Compaq, HP y VSI. El nombre de la empresa o de la plataforma a menudo se ha incluido en el nombre del producto, lo que ha contribuido a la proliferación de nombres.
BÁSICO-PLUS
VSI BASIC comenzó como BASIC-PLUS , creado por DEC para su sistema operativo RSTS-11 y la minicomputadora PDP-11 . Las instrucciones del lenguaje de programación podían escribirse directamente en el intérprete de comandos o introducirse en un editor de texto , guardarse en un archivo y luego cargarse en el intérprete de comandos desde ese archivo. Los errores en el código fuente se notificaban al usuario inmediatamente después de introducir la línea.
Los programas se almacenaban como un archivo fuente .BAS , utilizando el comando "SAVE". Podían "compilarse" en un archivo binario .BAC no editable , utilizando el comando "COMPILE". Este comando no producía programas en lenguaje máquina propiamente dicho , sino un código de bytes llamado "tokens". Los tokens se interpretaban al ejecutarse, de forma similar al lenguaje Java más moderno .
Los programas se introducían en el intérprete de comandos comenzando con números de línea , enteros del 1 al 32767. Las líneas podían continuarse en varias líneas utilizando el carácter de salto de línea . Para facilitar la edición externa del archivo fuente, las versiones posteriores de BASIC-PLUS también permitían el carácter & como separador de línea. Se podían colocar varias instrucciones en una sola línea utilizando \como separador de instrucciones.
Para los sistemas PDP-11 con memoria virtual ( RSTS/E ), el espacio de direcciones estaba limitado a unos 64 KB . Con BASIC-PLUS, aproximadamente la mitad de este espacio era utilizado por el intérprete de comandos y la biblioteca de tiempo de ejecución combinados. Esto limitaba los programas de usuario a unos 32 KB de memoria. Los sistemas RSTS-11 más antiguos carecían de memoria virtual, por lo que el programa de usuario tenía que ajustarse a la memoria física restante después de que RSTS y BASIC-PLUS ocuparan su parte. Por ejemplo, en un PDP-11/35 con 32 KB de memoria física, ejecutando RSTS-11 V04B-17, los programas de usuario estaban limitados a 7 KB. Los programas grandes podían dividirse en varias partes mediante la instrucción "CHAIN". Los programas podían encadenarse a números de línea específicos en un programa secundario. El uso de una sección de memoria compartida llamada core common también permitía a los programas pasar datos entre sí según fuera necesario; también se podían usar archivos de disco , pero eran más lentos.
El intérprete 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 podía interrumpirse, examinarse y modificarse sus variables, y luego reanudarse. Muchas de las estructuras de control utilizadas en otros lenguajes de alto nivel existían en BASIC-PLUS, incluyendo WHILE y UNTIL. El lenguaje también admitía el uso de modificadores condicionales en una sola línea. Por ejemplo, la línea " " imprimiría el valor de "I" a menos que I fuera menor que 10.PRINTIUNLESSI<10
BÁSICO Plus 2
Basic Plus 2 ( BP2 o BASIC-Plus-2 ) fue desarrollado posteriormente por DEC para añadir funciones adicionales y mejorar el rendimiento. Utilizaba compilación real en código multihilo y escribía su salida en archivos objeto de lenguaje máquina . Estos eran compatibles con otros archivos objeto del sistema y podían ensamblarse en bibliotecas. Un enlazador (el generador de tareas TKB) creaba entonces archivos ejecutables a partir de ellos. TKB también admitía superposiciones, lo que permitía intercambiar rutinas individuales con el espacio de memoria principal según fuera necesario.
Los programas BP2 se ejecutaban bajo el sistema de tiempo de ejecución RSX de RSX-11 o RSTS/E. Este sistema ocupaba solo 8 KB (posteriormente, 2 KB) del espacio de direcciones del usuario, dejando 56 KB para el programa. Estos dos factores permitieron que los programas BP2 individuales fueran mucho más grandes que los programas BASIC-PLUS, eliminando a menudo la necesidad de encadenar procesos. A diferencia de BASIC-PLUS (que solo estaba disponible en RSTS-11), BP2 también se podía usar en el sistema operativo RSX-11.
VAX BASIC y DEC BASIC
Con la creación del miniordenador VAX , DEC adaptó BASIC-PLUS-2 al nuevo sistema operativo VMS y lo denominó VAX BASIC . VAX BASIC utilizaba los estándares de llamada de VMS, por lo que el código objeto generado por VAX BASIC podía vincularse con el código objeto generado por cualquier otro lenguaje de VMS. El código fuente de BASIC Plus 2 solía ejecutarse en VAX BASIC sin grandes modificaciones.
Cuando DEC creó su microprocesador Alpha , VMS se adaptó a él y se renombró como OpenVMS . De igual manera, VAX BASIC se adaptó a Alpha y se renombró como DEC BASIC . El intérprete de BASIC se eliminó definitivamente en ese momento, lo que significaba que los programas de DEC BASIC solo podían ejecutarse como ejecutables de OpenVMS , producidos mediante una compilación seguida de un enlace .
Compaq, HP y VSI
Cuando Compaq adquirió DEC en 1997/98, los productos pasaron a llamarse Compaq BASIC para OpenVMS VAX y Compaq BASIC para OpenVMS Alpha .
Asimismo, cuando Compaq se fusionó con HP en 2001/02, los productos pasaron a llamarse HP BASIC para OpenVMS en VAX y HP BASIC para OpenVMS en AlphaServer . Posteriormente, HP lanzó HP BASIC para OpenVMS en Integrity para sus plataformas de servidores Integrity basadas en los procesadores Itanium de Intel .
A mediados de 2014, HP vendió todo el ecosistema OpenVMS a VSI, que renombró el producto como VSI BASIC para OpenVMS . [ 1 ]
Código de ejemplo
VSI BASIC es una variante estructurada de BASIC en la que los números de línea son opcionales y el lenguaje admite tanto SUB como FUNCTION.
Hola Mundo
Imprimir "¡Hola, mundo!"Conversión de grados Celsius a Fahrenheit
función real a_fahrenheit ( real celsius ) a_fahrenheit = ( celsius * 1.8 ) + 32 fin funciónfunción real externa to_fahrenheit ( real ) declarar real temp_celsiuscuando error en imprimir "Ingrese una temperatura en grados Celsius" ; entrada x temp_celsius = real ( x ) usar imprimir "Error: ingrese un valor numérico válido, por favor." fin cuandoprint "La temperatura en grados Fahrenheit es " ; to_fahrenheit ( temp_celsius )finReferencias
- ↑ "Manual de usuario de VSI BASIC para OpenVMS" (PDF) . 2018.
Enlaces externos
- Documentación oficial de BASIC en HP
- HP BASIC para OpenVMS "demostraciones y ejemplos de código fuente"