Dyrektywa (programowanie)

W programowaniu komputerowym dyrektywa lub pragma (od „pragmatic”) jest konstrukcją językową , która określa, w jaki sposób kompilator ( lub inny tłumacz ) powinien przetwarzać dane wejściowe. Dyrektywy nie są [ kwestionowane ] część gramatyki języka programowania i mogą różnić się w zależności od kompilatora. Mogą być przetwarzane przez preprocesor aby określić zachowanie kompilatora lub działać jako forma parametryzacji w paśmie.

W niektórych przypadkach dyrektywy określają globalne zachowanie, podczas gdy w innych wpływają tylko na sekcję lokalną, taką jak blok kodu programowania. W niektórych przypadkach, takich jak niektóre programy C, dyrektywy są opcjonalnymi wskazówkami kompilatora i można je zignorować, ale zwykle mają charakter nakazowy i należy ich przestrzegać. Jednak dyrektywa nie wykonuje żadnej akcji w samym języku, a jedynie zmianę zachowania kompilatora.

Termin ten może odnosić się do zastrzeżonych znaczników i poleceń (lub znaczników) stron trzecich osadzonych w kodzie, które skutkują dodatkowym przetwarzaniem wykonywalnym, rozszerzającym istniejący kompilator, asembler i konstrukcje językowe obecne w środowisku programistycznym. Termin „dyrektywa” jest również stosowany na różne sposoby, które są podobne do terminu „ polecenie” .

Preprocesor C

W językach C i C++ język obsługuje prosty preprocesor makr . Wiersze źródłowe, które powinny być obsługiwane przez preprocesor, takie jak #define i #include , nazywane są dyrektywami preprocesora .

Inna konstrukcja C, dyrektywa #pragma , służy do instruowania kompilatora, aby używał funkcji pragmatycznych lub zależnych od implementacji. Dwoma godnymi uwagi użytkownikami tej dyrektywy są OpenMP i OpenACC .

Konstrukcje składniowe podobne do dyrektyw preprocesora C, takie jak C# #if , są również zwykle nazywane „dyrektywami”, chociaż w takich przypadkach może nie być żadnej rzeczywistej fazy przetwarzania wstępnego.

Wszystkie polecenia preprocesora zaczynają się od znaku krzyżyka (#).

Historia

Dyrektywy pochodzą z ALGOL 68 , gdzie są znane jako pragmaty (od „pragmatyczny”) i oznaczane jako pragmat lub pr ; w nowszych językach, zwłaszcza C, zostało to skrócone do „pragma” (bez „t”).

Powszechnym zastosowaniem pragmatów w ALGOL 68 jest określanie reżimu stropowania , co oznacza „sposób wskazywania słów kluczowych”. Następują różne takie dyrektywy, określające systemy POINT, UPPER, RES (zarezerwowane) lub kwotowania. Zwróć uwagę na użycie stropowania dla pragmat (w skrócie pr ), albo w systemach POINT, albo cudzysłowach:

.PR PUNKT .PR .PR UPPER .PR .PR RES .PR 'pr' cytat 'pr'

Obecnie dyrektywy są najlepiej znane w języku C, pochodzącym z wczesnych lat 70. i były kontynuowane w obecnym standardzie C99 , gdzie są albo instrukcjami dla preprocesora C , albo w formie #pragma dyrektywami dla samego kompilatora. Są również używane do pewnego stopnia w bardziej nowoczesnych językach; patrz poniżej.

Inne języki

  • W Adzie dyrektywy kompilatora nazywane są pragmas (skrót od „informacje pragmatyczne”).
  • W Common Lisp dyrektywy nazywane są deklaracjami i są określane za pomocą konstrukcji deklarowania (również proklamuj lub deklamuj ). Z jednym wyjątkiem deklaracje są opcjonalne i nie wpływają na semantykę programu. Jedynym wyjątkiem jest special , który musi być określony w stosownych przypadkach.
  • W Turbo Pascalu dyrektywy nazywane są znaczącymi komentarzami , ponieważ w gramatyce języka mają taką samą składnię jak komentarze . W Turbo Pascalu znaczącym komentarzem jest komentarz, którego pierwszym znakiem jest znak dolara , a drugim znakiem jest litera; na przykład odpowiednikiem dyrektywy C #include "file" jest znaczący komentarz {$I "file"} .
  • W Perlu słowo kluczowe use ”, które importuje moduły, może być również używane do określania dyrektyw, takich jak use strict; lub użyj utf8; .
  • Haskella są określane przy użyciu specjalistycznej składni komentarzy, np. {-# INLINE foo #-} .
  • Python ma dwie dyrektywy – from __future__ import feature (zdefiniowana w PEP 236 -- Back to the __future__ ), która zmienia funkcje języka (i wykorzystuje istniejącą składnię importu modułu, jak w Perlu) oraz dyrektywę coding (w komentarzu) do określić kodowanie pliku kodu źródłowego (zdefiniowane w PEP 263 — Defining Python Source Code Encodings ). Bardziej ogólna dyrektywa została zaproponowana i odrzucona w PEP 244 – The `directive' statement ; wszystkie pochodzą z 2001 roku.
  • ECMAScript przyjmuje również składnię use dla dyrektyw, z tą różnicą, że pragma są deklarowane jako literały łańcuchowe (np. "use strict"; lub "use asm"; ), a nie jako wywołanie funkcji.
  • W języku Visual Basic słowo kluczowe „ Option ” jest używane dla dyrektyw:
    • Option Explicit On|Off — Gdy opcja jest włączona, uniemożliwia niejawną deklarację zmiennych przy pierwszym użyciu, wymagając wcześniejszej jawnej deklaracji.
    • Option Compare Binary — wyniki w porównaniu ciągów znaków w oparciu o kolejność sortowania wynikającą z wewnętrznych binarnych reprezentacji znaków — np. dla angielskiej/europejskiej strony kodowej (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ę < Ř < à < ê < ø. Wpływa na operatory wewnętrzne (np. =, <>, <, >), blok Select Case i funkcje łańcuchowe biblioteki uruchomieniowej VB (np. InStr).
    • Option Compare Text — wyniki w porównaniu ciągów w oparciu o porządek sortowania tekstu bez uwzględniania wielkości liter, określony przez ustawienia regionalne systemu — np. dla angielskiej/europejskiej strony kodowej (ANSI 1252) (A=a) < (À = à) < (B= b) < (E=e) < (Ę = ê) < (Z=z) < (Ø = ø). Wpływa na operatory wewnętrzne (np. =, <>, <, >), blok Select Case i funkcje łańcuchowe biblioteki uruchomieniowej VB (np. InStr).
    • Opcja Strict Wł.|Wył. — gdy jest włączona, uniemożliwia:
      • programowanie bez typów - gdzie deklaracje, które nie mają jawnego typu, są domyślnie wpisywane jako Object.
      • późne wiązanie (tj. dynamiczna wysyłka do obiektów CLR, DLR i COM) na wartościach wpisywanych statycznie jako Object.
      • niejawne konwersje zawężające - wymaganie, aby wszystkie konwersje do węższych typów (np. z Long na Integer, Object na String, Control na TextBox) były jawne w kodzie przy użyciu operatorów konwersji (np. CInt, DirectCast, CType).
    • Option Infer On|Off — włączenie umożliwia kompilatorowi wnioskowanie o typie zmiennych lokalnych na podstawie ich inicjatorów.
  • W języku Ruby dyrektywy interpretera są określane jako pragmy i są określane przez komentarze na górze pliku, które następują po notacji klucza: wartość . Na przykład kodowanie: UTF-8 wskazuje, że plik jest zakodowany przy użyciu kodowania znaków UTF-8 .
  • W języku C# dyrektywy kompilatora nazywane są dyrektywami przetwarzania wstępnego. Istnieje wiele różnych dyrektyw kompilatora, w tym #pragma, która jest specjalnie używana do kontrolowania ostrzeżeń kompilatora i sum kontrolnych debugera.
  • SQLite DBMS zawiera dyrektywę PRAGMA, która służy do wprowadzania poleceń, które nie są kompatybilne z innymi DBMS .
  • W Solidity dyrektywy kompilatora nazywane są pragmas.

język programowania

  • W języku asemblera dyrektywy, określane również jako pseudooperacje lub „pseudooperacje”, generalnie określają takie informacje, jak maszyna docelowa, zaznaczają separacje między sekcjami kodu, definiują i zmieniają zmienne czasu asemblera, definiują makra, wyznaczają warunkowe i powtarzane kodu, zdefiniuj zarezerwowane obszary pamięci i tak dalej. Niektóre asemblery, ale nie wszystkie, używają określonej składni do odróżnienia pseudooperacji od mnemoników instrukcji, na przykład poprzedzając pseudoopcję kropką, taką jak pseudo-op .END , która może nakazać asemblerowi zatrzymanie asemblowania kodu .

PL/SQL

Zobacz też

przypisy

Linki zewnętrzne