Diretiva (programação) - Directive (programming)

Na programação de computadores , uma diretiva ou pragma (de "pragmático") é uma construção de linguagem que especifica como um compilador (ou outro tradutor ) deve processar sua entrada. As diretivas não fazem parte da gramática de uma linguagem de programação e podem variar de compilador para compilador. Eles podem ser processados ​​por um pré - processador para especificar o comportamento do compilador ou funcionar como uma forma de parametrização em banda .

Em alguns casos, as diretivas especificam o comportamento global, enquanto em outros casos elas afetam apenas uma seção local, como um bloco de código de programação. Em alguns casos, como alguns programas C, as diretivas são dicas opcionais do compilador e podem ser ignoradas, mas normalmente são prescritivas e devem ser seguidas. No entanto, uma diretiva não executa nenhuma ação na linguagem em si, mas apenas uma mudança no comportamento do compilador.

Este termo pode ser usado para se referir a tags e comandos proprietários de terceiros (ou marcação) embutidos no código que resultam em processamento executável adicional que estende o compilador, assembler e construções de linguagem existentes presentes no ambiente de desenvolvimento. O termo "diretiva" também é aplicado de várias maneiras semelhantes ao termo comando .

O pré-processador C

Em C e C ++ , a linguagem suporta um pré-processador de macro simples . As linhas de origem que devem ser tratadas pelo pré-processador, como e são chamadas de diretivas do pré-processador . #define#include

Outra construção C, a #pragma diretiva, é usada para instruir o compilador a usar recursos pragmáticos ou dependentes de implementação. Dois usuários notáveis ​​desta diretiva são OpenMP e OpenACC .

Construções sintáticas semelhantes com as directivas de pré-processador de C, como C # 's #if , são também tipicamente chamado 'directivas', embora, nestes casos, pode não haver qualquer fase de pré-processamento real envolvido.

Todos os comandos do pré-processador começam com um símbolo hash (#).

História

As diretivas datam do ALGOL 68 , onde são conhecidas como pragmatas (de "pragmático") e denotadas como pragmat ou pr ; em linguagens mais recentes, notavelmente C, foi abreviado para "pragma" (sem 't').

Um uso comum de pragmats no ALGOL 68 é na especificação de um regime de stropping , significando "como as palavras-chave são indicadas". Seguem várias dessas diretivas, especificando o POINT, UPPER, RES (reservado) ou regimes de cotação. Observe o uso de stropping para a própria palavra-chave pragmat (abreviado pr ), tanto no POINT quanto nos regimes de cotação:

.PR POINT .PR
.PR UPPER .PR
.PR RES .PR
'pr' quote 'pr'

Hoje, as diretivas são mais conhecidas na linguagem C, do início dos anos 1970, e continuadas até o padrão C99 atual , onde são instruções para o pré-processador C ou, na forma de #pragma diretivas para o próprio compilador. Eles também são usados ​​até certo ponto em línguas mais modernas; ver abaixo.

Outras línguas

  • Em Ada , as diretivas do compilador são chamadas de pragmas (abreviação de "informação pragmática").
  • No Common Lisp , as diretivas são chamadas de declarações e são especificadas usando a declare construção (também proclaim ou declaim ). Com uma exceção, as declarações são opcionais e não afetam a semântica do programa. A única exceção é special , que deve ser especificada quando apropriado.
  • No Turbo Pascal , as diretivas são chamadas de comentários significativos , porque na gramática da linguagem elas seguem a mesma sintaxe dos comentários . No Turbo Pascal, um comentário significativo é um comentário cujo primeiro caractere é um cifrão e cujo segundo caractere é uma letra; por exemplo, o equivalente da #include "file" diretiva de C é o comentário significativo {$I "file"} .
  • Em Perl , a palavra - chave " use ", que importa módulos, também pode ser usada para especificar diretivas, como use strict; ou use utf8; .
  • Os pragmas Haskell são especificados usando uma sintaxe de comentário especializada, por exemplo {-# INLINE foo #-} .
  • Python tem duas diretivas - from __future__ import feature (definidas no PEP 236 - de volta ao __future__ ), que muda os recursos da linguagem (e usa a sintaxe de importação do módulo existente, como em Perl), e a coding diretiva (em um comentário) para especificar a codificação de um arquivo de código-fonte (definido em PEP 263 - Definindo Python Source Code Encodings ). Uma declaração de diretiva mais geral foi proposta e rejeitada no PEP 244 - A declaração 'diretiva' ; todos eles datam de 2001.
  • ECMAScript também adota a use sintaxe para diretivas, com a diferença de que os pragmas são declarados como literais de string (por exemplo "use strict"; , ou "use asm"; ), em vez de uma chamada de função.
  • No Visual Basic , a palavra-chave " Option " é usada para diretivas:
    • Option Explicit On|Off - Quando ativado, não permite a declaração implícita de variáveis ​​no primeiro uso, exigindo uma declaração explícita de antemão.
    • Option Compare Binary - Resultados em comparações de string com base em uma ordem de classificação derivada das representações binárias internas dos caracteres - por exemplo, para a página de código inglês / europeu (ANSI 1252) A <B <E <Z <a <b <e <z <À < Ê <Ø <à <ê <ø. Afeta operadores intrínsecos (por exemplo, =, <>, <,>), o bloco Select Case e funções de string de biblioteca de tempo de execução VB (por exemplo, InStr).
    • Option Compare Text - Resultados em comparações de strings com base em uma ordem de classificação de texto que não diferencia maiúsculas de minúsculas, determinada pela localidade do seu sistema - por exemplo, para a página de código inglês / europeu (ANSI 1252) (A = a) <(À = à) <(B = b) < (E = e) <(Ê = ê) <(Z = z) <(Ø = ø). Afeta operadores intrínsecos (por exemplo, =, <>, <,>), o bloco Select Case e funções de string de biblioteca de tempo de execução VB (por exemplo, InStr).
    • Option Strict On|Off - Quando ativado, não permite:
      • programação sem tipo - onde as declarações que carecem de um tipo explícito são digitadas implicitamente como Object.
      • vinculação tardia (ou seja, envio dinâmico para objetos CLR, DLR e COM) em valores tipificados estaticamente como Objeto.
      • conversões implícitas de estreitamento - exigindo que todas as conversões para tipos mais estreitos (por exemplo, de Long para Integer, Object para String, Control para TextBox) sejam explícitas no código usando operadores de conversão (por exemplo, CInt, DirectCast, CType).
    • Option Infer On|Off - Quando ativado, permite que o compilador inferir o tipo de variáveis ​​locais de seus inicializadores.
  • Em Ruby , as diretivas do interpretador são chamadas de pragmas e são especificadas por comentários no início do arquivo que seguem uma key: value notação. Por exemplo, coding: UTF-8 indica que o arquivo é codificado por meio da codificação de caracteres UTF-8 .
  • Em C # , as diretivas do compilador são chamadas de diretivas de pré-processamento. Existem várias diretivas de compilador diferentes, incluindo #pragma, que é especificamente usado para controlar avisos do compilador e somas de verificação do depurador.
  • O SQLite DBMS inclui uma diretiva PRAGMA que é usada para introduzir comandos que não são compatíveis com outro DBMS.

Linguagem de montagem

  • Na linguagem assembly , as diretivas, também chamadas de pseudo-operações ou "pseudo-ops", geralmente especificam informações como a máquina de destino, marcam separações entre seções de código, chamam macros, definem áreas de memória reservadas e assim por diante. Os montadores usam uma sintaxe específica para diferenciar pseudo-ops de mnemônicos de instrução, como prefaciar o pseudo-op com um ponto, como o pseudo-op .END , que pode direcionar o montador a parar de montar o código.

PL / SQL

Veja também

Referências

links externos