stringtranslate.com

Proteccion

Protel significa "Procedure Oriented Type Enforcing Language" (lenguaje orientado a procedimientos y de aplicación de tipos). Es un lenguaje de programación diseñado en 1975 por Nortel Networks y utilizado en sistemas de conmutación de telecomunicaciones como el DMS-100 . [1] [2] Protel-2 es la versión orientada a objetos de Protel. [3] [4]

El lenguaje PROTEL fue diseñado para satisfacer las necesidades de la telefonía digital y es la base de la línea de sistemas de conmutación DMS-100 . PROTEL es un lenguaje fuertemente tipado, estructurado en bloques, que se basa en gran medida en PASCAL y ALGOL 68 con un estilo de asignación de variables de izquierda a derecha, matrices de tamaño variable y estructuras extensibles. Los diseñadores de PROTEL ampliaron significativamente el PASCAL de la época al agregar compilación externa y ampliar las estructuras de datos disponibles en el lenguaje. [3]

El compilador PROTEL está estrechamente integrado con el sistema operativo (SOS), la aplicación (CALLP), el entorno de desarrollo (PLS) y, originalmente, el procesador (NT40). PLS, SOS, CALLP y el propio compilador están escritos en PROTEL. Cualquier descripción del lenguaje PROTEL no puede dejar de incluir algunos aspectos de los otros componentes.

PROTEL tiene una aplicación de tipos muy estricta, pero el acoplamiento estrecho de los componentes crea oportunidades para evitar algunas comprobaciones de tipos para codificadores expertos mediante el uso directo de las características internas del compilador.

PROTEL se considera "prolijo", ya que contiene una gran cantidad de palabras reservadas y algunas afirmaciones se leen como en inglés.

El código fuente de PROTEL no distingue entre mayúsculas y minúsculas, pero por convención se utilizan mayúsculas para las palabras reservadas.

Variables y asignaciones

La mayoría de las variables globales y todas las locales se declaran utilizando la palabra reservada DECL.

Las variables se pueden inicializar utilizando la palabra clave INIT.

Las constantes usan la palabra clave IS, las hexadecimales usan #.

Las variables globales también pueden usar declaraciones PROTECTED o PRIVATE para definir datos protegidos contra escritura o datos locales de subprocesos, respectivamente. Las escrituras en datos protegidos requieren el uso de primitivas integradas que alteran los datos protegidos de manera segura. Los datos protegidos sobreviven a todos los reinicios, salvo que se vuelva a cargar la imagen del sistema.

Tenga en cuenta que los argumentos WRITE_PROTECTED_STORE son independientes del tipo siempre que los tipos de ambos argumentos coincidan.

PRIVATE proporciona una copia privada de los datos para cada proceso que los utiliza. No existe la funcionalidad COW, a cada proceso se le asigna su propia copia y, opcionalmente, la inicializa en el momento de su creación.

Nota: Las variables locales definidas mediante DECL son naturalmente privadas.

GAZINTA

Gazinta es el nombre coloquial que se utiliza para el operador de asignación '->'. Su nombre proviene de 'goes into', que significa expresión gazinta (entra en) variable. Las expresiones se evalúan en estricto orden de izquierda a derecha sin precedencia de operadores. La falta de precedencia de operadores es un legado del procesador NT40 que utilizaba una ALU basada en pila con lógica RPN. Los paréntesis se utilizan para priorizar las subexpresiones.

Punteros

El operador de puntero es @ y se coloca después de ptr. Un puntero NULL es un valor predefinido que se garantiza que no apunta a una dirección asignada. No es 0 ni -1 ni ningún otro patrón de memoria no inicializada predefinido (#FDFD). En otras palabras, un puntero no es NULL de forma predeterminada, debe establecerse en el código. No se admite la aritmética de punteros.

Nota: Desreferenciar un puntero NULL provocará una trampa de acceso a datos.

Descriptores

El descriptor 'DESC' es una estructura definida por el compilador que contiene un puntero a una matriz y el límite superior de la matriz. Una matriz descriptiva se indexa utilizando la sintaxis de matriz simple 'MY_DESC[I]' y el operador UPB se puede utilizar para acceder al límite superior 'UPB MYDESC'. También existe un operador TDSIZE como un legado de la implementación del descriptor en NT40: TDSIZE = UPB+1. Los descriptores tienen una comprobación automática de límites de tiempo de ejecución en matrices asignadas dinámicamente. La indexación de un descriptor fuera de los límites o la indexación de un descriptor NULL provocará una trampa de comprobación de rango del descriptor. UPB es generalmente utilizado por el software de aplicación para manejar de forma más elegante el índice fuera de rango.

Nota: NULL se puede utilizar para punteros y descriptores.

Las cadenas utilizan descriptores de forma extensiva. Las cadenas tienen una longitud definida y no tienen ningún carácter de terminación NULL.

Bloques

El alcance del bloque se define mediante las instrucciones BLOCK y ENDBLOCK, que son análogas a BEGIN END en Pascal o { } en C. Los bloques se pueden etiquetar opcionalmente para mejorar la funcionalidad y la verificación del compilador.

Procedimientos

Los procedimientos y funciones se diferencian únicamente por la presencia de la cláusula RETURN y el requisito de incluir una sentencia RETURN. Una sentencia RETURN puede insertarse en cualquier parte de una función o procedimiento.

Declaración

Implementación

Estructuras

La TABLA es la estructura básica de una matriz. La TABLA solo se utiliza para matrices cuyo tamaño se conoce en el momento de la compilación. Los descriptores son la forma preferida de hacer referencia a matrices. La indexación de una tabla fuera de rango provocará una trampa de comprobación de rango de la tabla. Los operadores UPB y TDSIZE también se aplican a las tablas.

Sindicatos

OVERLAY es la estructura de unión básica. Se declara y se utiliza de manera similar a los lenguajes derivados de Pascal.

ZONAS

Las áreas son bloques de memoria que se pueden convertir en TABLAS y SUPERPOSICIONES. Se declaran en bytes y, por lo general, se declaran lo suficientemente grandes como para permitir una expansión futura. Esto se debe al deseo de actualizar el software DMS "en vivo" sin necesidad de reiniciar. La naturaleza modular de PROTEL permite intercambiar fragmentos de código relativamente pequeños en una carga; si las ÁREAS se planificaran de manera inteligente, esto no afectaría la ubicación de los módulos en la memoria, lo que evitaría un reinicio.

SUBSISTEMAS, MÓDULOS y SECCIONES

Una SECCIÓN es un archivo de texto que contiene el código fuente y las directivas para gestionar los diferentes tipos de secciones y su posición en la jerarquía de módulos. Una SECCIÓN es la unidad más pequeña de compilación. Un MÓDULO es la unidad más pequeña de enlace y carga y contiene una o más secciones. Un SUBSISTEMA es la unidad más pequeña de empaquetado y contiene uno o más módulos.

Flujo de control

Existen dos formas de la instrucción case (switch). El uso de la palabra clave CASE utiliza una tabla de salto y SELECT utiliza una lógica secuencial if-then-else. Los casos son exclusivos, no se descartan como en C.

Referencias

  1. ^ Krishna, Sundeep Sahay, Brian Nicholson, S. (2003). Subcontratación global de TI: desarrollo de software a través de las fronteras . Cambridge: Cambridge University Press. pág. 7. ISBN 978-0521816045.{{cite book}}: CS1 maint: varios nombres: lista de autores ( enlace )
  2. ^ Telésis (3), 1989 {{citation}}: Falta o está vacío |title=( ayuda )
  3. ^ ab “Experiencia con un lenguaje tipado modular: PROTEL”, ICSE '81 Actas de la 5ª conferencia internacional sobre ingeniería de software
  4. ^ Dini, P.; Boutaba, R.; Logrippo, L., eds. (1997). Interacciones de características en redes de telecomunicaciones IV . Ámsterdam: IOS Press. p. 23. ISBN 978-9051993479.