Directiva (programación)

Construcción del lenguaje que especifica cómo un compilador debe procesar su entrada

En programación informática , una directiva o pragma (de "pragmático") es una construcción del lenguaje que especifica cómo un compilador (u otro traductor ) debe procesar su entrada. Dependiendo del lenguaje de programación , las directivas pueden o no ser parte de la gramática del lenguaje y pueden variar de un compilador a otro. Pueden ser procesadas por un preprocesador para especificar el comportamiento del compilador o funcionar como una forma de parametrización en banda.

En algunos casos, las directivas especifican un comportamiento global, mientras que en otros casos solo afectan a una sección local, como un bloque de código de programación. En algunos casos, como en algunos programas en C, las directivas son sugerencias opcionales del compilador y pueden ignorarse, pero normalmente son prescriptivas y deben seguirse. Sin embargo, una directiva no realiza ninguna acción en el lenguaje en sí, sino solo un cambio en el comportamiento del compilador.

Este término se puede utilizar para referirse a etiquetas y comandos (o marcado) de terceros que se encuentran integrados en el código y que dan como resultado un procesamiento ejecutable adicional que amplía las construcciones de lenguaje, ensamblador y compilador existentes en el entorno de desarrollo. El término "directiva" también se aplica de diversas maneras que son similares al término comando .

El preprocesador C

En C y C++ , el lenguaje admite un preprocesador de macros simple . Las líneas de código fuente que debe manejar el preprocesador, como y, se denominan directivas de preprocesador .#define#include

Las construcciones sintácticas similares a las directivas de preprocesador de C, como por ejemplo C# , #iftambién suelen denominarse "directivas", aunque en estos casos puede que no haya ninguna fase de preprocesamiento real involucrada.

Todos los comandos del preprocesador comienzan con un símbolo numeral (#) con la excepción de las directivas de importación y módulo en C++ . [1]

Historia

Las directivas datan de JOVIAL . [2]

COBOL tenía una directiva COPY.

En ALGOL 68 , las directivas se conocen como pragmats (de "pragmatic"), y se denotan pragmat o pr ; en lenguajes más nuevos, especialmente C, esto se ha abreviado como "pragma" (sin 't').

Un uso común de los pragmats en ALGOL 68 es especificar un régimen de stropping , es decir, "cómo se indican las palabras clave". A continuación se presentan varias directivas de este tipo, que especifican los regímenes POINT, UPPER, RES (reservado) o de comillas. Observe el uso de stropping para la palabra clave pragmat en sí (abreviada pr ), ya sea en los regímenes POINT o de comillas:

PUNTO .PR.PR SUPERIOR .PR.PR RES.PRcita 'pr'

En la actualidad, las directivas son más conocidas en el lenguaje C, de principios de la década de 1970, y continuaron hasta el estándar actual C99 , donde son instrucciones para el preprocesador de C o, en forma de #pragma, directivas para el compilador mismo. También se utilizan en cierta medida en lenguajes más modernos; consulte a continuación.

Otros idiomas

  • En Ada , las directivas del compilador se denominan pragmas (abreviatura de "información pragmática").
  • En Common Lisp , las directivas se denominan declaraciones y se especifican mediante el declareconstructor (también proclaimo declaim). [3] Con una excepción, las declaraciones son opcionales y no afectan la semántica del programa. La única excepción es special, que debe especificarse cuando corresponda.
  • En Turbo Pascal , las directivas se denominan comentarios significativos , porque en la gramática del lenguaje siguen la misma sintaxis que los comentarios . En Turbo Pascal, un comentario significativo es un comentario cuyo primer carácter es un signo de dólar y cuyo segundo carácter es una letra; por ejemplo, el equivalente de #include "file"la directiva de C es el comentario significativo {$I "file"}.
  • En Perl , la palabra clave " use", que importa módulos, también se puede utilizar para especificar directivas, como use strict;o use utf8;.
  • Los pragmas de Haskell se especifican utilizando una sintaxis de comentarios especializada, por ejemplo {-# INLINE foo #-}. [4]
  • PHP utiliza la directiva declare(strict_types=1).
  • Python tiene dos directivas from __future__ import feature(definidas en PEP 236 -- Back to the __future__), que cambia las características del lenguaje (y utiliza la sintaxis de importación de módulos existente, como en Perl), y la codingdirectiva (en un comentario) para especificar la codificación de un archivo de código fuente (definida en PEP 263 -- Defining Python Source Code Encodings). Se propuso y rechazó una declaración directiva más general en PEP 244 -- La declaración `directive'; todas estas datan de 2001.
  • ECMAScript también adopta la usesintaxis de las directivas, con la diferencia de que los pragmas se declaran como literales de cadena (por ejemplo "use strict";, , o "use asm";), en lugar de una llamada de función.
  • En Visual Basic , la palabra clave " Option" se utiliza para directivas:
    • Option Explicit On|Off- Cuando está activado, no se permite la declaración implícita de variables en el primer uso y se requiere una declaración explícita de antemano.
    • Option Compare Binary- Resultados en comparaciones de cadenas basadas en un orden de clasificación derivado de las representaciones binarias internas de los caracteres, por ejemplo, para la página de códigos inglesa/europea (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø. Afecta a los operadores intrínsecos (por ejemplo, =, <>, <, >), al bloque Select Case y a las funciones de cadena de la biblioteca de tiempo de ejecución de VB (por ejemplo, InStr).
    • Option Compare Text- Los resultados en comparaciones de cadenas se basan en un orden de clasificación de texto que no distingue entre mayúsculas y minúsculas determinado por la configuración regional de su sistema, por ejemplo, para la página de códigos inglesa/europea (ANSI 1252) (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). Afecta a los operadores intrínsecos (por ejemplo, =, <>, <, >), al bloque Seleccionar caso y a las funciones de cadena de la biblioteca de tiempo de ejecución de VB (por ejemplo, InStr).
    • Option Strict On|Off- Cuando está activado no permite:
      • Programación sin tipo: las declaraciones que carecen de un tipo explícito se tipifican implícitamente como Objeto.
      • enlace tardío (es decir, envío dinámico a objetos CLR, DLR y COM) en valores tipificados estáticamente como Objeto.
      • Conversiones de restricción implícitas: requieren que todas las conversiones a tipos más restringidos (por ejemplo, de Long a Integer, de Object a String, de Control a TextBox) sean explícitas en el código utilizando operadores de conversión (por ejemplo, CInt, DirectCast, CType).
    • Option Infer On|Off- Cuando está activado, permite al compilador inferir el tipo de variables locales a partir de sus inicializadores.
  • En Ruby , las directivas de interpretación se denominan pragmas y se especifican mediante comentarios en la parte superior del archivo que siguen a una key: valuenotación. Por ejemplo, coding: UTF-8indica que el archivo está codificado mediante la codificación de caracteres UTF-8 .
  • En C# , las directivas del compilador se denominan directivas de preprocesamiento. Hay varias directivas de compilador diferentes, incluida #pragma, que se utiliza específicamente para controlar las advertencias del compilador y las sumas de comprobación del depurador. [5] [6]
  • El DBMS SQLite incluye una directiva PRAGMA que se utiliza para introducir comandos que no son compatibles con otros DBMS. [7]
  • En Solidity , las directivas del compilador se denominan pragmas y se especifican utilizando la palabra clave `pragma`. [8]

Lenguaje ensamblador

  • En lenguaje ensamblador , las directivas, también denominadas pseudooperaciones o "pseudo-ops", generalmente especifican información como la máquina de destino, marcan separaciones entre secciones de código, definen y cambian variables de tiempo de ensamblaje, definen macros, designan código condicional y repetido, definen áreas de memoria reservadas, etc. Algunos ensambladores, pero no todos, usan una sintaxis específica para diferenciar las pseudooperaciones de los mnemónicos de instrucción, como anteponer un punto a la pseudooperación, como pseudo-op .END, que podría indicar al ensamblador que deje de ensamblar código.

PL/SQL

Véase también

Notas al pie

  1. ^ "P1857R1 - Descubrimiento de dependencia de módulos".
  2. ^ "Capítulo 17 - Directivas" (PDF) . Manual de programación informática para el lenguaje JOVIAL (J73) (PDF) (Informe técnico). Junio ​​de 1981. págs. 243–263. RADC-TR-81-143 . Consultado el 28 de mayo de 2023 .
  3. ^ Steele 1990, Capítulo 9: Declaraciones, pág. 215–237.
  4. ^ "7.20. Pragmas". Documentación de GHC 7.8.3 . Consultado el 18 de julio de 2014 .
  5. ^ dotnet-bot. "Estructura léxica: especificación del lenguaje C#". docs.microsoft.com . Consultado el 1 de noviembre de 2019 .
  6. ^ BillWagner. "#pragma - Referencia de C#". docs.microsoft.com . Consultado el 1 de noviembre de 2019 .
  7. ^ "Declaraciones pragmáticas admitidas por SQLite". www.sqlite.org .
  8. ^ "Diseño de un archivo fuente de Solidity — Documentación de Solidity 0.8.27". docs.soliditylang.org . Consultado el 3 de junio de 2024 .
  9. ^ Feuerstein, Steven ; Pribyl, Bill (23 de enero de 2014). Programación de Oracle PL/SQL (6.ª edición). O'Reilly Media, Inc. (publicado en 2014). ISBN 9781449324414. Recuperado el 16 de junio de 2016. PL/SQL tiene una palabra clave PRAGMA con la siguiente sintaxis: PRAGMA instruction_to_compiler ; [...] PL/SQL ofrece varios pragmas [...]

Referencias

  • Sitio web de OpenMP
  • Sitio web de OpenACC
  • Sitio web de OpenHMPP
Obtenido de "https://es.wikipedia.org/w/index.php?title=Directiva_(programación)&oldid=1245194649"