التوجيه (البرمجة)

في برمجة الحاسوب ، يُعد التوجيه أو البراغما (من كلمة "براغماتي") بنية لغوية تُحدد كيفية معالجة المُترجم (أو أي مُترجم آخر ) للمدخلات. وبحسب لغة البرمجة ، قد تكون التوجيهات جزءًا من قواعد اللغة أو لا، وقد تختلف من مُترجم لآخر. ويمكن معالجتها بواسطة مُعالج مُسبق لتحديد سلوك المُترجم، أو قد تعمل كنوع من أنواع التخصيص المُضمن.

في بعض الحالات، تحدد التوجيهات سلوكًا عامًا، بينما في حالات أخرى، تؤثر فقط على جزء محلي، مثل كتلة من التعليمات البرمجية. في بعض الحالات، كما هو الحال في بعض برامج لغة C، تكون التوجيهات تلميحات اختيارية للمترجم ويمكن تجاهلها، ولكنها عادةً ما تكون توجيهية ويجب اتباعها. مع ذلك، لا يُنفذ التوجيه أي إجراء في اللغة نفسها، بل يُغير فقط سلوك المترجم.

يمكن استخدام هذا المصطلح للإشارة إلى علامات وأوامر (أو ترميز) خاصة بأطراف ثالثة مضمنة في التعليمات البرمجية، والتي تُنتج معالجة تنفيذية إضافية تُوسّع نطاق بنية المُصرّف والمُجمّع واللغة الموجودة في بيئة التطوير. كما يُستخدم مصطلح "التوجيه" بطرق متنوعة تُشابه مصطلح "الأمر " .

معالج C المسبق

في لغتي C و C++ ، تدعم اللغة معالجًا أوليًا بسيطًا للماكرو . تُعرف أسطر المصدر التي يجب أن يعالجها المعالج الأولي، مثل ` and` و `or` ، باسم توجيهات المعالج الأولي .#define#include

تُسمى البنى النحوية المشابهة لتوجيهات المعالج المسبق في لغة C، مثل تلك الموجودة في لغة C# ، عادةً "التوجيهات"، على الرغم من أنه في هذه الحالات قد لا تكون هناك مرحلة معالجة مسبقة حقيقية.#if

تبدأ جميع أوامر المعالج المسبق، باستثناء الأمر defined(عند اتباع توجيه شرطي)، برمز التجزئة (#). وحتى إصدار C++26 ، كانت الكلمات المفتاحية exportتُعالج جزئيًا بواسطة المعالج المسبق. [ 1 ]importmodule

تاريخ

تعود التوجيهات إلى جوفيال . [ 2 ]

يحتوي COBOL على توجيه COPY.

في ALGOL 68 ، تُعرف التوجيهات باسم pragmats (من "pragmatic")، ويُشار إليها بـ pragmat أو pr ؛ في اللغات الأحدث، وخاصة C، تم اختصارها إلى "pragma" (بدون 't').

يُستخدم الأمر pragmats بشكل شائع في لغة ALGOL 68 لتحديد نظام الكتابة ، أي "كيفية الإشارة إلى الكلمات المفتاحية". وتتبع ذلك توجيهات مختلفة تحدد أنظمة الكتابة المختلفة: POINT، وUPPER، وRES (محجوزة)، أو علامات الاقتباس. لاحظ استخدام الكتابة للكلمة المفتاحية pragmat نفسها (المختصرة pr )، سواء في نظام الكتابة أو علامات الاقتباس.

. نقطة العلاقات العامة .PR . العلاقات العامة العليا .PR . العلاقات العامة الدقة .PR 'pr' quote 'pr' 

تُعرف التوجيهات اليوم بشكلٍ أساسي في لغة C، التي تعود إلى أوائل سبعينيات القرن الماضي، واستمر استخدامها حتى معيار C99 الحالي ، حيث تُستخدم إما كتعليمات للمعالج المسبق للغة C ، أو، في شكل #pragmaتوجيهات للمترجم نفسه. كما تُستخدم بدرجة ما في لغات برمجة أحدث؛ انظر أدناه.

لغات أخرى

  • في لغة Ada ، تسمى توجيهات المترجم بـ pragmas (اختصارًا لـ "المعلومات البراغماتية").
  • في لغة Common Lisp ، تُسمى التوجيهات "تصريحات" ، ويتم تحديدها باستخدام declareالبنية (أو أيضًا proclaim) declaim. [ 3 ] باستثناء واحد، تُعد التصريحات اختيارية، ولا تؤثر على دلالات البرنامج. الاستثناء الوحيد هو special، والذي يجب تحديده عند الاقتضاء.
  • في لغة Turbo Pascal ، تُسمى التوجيهات "تعليقات مهمة" ، لأنها تتبع نفس بنية التعليقات في قواعد اللغة . في Turbo Pascal، التعليق المهم هو تعليق يبدأ بعلامة الدولار وينتهي بحرف؛ على سبيل المثال، ما يُعادل التوجيه في لغة C هو التعليق المهم .#include "file"{$I "file"}
  • في لغة بيرل ، يمكن أيضًا استخدام الكلمة المفتاحية " "، التي تستورد الوحدات، لتحديد التوجيهات، مثل أو .useuse strict;use utf8;
  • يتم تحديد تعليمات Haskell البرمجية باستخدام صيغة تعليق متخصصة، على سبيل المثال [ 4 ]{-# INLINE foo #-} . من الممكن أيضًا استخدام معالج C المسبق في Haskell، عن طريق كتابة .{-# LANGUAGE CPP #-}
  • يستخدم PHP التوجيه declare(strict_types=1).
  • في لغة PL/I ، تبدأ التوجيهات بعلامة النسبة المئوية ( % %) وتنتهي بفاصلة منقوطة (% ;)، على سبيل المثال، , , , , , تمامًا كما هو الحال مع عبارات المعالج المسبق.%INCLUDE foo;%NOPRINT;%PAGE;%POP;%SKIP;
  • تحتوي لغة بايثون على توجيهين: الأول from __future__ import feature(المُعرَّف في PEP 236 - العودة إلى المستقبل )، والذي يُغيّر خصائص اللغة (ويستخدم صيغة استيراد الوحدات النمطية الموجودة، كما في لغة بيرل)، والثاني coding(في تعليق) لتحديد ترميز ملف شفرة المصدر (المُعرَّف في PEP 263 - تعريف ترميزات شفرة مصدر بايثون ). وقد اقتُرح بيان توجيه أكثر عمومية، ثم رُفض في PEP 244 - بيان التوجيه ؛ ويعود تاريخ هذه التوجيهات جميعها إلى عام 2001.
  • تعتمد ECMAScript أيضًا على useنفس الصيغة للتوجيهات، مع اختلاف أن pragmas يتم تعريفها كسلاسل نصية حرفية (مثل "use strict";, أو "use asm";)، بدلاً من استدعاء دالة.
  • في لغة فيجوال بيسكOption ، تُستخدم الكلمة المفتاحية " " للتوجيهات:
    • Option Explicit On|Off- عند التفعيل، يتم منع الإعلان الضمني عن المتغيرات عند الاستخدام الأول، مما يتطلب إعلانًا صريحًا مسبقًا.
    • Option Compare Binary- ينتج عن ذلك مقارنات السلاسل النصية بناءً على ترتيب فرز مستمد من التمثيلات الثنائية الداخلية للأحرف - على سبيل المثال، بالنسبة لصفحة الترميز الإنجليزية/الأوروبية (ANSI 1252) A < B < E < Z < a < b < e < z < À < Ê < Ø < à < ê < ø. يؤثر ذلك على عوامل التشغيل الداخلية (مثل =، <>، <، >)، وكتلة Select Case، ووظائف السلاسل النصية في مكتبة وقت تشغيل VB (مثل InStr).
    • Option Compare Text- ينتج عن ذلك مقارنات بين السلاسل النصية بناءً على ترتيب فرز نصي غير حساس لحالة الأحرف، تحدده لغة نظامك - على سبيل المثال، بالنسبة لصفحة الترميز الإنجليزية/الأوروبية (ANSI 1252): (A=a) < (À = à) < (B=b) < (E=e) < (Ê = ê) < (Z=z) < (Ø = ø). يؤثر ذلك على المعاملات الداخلية (مثل =، <>، <، >)، وكتلة تحديد حالة الأحرف، ووظائف السلاسل النصية في مكتبة وقت تشغيل VB (مثل InStr).
    • Option Strict On|Off- عند التفعيل، يتم منع ما يلي:
      • البرمجة بدون أنواع - حيث يتم تحديد أنواع التصريحات التي تفتقر إلى نوع صريح ضمنيًا على أنها كائن.
      • الربط المتأخر (أي الإرسال الديناميكي إلى كائنات CLR و DLR و COM) على القيم المكتوبة بشكل ثابت كـ Object.
      • التحويلات التضييقية الضمنية - تتطلب أن تكون جميع التحويلات إلى أنواع أضيق (مثل من Long إلى Integer، وObject إلى String، وControl إلى TextBox) صريحة في التعليمات البرمجية باستخدام عوامل التحويل (مثل CInt، وDirectCast، وCType).
    • Option Infer On|Off- عند تفعيل هذا الخيار، يتم تمكين المترجم من استنتاج نوع المتغيرات المحلية من قيمها الأولية.
  • في لغة روبي ، تُعرف توجيهات المفسر باسم "براغمات" ويتم تحديدها بواسطة تعليقات في بداية الملف تتبع key: valueرمزًا معينًا. على سبيل المثال، coding: UTF-8يشير الرمز إلى أن الملف مُشفّر باستخدام ترميز الأحرف UTF-8 .
  • في لغة C# ، تُسمى توجيهات المُصرّف بتوجيهات المعالجة المسبقة. لا تتعامل C# تقنيًا مع هذه التوجيهات باستخدام مُعالج مسبق، بل مباشرةً في الكود. يوجد عدد من توجيهات المُصرّف المختلفة، والتي تتوافق في معظمها مع تلك الموجودة في لغتي C وC++، بما في ذلك #pragmaالتوجيه المُستخدم تحديدًا للتحكم في تحذيرات المُصرّف ومجموع التحقق الخاص بالمُصحّح. [ 5 ] [ 6 ] كما تتضمن C# بعض التوجيهات غير المُستخدمة في C أو C++، مثل التوجيهات المُستخدمة في المُصحّح #nullable. #regionولا تسمح C# باستخدام وحدات الماكرو الشبيهة بالدوال، ولكنها تسمح باستخدام وحدات الماكرو العادية، لأغراض مثل التجميع الشرطي.
  • يتضمن نظام إدارة قواعد البيانات SQLite توجيه PRAGMA الذي يُستخدم لإدخال أوامر غير متوافقة مع أنظمة إدارة قواعد البيانات الأخرى. [ 7 ]
  • في لغة Solidity ، تُسمى توجيهات المُصرّف بـ pragmas، ويتم تحديدها باستخدام الكلمة المفتاحية `pragma`. [ 8 ]

لغة التجميع

  • في لغة التجميع ، تُحدد التوجيهات، التي تُعرف أيضًا بالعمليات الزائفة، معلوماتٍ مثل الجهاز المستهدف، وتُحدد الفواصل بين أقسام التعليمات البرمجية، وتُعرّف وتُغير متغيرات وقت التجميع، وتُعرّف وحدات الماكرو، وتُحدد التعليمات البرمجية الشرطية والمتكررة، وتُعرّف مناطق الذاكرة المحجوزة، وما إلى ذلك. تستخدم بعض مُجمّعات لغة التجميع، وليس جميعها، صيغةً مُحددةً لتمييز العمليات الزائفة عن رموز التعليمات، مثل وضع نقطة قبل العملية الزائفة، مثل العملية الزائفة `--` .END، التي قد تُوجه المُجمّع إلى التوقف عن تجميع التعليمات البرمجية.

PL/SQL

انظر أيضاً

  • #pragma once – توجيه C/C++ لمنع تضمين ملفات الرأس بشكل متكرر 

الحواشي

  1. "P1857R1 - اكتشاف تبعيات الوحدات النمطية" .
  2. "الفصل 17 - التوجيهات" (ملف PDF) . دليل برمجة الحاسوب للغة JOVIAL (J73) (ملف PDF) (تقرير فني). يونيو 1981. الصفحات 243-263 . RADC-TR-81-143 . تاريخ الاطلاع: 28 مايو 2023 . 
  3. ستيل 1990 ، الفصل 9: الإعلانات ، ص 215-237.
  4. "7.20. براغما" . وثائق GHC 7.8.3 . تم الاطلاع عليها بتاريخ 18 يوليو 2014 .
  5. dotnet-bot. "البنية المعجمية - مواصفات لغة C#" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 1 نوفمبر 2019 .
  6. بيل واغنر. "#pragma - مرجع لغة C#" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 1 نوفمبر 2019 .
  7. "عبارات براغما المدعومة بواسطة SQLite" . www.sqlite.org .
  8. "تخطيط ملف مصدر Solidity — وثائق Solidity 0.8.27" . docs.soliditylang.org . تم الاطلاع عليه بتاريخ 2024-06-03 .
  9. فويرشتاين، ستيفن ؛ بريبيل، بيل (23 يناير 2014). برمجة أوراكل PL/SQL ( الطبعة السادسة). دار نشر أورايلي ميديا ​​(نُشر عام 2014). رقم ISBN  9781449324414تم الاطلاع عليه بتاريخ 16 يونيو 2016. تحتوي لغة PL/SQL على كلمة PRAGMA الرئيسية بالصيغة التالية: PRAGMA instruction_to_compiler ; [...] توفر PL/SQL العديد من التعليمات البرمجية [...]

مراجع