BÁSICO09

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

BASIC09 es un dialecto de lenguaje de programación BASIC estructurado desarrollado por Microware en nombre de Motorola para la entonces nueva CPU Motorola 6809 y lanzado en febrero de 1980. Se usa principalmente con el sistema operativo OS-9., lanzado en 1979. Microware también lanzó una versión para OS-9/68k en el 68000 como Microware BASIC.

A diferencia de los BASIC típicos de la época, BASIC09 incluye un compilador de varias pasadas que produce un código de bytes compacto conocido como I-code. I-code reemplaza una serie de estructuras de datos que se encuentran en otros BASIC con punteros directos al código y los valores, lo que acelera el rendimiento. Los usuarios pueden seguir compilando el código usando el comando PACK, momento en el cual OS-9 puede llamarlo directamente y operarlo como código nativo. En el caso del código PACKed, se utiliza una versión reducida del sistema de tiempo de ejecución BASIC09, Runb, que mejora aún más la huella de memoria y el tiempo de carga.

El lenguaje incluye una serie de adiciones de programación estructurada, incluidas variables locales, la capacidad de ignorar los números de línea en favor de rutinas con nombre, estructuras definidas por el usuario y varios tipos de datos base distintos, incluidos 16 bits y 8 bits (byte) enteros, además de punto flotante y cadenas.

Sintaxis

Organización del programa

Una diferencia clave entre BASIC09 y los BASIC convencionales de la época, como el BASIC canónico de Microsoft, es la adición de la estructura PROCEDURE que creaba bloques de código ejecutables por separado. El código en un PROCEDURE tenía más en común con los programas completos en otros BASIC, incluidas las variables locales al código y su capacidad para ejecutarse de manera independiente. Los PROCEDURE se llamaban por su nombre mediante el comando RUN y podían incluir variables para la semántica de llamadas a funciones; por ejemplo, RUN add(4,7) llama a un procedimiento llamado add que toma dos parámetros. Los parámetros se importaron al procedimiento usando la palabra clave PARAM, en este ejemplo PARAM a,b:

PROCEDURE add
PARAM a,b
PRINT a+b

Un efecto secundario del uso de procedimientos con nombre es que el espacio de trabajo de la memoria resultante es, en efecto, su propio espacio de nombres. A este respecto, el sistema BASIC09 aparece para el usuario como un directorio de programas a los que se puede llamar. Esto contrasta con los BASIC típicos, donde solo un programa está disponible en un momento dado y la construcción de programas más grandes que llaman código similar a una biblioteca generalmente requiere que el código fuente se copie y pegue entre programas separados. En BASIC09, el usuario puede LOAD procedimientos por nombre en el espacio de trabajo y luego llamarlos desde su propio código para construir programas más grandes a partir de los procedimientos almacenados por separado.

Además del código en el área de trabajo, si el programa invoca RUN con un nombre de procedimiento que no se pudo encontrar, entonces buscará un archivo de disco con el mismo nombre y lo cargará y ejecutará. expediente. Esto funcionó no solo con el código BASIC09, sino también con cualquier otro programa ejecutable, incluidos los archivos de lenguaje de máquina. Esto significaba que BASIC09 podía llamar fácilmente a las rutinas del sistema.

Además de RUN, otros comandos BASIC comunes también usaban nombres. Por ejemplo, LIST bob imprimiría el código fuente ("list") del procedimiento llamado "bob", mientras que LIST* imprime todos los procedimientos actualmente en la memoria. La salida bastante impresa de LIST podría redirigirse a un archivo o una impresora con una notación similar a una concha, p. LIST bob >/p. También se podrían SAVE y LOAD procedimientos desde el almacenamiento.

Programación estructurada

Además de las propiedades organizativas del PROCEDIMIENTO, BASIC09 también incluyó una serie de extensiones a las declaraciones de control de flujo que se encuentran en BASIC para proporcionar más estructura. Por ejemplo, la instrucción IF podría usarse en el formato tradicional IF...THEN en una sola línea, o podría usarse en un formato estructurado de varias líneas:

IF x título10 THEN
PRINT "x es más grande que 10"
ELSE
PRINT "x es más pequeño que 10"
ENDIF
Los bucles

FOR/NEXT naturalmente tienen un formato estructurado ya que NEXT se puede colocar en cualquier línea, pero BASIC09 también agregó WHILE/ENDWHILE y REPEAT/UNTIL para mayor claridad al trabajar con bucles no indexados. También incluía el LOOP/ENDLOOP de salida central que usaba la declaración EXITIF para probar en cualquier parte del cuerpo del bucle.

Tipos de datos

BASIC09 incluía varios tipos de datos integrados. Además de la cadena tradicional (CADENA) y los tipos de coma flotante (REAL) de 40 bits que se encuentran en la mayoría de los BÁSICOS de la época, también incluía el INTEGER con signo de 16 bits, el BYTE sin signo de 8 bits y el tipo lógico BOOLEAN. Los tipos BOOLEAN no se empaquetaron en bytes, un solo BOOLEAN usó un byte completo de 8 bits para almacenar un solo valor. El lenguaje proporcionó operadores booleanos separados por bytes para operaciones por bits en BYTE y INTEGER. A diferencia de otros BASIC que también operaban con diferentes tipos de base, BASIC09 no "decoraba" el nombre de la variable para indicar el tipo y, en su lugar, utilizó el DIM para las definiciones; por ejemplo, DIM a,b:BOOLEAN para declarar dos variables BOOLEAN, o DIM c(5):INTEGER para una matriz de cinco INTEGER.

Además, BASIC09 incluía la palabra clave TYPE, que permitía definir tipos compuestos, con cada "elemento" listadas en una sola línea separadas por punto y coma. Por ejemplo:

TYPE employee_record=name:STRING;number(2):INTEGER;former:BOOLEAN

define un tipo de registro de empleado llamado employee_record con tres elementos, name, number y ex. El tipo employee_record ahora se puede usar en una definición como cualquier otro tipo, por ejemplo, DIM employee(100):employee_record, que define una matriz de 100 employee_record's. Se accede a los elementos en el código usando la notación de puntos, por ejemplo, employees(50).name="Bob".

Tiempo de ejecución

Edición

Los números de línea se usaban en la mayoría de los dialectos BASIC principalmente como una forma de apoyar al editor. Los usuarios editarían líneas particulares de código escribiendo un número, y el texto seguiría agregando o reemplazando las líneas que ya están en la memoria. Como cada línea de código tenía un número, esto también las hacía adecuadas para indicar el destino de un GOTO o GOSUB, en comparación con otros lenguajes como FORTRAN donde un &#34 separado;etiqueta de línea" se utilizó para este propósito.

BASIC09 normalmente no usaba números de línea, por lo que su editor tuvo que ser modificado para permitir al usuario editar líneas sin referirse a ellas por número. Sin embargo, BASIC09 no asumió ningún tipo de capacidad de pantalla completa, por lo que usar las teclas del cursor no era una opción. En cambio, el sistema tenía un indicador de editor separado y permitía al usuario moverse usando las teclas + y -, avanzando o hacia atrás una línea a la vez. Para insertar una nueva línea de código sin un número de línea, el usuario dejó un espacio en blanco al comienzo de la declaración.

Tenga en cuenta que el idioma distingue entre mayúsculas y minúsculas para los valores proporcionados por el usuario, como los nombres de procedimientos y variables, pero no para las palabras clave. Las palabras clave ingresadas en el editor en minúsculas se mostrarán en mayúsculas cuando el programa se LISTed. BASIC09 permitía varias declaraciones en una sola línea de código, pero usaba como separador en lugar de : que se usa en la mayoría de los dialectos. Esto se debe a que usó dos puntos en el operador de asignación :=, que se sumaba al = normal. := tenía un efecto idéntico a =, pero hacía más obvia la diferencia entre asignaciones y comparaciones.

Compilador

El compilador multipaso interno convierte el código fuente BASIC09 en un código de bytes tokenizado y optimizado, llamado I-code. I-code se diferencia del enfoque de tokenización más tradicional que se encuentra en la mayoría de los BASIC en que una cantidad de elementos se colocaron directamente en la memoria en lugar de usar referencias que luego debían buscarse.

Por ejemplo, en los intérpretes basados en MS, una referencia variable en el código se deja en formato de cadena; la variable VAR estaría representada en la memoria por los tres caracteres ASCII "VAR". Durante la ejecución, cuando se encuentra esta variable en el código, el intérprete tiene que buscar esa cadena en una tabla de variables, encontrar la dirección de almacenamiento asociada en la memoria y, finalmente, leer el valor almacenado en esa ubicación. La tabla generalmente se construye de modo que el valor siga al nombre, para ahorrar tiempo durante la búsqueda final.

Por el contrario, en I-code, la dirección de la variable se determina de antemano y la referencia en el código se reemplaza por esa dirección. Esto evita una búsqueda en tiempo de ejecución a través de la tabla de variables. Otras optimizaciones incluyen una rutina separada FOR/NEXT que se usa cuando la variable de índice es un INTEGER, y bibliotecas matemáticas INTEGER y REAL separadas.

Para mayor rendimiento, BASIC09 también incluyó el comando PACK que tomó un nombre de procedimiento y devolvió una versión optimizada. Algunas de estas optimizaciones incluyeron la eliminación de instrucciones no codificadas como comentarios de código y el reemplazo de expresiones constantes a un solo valor. Por ejemplo, PACK reconocería que LET x=x+SQR(100)/2 contiene solo constantes a la derecha y lo reemplaza con el código x= x+5, que requiere una sola operación en tiempo de ejecución, la suma, la eliminación de la división y la raíz cuadrada. PACK redujo el consumo de memoria del procedimiento y mejoró el rendimiento entre un 10 % y un 30 %.

Tiempo de ejecución ligero

Aunque era común ejecutar programas dentro del entorno BASIC09, como lo era en otros BASIC, BASIC09 también se envió con una versión separada del código de solo ejecución conocida como Runb. Runb eliminó las funciones de edición y depuración del sistema y, como resultado, tenía aproximadamente la mitad del tamaño del BASIC09 completo.

El propósito de Runb era principalmente ejecutar módulos PACKed cuando se los llamaba desde otros programas. Esto significaba que si el usuario ingresaba el nombre de un módulo BASIC09 en la línea de comandos de OS/9 y ese módulo se marcaba como PACKed, Runb lo abre y lo ejecuta en lugar de BASIC09. Esto reduce la huella de memoria y mejora el tiempo de carga.

Características importantes

  • disposiciones razonablemente estructuradas de la corriente de control (por ejemplo, los números de línea se necesitaban principalmente para calcular GOTO, como BASIC09 no tenía una declaración de conmutación / caso, o calculado GOSUB)
  • declaración de estructura (traer en cualquier variante BASIC; más común en las implementaciones BASIC posteriores)
  • tipos de datos intrínsecos y booleanos
  • más de dos caracteres significativos en nombres variables (algunos BASIC del tiempo permitieron sólo uno, muchas variantes de Microsoft BASIC permitieron sólo dos)
  • procedimientos con variables locales Todos variables en BASIC09 son locales a procedimientos) y parámetro pasando por referencia
  • un depurador razonable (sólo un inconveniente significativo era que uno no podía examinar el contenido de los campos en las estructuras)
  • una manera de interactuar con el código de lenguaje de la máquina, que podría pasar parámetros utilizando la secuencia de llamadas BASIC09
  • la impresión automática de la fuente, que fortaleció un diseño estándar y evitó el enorme desorden que era la apariencia habitual de un programa de cualquier tamaño en los BASIC interpretados de la época. Los programadores normalmente anularían el mayor número posible de líneas para evitar la memoria del número de línea, no un problema en BASIC09

Contenido relacionado

Unidad de servicio de datos

Una unidad de servicio de datos, a veces llamada unidad de servicio digital, es un equipo de terminación de circuito de telecomunicaciones que transforma...

Recuperación asistida por conocimientos en el contexto de la actividad

Recuperación asistida por conocimientos en contexto de actividad es un sistema que se está desarrollando en los Estados Unidos para utilizarlo en la...

Área de trabajo personal

Una red de área personal es una red informática para interconectar dispositivos electrónicos dentro del espacio de trabajo de una persona individual. Un...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save