hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
مؤشر (برمجة) مؤشر Null
نظراً لعدم إشارة مؤشر null إلى أي كائن ذات معنى، فإن محاولة تتبع مؤشر null عادة ما يتسبب في ظهور خطأ بالتشغيل. إذا لم يتم التعامل مع هذا الخطأ فإن البرنامج يتوقف عن العمل على الفورً. في حالة لغة C على كمبيوتر عام، يتوقف التنفيذ من خطأ التجزئة segmentation fault لأن عنوان null الحرفي لا يقسم أبداً لبرنامج قيد التشغيل (يُمكن حدوث العديد من الأشياء مع برنامج لغة C في الأنظمة المدمجة embedded system). في لغة Java يشغل الولوج إلى مرجع null NullPointerException التي يُمكن الحصول عليها من خلال كود معالجة الخطأ، ولكن التطبيق المفضل هو التأكد من عدم حدوث هذه الاستثناءات مطلقاً. في اللغات الآمنة يمكن استبدال مؤشر null المحتمل بوحدات مرتبطة tagged union التي تفرض معالجة واضحة للحالة الاستثنائية؛ في الحقيقة يمكن رؤية مؤشر null على أنه مؤشر tagged pointer بإضافة محسوبة. توفر اللغات الأخرى، مثل لغة Objective-C، عملية إرسال الرسائل إلى عنوان nil (قيمة المؤشر الذي لا يشير إلى كائن صالح) دون التسبب في توقف البرنامج عن العمل؛ وسيتم تجاهل الرسالة ببساطة والقيمة المعادة (إذا وجدت) تكون صفر أو 0، اعتماداً على النوع.
مؤشر (برمجة) مؤشر Null
يُضمن في برمجة لغة C ولغة C++، المقارنة العادلة بين مؤشرين null؛ تضمن لغة ANSI C أن أي مؤشر null يساوي 0 في مقارنة مع نوع العدد الصحيح؛ علاوة على ذلك يُعرَّف macro NULL على أنه مؤشر null ثابت، قيمته 0 (إما كأحد أنواع الأعداد الصحيح أو المحولة إلى مؤشر لـ void)، لذا سيقارن مؤشر null بالتساوي مع NULL.
وينبغي عدم الخلط بين مؤشر null والمؤشر الغير مهيأ: يُسمح لمؤشر null لمقارنة الغير متكافئ مع أي مؤشر صالح، بينما وفقاً للغة وتنفيذ المؤشر غير المهيأ قد تكون إما قيمة غير محددة (عشوائية أو قيمة بلا معنى) أو يمكن تهيئتها لثابت أولي (محتملة لكن ليس بالضرورة NULL).
تُعيد دالة malloc مؤشر null في معظم بيئات برمجة لغة السي C إذا لم يكن قادراً على تخصيص منطقة الذاكرة المطلوبة، والتي تنبه المتصل بعدم وجود ذاكرة كافية. بالرغم من ذلك بعض تطبيقات malloc(0) مع إعادة مؤشر null وبدلا من ذلك تحدد الفشل عن طريق إعادة مؤشر null وإدخال errno إلى قيمة مناسبة.
تقوم أنظمة الحاسب الآلي على tagged architecture القادرة على التفريق في الأجهزة بين تتبع Null والمحاولة المشروعة للولوج إلى كلمة أو بناء على العنوان صفر.
في بعض بيئات لغة البرمجة (على الأقل تطبيق Lisp على سبيل المثال) القيمة المستخدمة على مؤشر null (يطلق عليها اسم nil في Lisp) ربما يكون مؤشر لقالب من البيانات الداخلية المفيدة للتطبيق (لكن لا يمكن الوصول إليها بشكل جلي من خلال برامج المستخدم)، لذا يُفيد السماح باستخدام نفس العدد الصحيح كثابت وكذلك الطريقة السريعة للولوج إلى تطبيقات التنفيذ. يُعرف هذا بأنه ناقل nil.
مؤشر (برمجة) مؤشر Autorelative
مؤشر autorelative (أو self-relative) هو المؤشر الذي تُفسر قيمته كإزاحة من عنوان المؤشر نفسه؛ لذا، إذا كان هيكل البيانات M له مؤشر autorelative فالكائن p الذي يُشير إلى جزء من M نفسه فإن M ربما يعيد تخصيصها في الذاكرة من دون الحاجة إلى تحديث قيمة p.
مؤشر (برمجة) مؤشر الارتكاز Based
مؤشر الارتكاز هو المؤشر الذي قيمته عبارة عن إزاحة من قيمة مؤشر آخر. يمكن استخدامه لتخزين وتحميل كتل من البيانات، محددة عنوان بداية الكتلة إلى مؤشر الارتكاز.
مؤشر (برمجة) المراوغة المزدوجة
في بعض اللغات يمكن أن يشير المؤشر إلى مؤشر آخر، يتطلب عمليتان للتتبع للوصول للقيمة الأصلية. بينما كل مستوى من المراوغة ربما يضيف تكلفة أداء، وأحياناً ضرورية لتقديم سلوك صحيح لهياكل البيانات المعقدة. على سبيل المثال، في لغة C تُعرَّف القائمة المرتبطة من حيث الكائن الذي يحتوي مؤشر للكائن التالي في القائمة:
يستخدم هذا التطبيق مؤشر للكائن الأول في القائمة كبديل للقائمة ككل. إذا أضيفت قيمة جديدة إلى بداية القائمة يجب تغيير المقدمة للإشارة إلى الكائن الجديد. بما أن براهين C تمرر عادة بالقيمة، يتيح استخدام المراوغة المزدوجة بتنفيذ الإدخال بصورة صحيحة، وبه الآثار الجانبية المرغوبة للقضاء على كود الحالة الخاصة للتعامل مع المدخل في أول القائمة:
في هذه الحالة، إذا كانت قيمة البند أقل من head فإن مقدمة المتصل تُحدَّث بشكل صحيح في عنوان البند الجديد.
مؤشر (برمجة) المؤشرات البدائية
المؤشرات البدائية هي المؤشرات التي لم يتم تهيأتها بعد (لا يوجد عنوان محدد للمؤشر البدائي) ربما تتسبب مثل هذه المؤشرات في تعطيل البرنامج أو العمل بطريقة بدائية. تُشير المؤشرات التي لم يتم تهيأتها في لغات برمجة Pascal أو لغة السي C إلى عناوين غير متوقعة في الذاكرة.
هنا، ربما تشير p2 إلى أي مكان في الذاكرة، لذا أداء المهمة *p2 = ‘b’ سيفسد منطقة غير معروفة من الذاكرة التي ربما تحتوي على بيانات حساسة.
مؤشر (برمجة) الشعبة البدائية
حيث يستخدم المؤشر كعنوان لنقطة الدخول لبرنامج أو بداية لروتين كما أنه يكون إما غير مهيأ أو فاسد، إذا تم الاتصال أو القفز مع ذلك إلى هذا العنوان، فيقال أنه تفسد «الشعبة البدائية». والعواقب دائماً غير متوقعة وربما يظهر الخطأ نفسه بعدة طرق مختلفة اعتماداً على إذا كان المؤشر عنوان صالح أم لا وإذا كان هناك (من قبيل الصدفة) إرشاد صالح (شفرة تشغيل) على هذا العنوان. يمكن أن يوضح اكتشاف الشعبة البدائية أحد أصعب عمليات التصحيح وأكثرها إحباطاً حيث أنه ربما تم بالفعل تدمير كثير من الأدلة من قبل أو عن طريق تنفيذ واحد أو أكثر من التعليمات الغير مناسبة في موقع الشعبة. في حالة ما إذا كان متاحاً، يمكن ألا تكون محاكاة مجموعة التعليمات عادة تضبط فقط الشعبة البدائية قبل دخولها حيز التنفيذ، لكن تقدم أيضاً تتبع كامل أو جزئي لتاريخها.
مؤشر (برمجة) المحاكاة باستخدام فهرس المصفوفة
من الممكن محاكاة سلوك المؤشر باستخدام فهرس المصفوفة (عادة بعد واحد).
بدايةً للغات التي لا تدعم المؤشرات بوضوح ولكن تدعم المصفوفات، يمكن اعتبار المصفوفة ومعالجتها كما لو كانت نطاق الذاكرة بالكامل (في نطاق مصفوفة محددة) وأي فهرس يمكن اعتباره مكافئ لسجل الغرض العام في لغة التجميع (يشير هذا إلى البايت الفردي ولكن التي تناسب قيمته الفعلية لبداية المصفوفة، ليس عنوانه المطلق في الذاكرة). على افتراض أن المصفوفة هي هيكل بيانات 16 ميجا بايت مترابط، وحدات البايت الفردي (أو سلسلة من وحدات البايت المرتبطة في المصفوفة) يمكن عنونتها مباشرة ومعالجتها باستخدام اسم المصفوفة مع العدد الصحيح 31 بايت الغير موقع كمؤشر المحاكاة (يماثل هذا أمثلة مصفوفات اللغة C الموضحة سابقاً). يمكن محاكاة المؤشر الحسابي بالإضافة أو الطرح من الفهرس، مع الحد الأدنى من الإضافات العامة التي تُقارن بالمؤشر الحسابي الحقيقي.
مؤشر (برمجة) المحاكاة باستخدام فهرس المصفوفة
حتى انه من الممكن نظرياً، استخدام التقنية السابقة مع جهاز المحاكاة مجموعة الإرشادات لمحاكاة أي كود آلة أو الوسطية (كود البايت) لأي معالج/ لغة في لغة أخرى التي لا تدعم المؤشرات مطلقاً (على سبيل المثال، لغة Java / لغة JavaScript). لتحقيق هذا، يمكن تحميل الشفرة الثنائية بدايةً إلى وحدات بايت مرتبطة من المصفوفة لمحاكاة «القراءة»، التفسير والعمل كلياً مع الذاكرة المحتوية على نفس المصفوفة. إذا كان ضرورياً، لتجنب مشاكل تجاوز سعة المخزن كليةً يمكن للتدقيق الفائق العمل للمجمع (أو إذا لم يكن، كتابة الكود في جهاز المحاكاة)
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
Ada هي لغة كتابة قوية حيث أن جميع المؤشرات تكتب ويسمح فقط بالمحادثة المكتوبة الآمنة. تهيأ جميع المؤشرات افتراضياً إلى null، وأي محاولة للولوج إلى البيانات عن طريق مؤشر null يسبب ظهور استثناء. تسمى المؤشرات في لغة Ada بأنماط الولوج. لا تسمح لغة Ada 83 بالحسابات على أنماط الولوج (على الرغم من أن العديد من الموردين المقدمين لها كميزة غير معيارية)، لكن لغة Ada 95 تُدعم الحسابات «الآمنة» على أنماط الولوج عبر حزمة System.Storage_Elements.
لا تدعم لغة Basic المؤشرات بصورة عامة. اللهجات الحديثة في لغة Basic، مثل FreeBASIC أو BlitzMax لديها تطبيق شامل للمؤشر.
في FreeBASIC، تُعامل حسابات مؤشرات ANY (تعادل void* في لغة C) كما لو كان مؤشرANY نطاقه 1 بايت. لا يمكن تتبع مؤشرات ANY، كما في لغة C. أيضاً، الإلقاء بين ANY وأي مؤشر من نوع آخر من المؤشرات لن يسبب أي مخاطر.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
المؤشرات في لغة C ولغة C++ هي المتغيرات التي تخزن العناوين ويمكن أن تكون null. يسير كل مؤشر إلى نوع خاص به، ولكن يمكن للفرد التنقل بحرية بين أنواع المؤشرات، على الرغم من أن السلوك هو تطبيق معروف. يسمح نوع خاص من المؤشرات يطلق عليه «مؤشر void» بالإشارة إلى أي نوع من المتغيرات، ولكن تحده حقيقة أنه لا يمكن تتبعه مباشرةً. غالباً يمكن معالجة العنوان نفسه مباشرة بإلقاء مؤشر من وإلى نوع متكامل بحجم مناسب، على الرغم من أن النتائج هي تطبيقات معروفة ويمكن أن تتسبب في سلوكيات غير معروفة؛ بينما لا يوجد لدى معايير لغة C السابقة نوع متكامل الذي ضُمن أن يكون كبير بدرجة كافية، لغة C99 تحدد اسم uintptr_t typedef المعرَّفة في <stdint.h>، لكن لا يحتاج التطبيق لتوافرها.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
تدعم لغة ++C بالكامل مؤشرات لغة السيC وتحويل نوع المتغير typecasting لغة C. كما تدعم مجموعة جديدة من مشغلات التحويل نوع المتغير typecasting للمساعدة في التقاط بعض الاشكال الخطيرة في الوقت الواحد. كما تقدم المكتبة المعيارية للغة C++ auto ptr نوع من المؤشرات الذكية الذي يمكن استخدامه في بعض المواقف كبديل آمن للمؤشرات الأولية في لغة C. كما تدعم لغة C++ شكل آخر من المرجع، مختلف عن المؤشر يطلق عليه ببساطة المرجع أو نمط المرجع.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
المؤشر الحسابي هو القدرة على تعديل عنوان المؤشر المستهدف بعمليات حسابية (وكذلك مقارنات الحجم) ويقتصر على معايير اللغة للبقاء ضمن حدود كائن المصفوفة الواحدة (أو فقط بعد ذلك)، على الرغم من أن العديد من الهياكل المتكاملة ستسمح بالمزيد من التساهلات الحسابية. الإضافة أو الطرح من مؤشر يحركه بمضاعفات الحجم من نوع البيانات التي تشير إليها. على سبيل المثال، إضافة 1 إلى مؤشر قيمته 4 بايت سيزيد المؤشر بمقدار 4. وهذا له تأثير في زيادة المؤشر للإشارة إلى الكائن التالي في المصفوفة المرتبطة من الأعداد الصحية- غالباً ما تكون هذه هي النتيجة المطلوبة. لا يمكن للمؤشر الحسابي الأداء على مؤشر void لأن نوع void ليس له حجم، وبالتالي لا يمكن إضافة العنوان المشار إليه، عل الرغم من أن gcc وغيرها من المجمعات ستؤدي حسابات البايت على void* كامتداد غير معياري. للعمل مباشرةً مع وحدات البايت يلقوا عادةً المؤشرات إلى BYTE*، أو char* غير الموقعة إذا لم تُعرَّف BYTE في المكتبة المعيارية المستخدمة.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
يقدم المؤشر الحسابي للمبرمج طريقة واحدة للتعامل مع مختلف الأنواع: إضافة وطرح رقم الكائن المطلوب بدلاً من الإزاحة الفعلية بوحدات البايت. (مع ذلك مؤشر char، يُعرف char بأنه الحصول دائما على حجم بقيمة 1 بايت، يسمح بإزاحة الكائن من المؤشر الحسابي إلى الممارسة ليتساوى مع إزاحة البايت الواحد) على وجه الخصوص، يوضح تعريف لغة Cصراحةً أن الصيغة a[n] حيث أن n-th كائن في المصفوفة a، تكافئ *(a+n) وهو محتوى الكائن المشار إليه بواسطة a+n. يعني هذا أن n[a] يتساوى مع n[a] ويمكن كتابة مثلاً a[3] أو [a]3 سيلج كلاهما إلى الكائن الرابع من المصفوفة A.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
بينما يمكن للمؤشر الحسابي أن يكون مصدر bugs الحاسب الآلي. فإنه يميل إلى إرباك المبرمجين المبتدئين، مما يضطرهم إلى سياقات مختلفة: يمكن أن يكون تعبير حسابي عادي أو أن يكون تعبير مؤشر حسابي، وأحياناً من السهل عمل خطأ في أحدهما للآخر. واستجابة لهذا، العديد من لغات الحاسب الآلي الحديثة المتقدمة (على سبيل المثال Java) لا تسمح بالولوج المباشر إلى الذاكرة باستخدام العنوان. كذلك، تتناول لهجة لغة C الآمنة Cyclone العديد من الموضوعات المتعلقة بالمؤشرات. راجع لغة البرمجة C للمزيد من الانتقادات.
مؤشر void أو void* يُدعمه ANSI لغة C ولغة C++ كنوع مؤشر عام. مؤشر void يمكنه تخزين عنوان لأي نوع بيانات وفي لغة C يتحول ضمنياً إلى أي نوع آخر من المؤشرات أثناء المهمة، ويجب أن يلقى صراحة إذا كان تتبع المؤشر ضمني. K&R تستخدم لغة C char* لغرض «المؤشر agnostic» (قبل ANSI C).
لا تسمح لغة C++ بالتحويل الضمني لـ void* إلى نوع آخر من المؤشرات، حتى أثناء المهمات. كان هذا قرار في التصميم لتجنب الإهمال وحتى الاشكال غير المرغوبة، مع ذلك معظم المجمعين يستخرجون التحذيرات فقط وليس الأخطاء عند مواجهة إلقاءات أخرى سيئة.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
في لغة C++، لا يوجد void& (مرجع لـ void) لاستكمال void*، لأن المراجع تتصرف مثل الأسماء المستعارة للمتغيرات التي تشير إليها، ولا يمكن وجود متغير من نوع void.
في لغة برمجة C#، تُدعم للمؤشرات تحت شروط معينة: أي كتلة من الكود المتضمنة المؤشرات لابد من الإشارة عليها بعلامة غير آمن. تتطلب مثل هذه الكتل أذونا أمان أعلى من المسموح بها لتشغيلها. الصيغة هي نفسها الموجودة في لغة C++ والعنوان المشار إليه يمكن أن يكون إما ذاكرة متحكم بها أو غير متحكم بها. مع ذلك، مؤشرات الذاكرة المتحكم بها (أي مؤشر لكائن متحكم به) يجب الإعلان عنها باستخدام كلمة أساسية ثابتة، والتي تمنع garbage collector من تحريك الكائن المشار إليه كجزء من التحكم بالذاكرة بينما يكون المؤشر في النطاق وهذا يحافظ على صلاحية العنوان.
استثناء هذا من استخدام بنية IntPtr وهو تحكم آمن يتساوى مع int* ولا يتطلب كود عدم الأمان. يستعاد هذا النوع غالباً عند استخدام طرق من النظام. Runtime.InteropServices على سبيل المثال:
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
لغة البرمجة COBOL تدعم المؤشرات إلى المتغيرات. عناصر البيانات الولية أو المجمعة (المسجلة) والمعلنة في LINKAGE SECTION من البرنامج التي تقوم طبيعياً على المؤشر مع وجود مساحة لعنوان كائن البيانات (عادة ما تكون كلمة واحدة للذاكرة) مخصصة مثل بند البيانات الحقيقي (ضمني خفي). في كود مصدر البرنامج، تستخدم هذه المتغيرات مثل أي متغير تخزيني آخر لكن محتوياتهم يولج إليها ضمنيا بطرقة غير مباشرة من خلال مؤشراتهم.
مساحة الذاكرة لكل كائن بيانات مشار إليه يقسم ديناميكياً عادةً باستخدام بيانات الاتصال الخارجي أو عن طريق بناء اللغة الموسع المتكامل مثل بيانات EXEC CICS أو EXEC CICS.
كما تقدم الإصدارات الممتدة من COBOL متغيرات المؤشر المعلن عنه في شروط استخدام المؤشر. فيم مثل هذه المؤشرات تحددت وعدلت باستخدام بيانات SET و SET ADDRESS.
كما تقدم بعض الإصدارات الممتدة من لغة COBOL متغيرات PROCEDURE-POINTER القادرة على تخزين عنوان الكود القابل للتنفيذ.
لغة البرمجة D مشتقة من لغة C ولغة C++ وهي تؤيد مؤشرات C وتحويل نوع المتغير typecasting C تأييداً كاملاً.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
تدعم اللغة الوجهة Eiffel المؤشرات في شكل المراجع، التي تكتب ولا تسمح بأي شكل من أشكال المؤشر الحسابي. معيار ECMA من لغة Eiffel يتضمن آلية «النوع المرفق» التي تدَّعي ضمان سلامة void.
توضح لغة Fortran-90 قدرة المؤشر الكتابي القوية. تحتوي مؤشرات Fortran على أكثر من مجرد عنوان ذاكرة بسيط. كما تنطوي على الحدود العليا والدنيا من أبعاد المصفوفة، الخطوات (على سبيل المثال لدعم أقسام المصفوفة التعسفية)، وغيرها من البيانات الوصفية. المشغل المنتسب، => يستخدم لينسب المؤشر إلى متغير له صفة الهدف. بيانات تخصيص لغة Fortran-90 يمكن استخدامها أيضا لنسب المؤشر إلى كتلة من الذاكرة. على سبيل المثال، يمكن استخدام الكود التالي لتعريف وتكوين هيكل قائمة مرتبطة:
تضيف لغة Fortran-2003 دعم للمؤشرات الإجرائية. كذلك، كجزء من ميزة التشغيل المتداخل في لغة C تدعم لغة Fortran-2003 الوظائف الجوهرية لتحويل أنواع مؤشرات C إلى مؤشرات Fortran وإعادتها.
مؤشر (برمجة) الدعم في العديد من لغات البرمجة
تحتوي لغة Go على مؤشرات. تتماثل صيغتها المعلنة مع مؤشرات لغة C، ولكن تكتب بالعكس، منتهية بالنوع. على عكس لغة C، لدى Go garbage collection ولا تسمح بالمؤشر الحسابي. لا يمكن تعريف أنواع المرجع مثل لغة C++ لكن يتم تمرير بعض الأنواع الضمنية عن طريق المرجع؛ يجب أن تتكون تلك بجعل الكلمة الأساسية بدلاً من الجديدة. كطريقة مختلفة (عن أنواع المرجع) لتوحيد الصيغة بين المؤشر وغير المؤشر، انخفض مشغل السهم (->)والمجمع يعرف فقط أن المبرمج يعني تتبع المؤشر باستخدام مشغل النقطة (.) (بينما على لغة C ولغة C++ سيكون هذا خطأ كامل).
يتم تطبيق المؤشرات كثيرا كما في Pascal، كذلك باراميترات VAR في الإجراءات يطلق عليها Modula-2 وهي أقوى كتابياً من Pascal، مع عدد قليل من الطرق للهروب من نظام الكتابة. بعض المتغيرات في لغة Modula-2 (مثل Modula-3) تحتوي على garbage collection.
كثيراً ما تتوافر المؤشرات مع Modula-2. ما زال هناك القليل من الطرق للتهرب من النظام الكتابي وبذلك تكون لغة Oberon ومتغيراتها ما زالت آمنه فيما يتعلق بالمؤشرات أكثر من لغة Modula-2 ومتغيراتها. كما في Modula-3 تمثل garbage collection جزء من مواصفات اللغة.
على النقيض من العديد من اللغات التي تميز المؤشرات فإن معيار ISO Pascal يسمح فقط للمؤشرات بالإشارة إلى المؤشرات المكتوبة ديناميكياً والغير معروفة ولا يسمح لهم بالإشارة إلى المعيار الثابت أو المتغيرات المحلية. لا يوجد بها مؤشر حسابي. يجب أن تحتوي المؤشرات أيضاً على نوع مترابط والمؤشر من نوع ما لا يتفق مع المؤشر من نوع آخر (مثل مؤشر char لا يتفق مع مؤشر العدد الصحيح). يساعد هذا على القضاء على القضايا الأمنية المتأصلة تطبيقات المؤشر الآخر، تستخدم هذه خاصة للغة PL/I أو للغة C. كما أنها تزيل بعض المخاطر التي يسببها المؤشر المتدلي، ولكن القدرة على السماح الديناميكي للمساحة المتبعة باستخدام عملية معيار التصرف (الذي له نفس تأثير مثل وظيفة المكتبة الحرة الموجودة في اللغة C) مما يعني أن خطورة مؤشرات التدلي لم يتم القضاء عليها كلياً.
مع ذلك في بعض المصادر التجارية والمفتوحة للغة Pascal (أو مشتقاتها) يسمح بتطبيقات مثل Free Pascal أو Turbo Pascal أو Object Pascal في Embarcadero Delphi – يسمح للمؤشر بالإشارة إلى المعيار الثابت أو المتغيرات المحلية ويمكن الإلقاء من نوع من المؤشرات إلى آخر. علاوة على ذلك، المؤشر الحسابي غير مقيد: الإضافة أو الطرح من المؤشر يحركه بمقدار هذا الرقم من وحدات البايت في كلا الاتجاهين، لكن استخدام إجراءات معيار Inc أو dec معه يحرك المؤشر بحجم نوع البيانات المصرح للإشارة إليه.
تدعم لغة برمجة Perl المؤشرات، على الرغم من ندرة استخدامها، في شكل وظائف من الحزم والتفريغ. تهدف هذه للتفاعلات البسيطة فقط مع مكتبات OS المجمعة. في جميع الحالات الأخرى، تستخدم لغة Perl المراجع المكتوبة والتي لا تسمح بوجود أي شكل من أشكال المؤشر الحسابي. فهي تستخدم لبناء تراكيب البيانات المعقدة.
آر بي جي (لغة برمجة)
آر بي جي RPG  هي لغة برمجة عالية المستوى للتطبيقات الخاصة بالأعمال. الأحرف الأولى التي تصف اسم البرنامج ترمز إلى المعنى «مولد برنامج التقرير». وشركة IBM هي صانعة البرنامج والبائع الرئيسي له، ولكن اللغة متاحة أيضا من مصنعي أجهزة كمبيوتر رئيسية أخرى وأجهزة الكمبيوتر الضخمة ومنهم يونيسيس Unisys. النسخة الأخيرة من آر بي جي هي آر بي جي 4 RPG IV (وتعرف ب ILE RPG) وهي على خوادم باور آي الخاصة بIBM، وهي ترث النظام آي من سمات بيئة اللغة المتكاملة مثل وظائف النماذج الأصلية وإجراءاتها والروابط الديناميكية والثابتة والوصول إلى مكتبات لغة سي الروتينية، ومكاتب الرابط الديناميكي والشفرة الوحدوية المتكررة أو المعاد إدخالها.
آر بي جي (لغة برمجة) نظرة عامة
تعرف لغة آر بي جي (التي تعرف أيضا باسم آر بي جي فور وRPGLE) بأنها لغة برمجة مألوفة لمنصة IBM Power i. وقد صنعت خصيصا كأداة لكتابة التقارير لIBM401 في بداية الستينات، وقد تطورت آر بي جي منذ هذا الوقت إلى لغة HLL مكافئة هي كوبول وبي إل آي
يبدأ برنامج آر بي جي بخصائص الملف، وعمل قائمة بكل الملفات ليتم كتابتها أو قراءتها من أو تحديثها، يلي ذلك مواصفات التعرف على البيانات والتي تتضمن عناصر البرنامج مثل هياكل البيانات ومصفوفة ذات الأبعاد كما لو كانت قسم «تخزين العمل» من برنامج كوبول أو بيانات فار في برنامج باسكال. يتبع ذلك مواصفات حسابية تحتوي على أصل الشفرة الفعلي. يمكن ا، يتبع ذلك مواصفات النواتج التي يمكن استخدامها لتحديد نموذج الملفات أو التقارير الأخرى. عبر الملفات البديلة، يمكن لبعض التقارير وهياكل البيانات أن يتم تحديدها خارجيا، وتقريبا عبر إزالة الحاجة لتسليم مواصفات مدخل الشفرة وناتجها.
آر بي جي (لغة برمجة) نظرة عامة
في الأيام الأولى من آر بي جي، كانت تعرف نقطة قوتها الحقيقية بدورة البرنامج: يقوم كل برنامج آر بي جي بالعمل عبر حلقة ضمنية يمكن من خلالها تطبيق البرنامج على كل سجل من سجلات الملف. في هذا الوقت، يمكن مقارنة كل سجل (بطاقة مثقوبة فردية) مع كل سطر في البرنامج والذي سيقوم بالعمل على السجل أو لا وذلك اعتمادا على ما إذا كان هذا السطر ذو «مؤشر» يكون «عاملا» أو «غير فعالا» – من بين مجموعة من المتغيرات المنطقية مرقمة بالأعداد من 01-99 لأغراض يحددها المستخدم، أو مجموعات أخرى أصغر وذلك اعتمادا على التدوين، المجال أو وظائف معالجة التقارير.
وبديلا لذلك فإن الشفرة يمكن أن تجعل أي برنامج تفاعلي مستمر في العمل حتى يتوقف بوضوح.
واليوم يتجنب معظم مبرمجي آر بي جي استخدام هذه الدورة لصالح التحكم في فيض تدفق البرنامج بهياكل حلقية قياسية. إن مفهوم انكسارات المستوى وسجلات التطابق فريد بالنسبة للغة آر بي جي تو. وقد تطور في البداية مع قارئات بطاقات في الذهن. أما آر بي جي ثري فيضيف بعض المقومات الشيقة ولكن لغة آر بي جي الأصلية يصعب هزيمتها على افتراض أن المطور يمتلك كافة المقومات والسمات المتاحة.
آر بي جي (لغة برمجة) التاريخ
تعد لغة آر بي جي واحدة من اللغات التي صنعت من أجل آلات ثقب البطاقات التي لا تزال شائعة الاستخدام في يومنا الحالي وهذا لأن اللغة قد تطورت بصورة ملحوظة مع مرور الوقت. وقد طورتها شركة IBM عام 1959. وق كان مسمى «مولد برنامج التقرير» مسمى وصفي لغرض اللغة: وهو توليد تقارير من ملفات البيانات بما في ذلك تقارير السجلات والتقارير الإجمالية الفرعية.
وقد كانت لغة فارجو (fourteen o-one Automatic Report Generation Operation أو عملية توليد التقارير 1401 الأوتوماتيكية) هي اللغة السابقة لآر بي جي في IBM 1401. وقد استهدفت كلا اللغتين تسهيل الانتقال إلى جهاز تسجيل الوحدات الآلي المجدول IBM للفنيين إلى أجهزة الكمبيوتر الجديدة.
وقد كان فنيو الأجهزة المجدولة معتادين على أسلاك القابسات إلى لوحات تحكم لتنفيذ عمليات الإدخال والنواتج والتحكم والمواجهة (الإضافة، الخصم، الضرب، القسمة). تم تنفيذ عدة برامج آلات جدولة عبر نبضات تنبعث في دورة الآلة، ومن ثم تضاهي فارجو وآر بي جي فكرة دورة الآلة مع دورة البرنامج. وكانت آر بي جي تفوق الفارجو وسرعان ما تم استبدالها كبرنامج توليد التقارير الاختياري.
آر بي جي (لغة برمجة) التاريخ
وقد كانت اللغات البديلة المتاحة بشكل عام في هذا الوقت هي أسيمبلر وكوبول وفورتران. وكانت لغة الكوبول لغة عملية شبيهة باللغات الطبيعية والفورتران كانت لغة سهلت كافة التطبيقات الرياضية. من اللغات الأخرى في هذا الوقت كانت ألجول وأوتوكودر وبعد عدة سنوات بي إل وان. وقد كانت الللغتين أسيمبلر وكوبول شائعتين في العمليات الخاصة بأجهزة الكمبيوتر الرئيسية (طرازات سيستم 360 30 وأعلى) وتستخدم آر بي جي بشكل شائع من جانب العملاء الذين انتقلوا من أجهزة ومعدات الجدولة (سيستم 360 طراز 20).
آر بي جي (لغة برمجة) نشأة اللغة
تم تقديم لغة آر بي جي تو مع مجموعة سيستم ثري من أجهزة الكمبيوتر. ثم استخدمت فيما بعد مع سيستم 32 وسيستم 34 وسيستم 36، مع نسخة معدلة من اللغة. كما أنتجت آي سي إل أيضا نسخة على نظام تشغيلها VME/KK.
ظهرت آر بي جي ثري لتعمل على سيستم 38 وما تلاها AS/400. وقد تم ترحيل آر بي جي ثري من اللغة الأصلية بحيث وفرت مقومات هيكلية عصرية مثل بلوكات IF-ENDIF وحلقات دو والكمبيوتر الرشيس IBM System/370 اليذ يعمل ب OS/VS1. كما كانت متاحة أيضا من يونيسيس لنظام التشغيل VS/9 الذي يعمل على الكمبيوتر الرئيسي يونيفاك 90/60
أما لغة DE/RPG أو آر بي جي لإدخال البيانات كانت متوفرة بشكل حصري في مجموعة حواسيب آي بي إم 5280 من محطات عما إدخال البيانات في بداية الثمانينات. وقد كانت شبيهة بآر بي جي ثري ولكن ينقصها مواصفات البيانات الخارجية (DDS) لوصف (ملفات) البيانات مثلما في نظام سيستم 38 وكل ما تلاه. بدلا من ذلك، يجب إدراج جزء DDS في مصدر آر بي جي نفسها.
آر بي جي (لغة برمجة) نشأة اللغة
آر بي جي 400 كان فعليا آر بي جي ثري الذي يعمل على AS/400. وأعادت IBM تسمية مصنف آر بي جي باسم «آر بي جي 400» ولكنه كان شبيها بمصنف آر بي جي ثري حتى بدأت IBM تطوير شفرات تشغيل جديدة مثل سكان وكات وإكسليت بعد عدة سنوات من توافر AS/400. هذه التعزيزات لآر بي جي ثري لم تكن متوفرة في نسخة سيستم 38 من آر بي حي ثري.
آر بي جي فور (أو التي تعرف ب RPGLE أو RPG/ILE) صدرت عام 1994 ولم يعد الاسم بعد ذلك مجرد أحرف بادئة تمثل معنى الكلمة. قدمت آر بي جي فور مجموعة متنوعة من التعبيرات من خلال سماتها الحسابية المتوسعة فاكتور تو Factor-2، ولاحقا في الحياة، من خلال مواصفاتها الحسابية الخالية من التنسيق وتركيبات الجمل الإجرائية. وتعد آر بي جي فور النسخة الوحيدة من آر بي جي التي تدعمها آي بي إم في كل سلسلة المنتجات الواسعة التالية لنظام AS/400.
آر بي جي (لغة برمجة) آر بي جي فور، لغة حديثة
في عام 2001، ومع إصدار OS/400 V5R1، قدمت آر بي جي فور حرية أكبر من أجل الحسابات التي تقدمها المواصفات الحسابية الموسعة فاكتور تو: مدخل مصدري ذو إمكانية للنصوص خالية من التنسيق، كبديل للنسق المصدري الأصلي المعتمد على الأعمدة. إن حساب /freeلا يتطلب وضع شفرة تشغيل في عمود معين، وشفرة التشغيل هي أمر خياري بالنسبة لعمليات تشغيل EVAL وCALLP كما يتشابه تركيب الجمل بشكل كبير مع لغات برمجة الحواسيب الرئيسية متعددة الأغراض.
آر بي جي (لغة برمجة) آر بي جي فور، لغة حديثة
واليوم تعد لغة آر بي جي فور بلا شك لغة قوية. ويمكن أن يتم التحرير أيضا عبر محرر بسيط أو يمكن التحرير عبر الكمبيوتر الشخصي باستخدام برنامج «ويب سفير ديفيلوبمنت ستوديو» التابع لIBM والذي عرف حاليا باسم RDi (راشيونال ديفيلوبمنت ستوديو لآي) وهو تطبيق مصمم خصيصا من إكليبس. وتقوم آي بي إم بشكل مستمر بالتوسع في إمكاناتها وإضافة المزيد من الوظائف المدمجة داخليا (BIFs). وهي لديها القدرة على الارتباط بعناصر الجافا، وi5/OS APIs، ويمكن استخدامها لكتابة برنامج سي جي آي بمساعدة صندوق أدوات الذو إشارة Cgidev2 التابع لIBM وRPGLIP (مجموعة من مئات الأعمال الروتينية المكتوبة مسبقا عبر RPG IV) وCGILIB وصندوق أدوات آر بي جي ومجموعة باقات تمكينية تجارية أخرى للمواقع الإليكترونية. حتى مع التغييرت، لا تزال تحتفظ بمجموعة من التوافق الخلفي، لذا فإن برنامج آر بي جي الذي كتب منذ 37 عاما يمكن تشغيله اليوم بالقليل من التعديلات أو بدون تعليمات على الإطلاق.
آر بي جي (لغة برمجة) آر بي جي فور، لغة حديثة
علاوة على ذلك، مع تطبيق المصنف المسبق لإس كيو إل، يمكن لمطوري آر بي جي الاستفادة من إس كيو إي المعتمدة على التكاليف والتابعة لآي بي إم (SQL Query Engine). وعلى عكس التوجه التقليدي F-Spec، حيث يستيع المطور تحديد طريق وصول محدد لمجموعة بيانات، يمكن للمطور الآن تنفيذ بيانات إس كيو إل مدمجة مباشرة في البرنامج. وعند تصنيفها، يقوم المصنف المسبق لإس كيو إل بتحويل بيانات إس كيو إل المدمجة غير الصالحة إلى بيانات ر بي جي صالحة تستدعي برنامج مدير قواعد البيانات الذي يقوم في النهاية بتنفيذ طلب التساؤل.
تمت إعادة تسمية OS/400 لاحقا i5/OS ليتماشى مع مبادرة تسمية المنتج الجديدة IBM System i5، تم إسقاط 5 من التسمية لاحقا ليصبح الاسم system I فقط وخطوط إنتاج System p. كما انتهج نظام الطاقة الجديد أيضا أعداد نسخ تسلسلية أكثر لتستبدل 6.1 بالتدوين V1R1M0 التي تبلغ من العمر 20 عاما. وتمت الإشارة لآخر الإصدارات باسم IBM i 7.1 وتدعم بالكامل لغة آر بي جي فور والعديد من اللغات الأخرى أيضا. كما يشار إلى تابع ويبسفير ديفيلوبمنت ستوديو (WDSC) باسم المطور العقلاني للآي (RDi)، والذي يتوافر منه ثلاث مستويات من المنتجات. وهي تسمى المطور العقلي للآي RDi والهيكل ذو التوجه الخدمي RDi SOA ومطور التطبيقات العقلاني RDA. ويتيح الخط الجديد كافة أدوات ودعم التطوير بباقات حبيبية أكثر قدمتها النسخة WDSC والنسخة
آر بي جي (لغة برمجة) أنماط البيانات
تدعم لغة آر بي جي أنماط البيانات التالية.