الوظيفة الجوهرية
في برمجيات الحاسوب ، وتحديدًا في نظرية المترجمات ، تُعرف الدالة المضمنة ، أو الدالة المدمجة ، بأنها دالة ( روتين فرعي ) متاحة للاستخدام في لغة برمجة معينة ، ويتولى المترجم تنفيذها بشكل خاص . عادةً، قد تستبدل الدالة المضمنة سلسلة من التعليمات المُولَّدة تلقائيًا باستدعاء الدالة الأصلية، على غرار الدالة المضمنة . [ 1 ] على عكس الدالة المضمنة، يمتلك المترجم معرفة دقيقة بالدالة المضمنة، وبالتالي يستطيع دمجها وتحسينها بشكل أفضل في أي حالة معينة.
قد تقوم المترجمات التي تنفذ الوظائف الجوهرية بتمكينها فقط عندما يطلب البرنامج التحسين ، وإلا فإنها تعود إلى التنفيذ الافتراضي الذي يوفره نظام وقت تشغيل اللغة (البيئة).
التحويل إلى متجهات والتوازي
تُستخدم الدوال المضمنة غالبًا لتنفيذ التوجيه المتجهي والتوازي بشكل صريح في اللغات التي لا تدعم هذه البنى. تستخدم بعض واجهات برمجة التطبيقات (API)، مثل AltiVec و OpenMP ، الدوال المضمنة للإعلان، على التوالي، عن العمليات القابلة للتوجيه المتجهي والعمليات المتوافقة مع المعالجة المتعددة أثناء الترجمة. يقوم المترجم بتحليل الدوال المضمنة وتحويلها إلى حسابات متجهية أو كود كائن للمعالجة المتعددة مناسب للمنصة المستهدفة . تُستخدم بعض الدوال المضمنة لتوفير قيود إضافية للمُحسِّن، مثل القيم التي لا يمكن أن يأخذها المتغير. [ 2 ]
عن طريق لغة البرمجة
لغة C ولغة C++
تُنفّذ مُجمّعات لغات C و C++ ، من مايكروسوفت [ 3 ] وإنتل [ 1 ] و GCC [ 4 ] ، وظائف مضمنة تُطابق مباشرةً تعليمات SIMD ( تعليمات مفردة، بيانات متعددة ) في معمارية x86 ( MMX ، وامتدادات SIMD المتدفقة (SSE)، و SSE2 ، و SSE3 ، وSSSE3 ، وSSE4 ، وAVX ، وAVX2 ، و AVX512 ، و FMA ، ...). تسمح هذه الوظائف المضمنة بالربط بتعليمات التجميع القياسية التي لا يُمكن الوصول إليها عادةً من خلال C/C++؛ مثل مسح البتات والعمليات المتوازية على 128 بت و 256 بت .
تُوفّر بعض مُجمّعات لغتي C و C++ دوالًا داخلية خاصة بالمنصة غير قابلة للنقل. بينما تُعدّ دوال داخلية أخرى (مثل الدوال المُدمجة في GNU ) أكثر تجريدًا، تُقارب قدرات العديد من المنصات الحديثة، مع وجود تطبيقات احتياطية قابلة للنقل على المنصات التي لا تحتوي على تعليمات مُناسبة. [ 5 ] من الشائع أن تُحقّق مكتبات C++، مثل glm أو مكتبات الرياضيات المتجهة من سوني ، [ 6 ] قابلية النقل عبر التجميع الشرطي (استنادًا إلى علامات مُجمّع خاصة بالمنصة)، مما يُوفّر بدائيات عالية المستوى قابلة للنقل بالكامل (مثل نوع متجه فاصلة عائمة من أربعة عناصر) مُرتبطة بتطبيقات لغات البرمجة منخفضة المستوى المُناسبة، مع الاستفادة في الوقت نفسه من نظام أنواع C++ والتضمين؛ ومن هنا تأتي الميزة على الربط بملفات كائنات التجميع المكتوبة يدويًا، باستخدام واجهة التطبيق الثنائية (ABI ) للغة C.
أمثلة
فيما يلي أمثلة على توقيعات الوظائف الجوهرية من مجموعة الوظائف الجوهرية لشركة إنتل.
uint64_t __rdtsc (); // إرجاع عداد ساعة المعالج الداخلي uint64_t __popcnt64 ( uint64_t n ); // عدد البتات المُفعّلة في n uint64_t _umul128 ( uint64_t Factor1 , uint64_t Factor2 , uint64_t * HighProduct ); // ضرب 64 بت × 64 بت => 128 بت __m512 _mm512_add_ps ( __m512 a , __m512 b ); // حساب a + b لمتجهين من 16 عددًا عشريًا __m512 _mm512_fmadd_ps ( __m512 a , __m512 b , __m512 c ); // حساب a*b + c لثلاثة متجهات من 16 عددًا عشريًاكوبول
تم تقديم وحدة الوظائف الجوهرية لـ COBOL في ANSI INCITS X3.23a-1989 و ISO 1989:1985/Amd 1:1992.
جافا
يحتوي مُصرّف آلة جافا الافتراضية (JVM) من نوع HotSpot، الذي يعمل في الوقت الفعلي، على وظائف مضمنة لواجهات برمجة تطبيقات جافا محددة. [ 8 ] وظائف HotSpot المضمنة هي واجهات برمجة تطبيقات جافا قياسية، وقد يكون لها تطبيق واحد أو أكثر مُحسَّن على بعض المنصات.
PL/I
تُعرّف لغة ANSI/ISO PL/I ما يقارب 90 دالة مُدمجة. [ 9 ] ويتم تجميعها عادةً على النحو التالي: [ 10 ] : 337-338
- وظائف معالجة السلاسل النصية المدمجة مثل INDEX و LENGTH
- وظائف حسابية مدمجة مثل ABS و CEIL و ROUND
- الدوال الرياضية المدمجة مثل الجيب، وجيب التمام، واللوغاريتم، والدالة الانعكاسية
- الدوال المدمجة لمعالجة المصفوفات، على سبيل المثال ANY وALL وPROD
- وظائف معالجة الشروط المدمجة مثل ONCODE و ONFILE
- وظائف التحكم في التخزين المدمجة، على سبيل المثال ADDR و POINTER
- المدخلات والمخرجات المدمجة: رقم السطر
- وظائف مدمجة متنوعة مثل التاريخ والوقت
أضافت المترجمات الفردية وظائف مدمجة إضافية خاصة ببنية الجهاز أو نظام التشغيل.
تُعرَّف الدالة المدمجة إما بترك اسمها غير مُصرَّح به والسماح لها بالقيمة الافتراضية، أو بتعريفها BUILTIN. ويمكن استبدال دالة مُعرَّفة من قِبل المستخدم تحمل نفس الاسم بتعريفها كدالة افتراضية ENTRY.
مراجع
- 1 2 "دليل المطورين والمرجع لمترجم Intel® C++ 19.1" . وثائق مترجم Intel® C++ . 16 ديسمبر 2019. تم الاطلاع عليه بتاريخ 17 يناير 2020 .
- ↑ فريق Clang (2020). "امتدادات لغة Clang" . وثائق Clang 11. تم الاطلاع بتاريخ 17 يناير 2020.
الدوال المدمجة
- ↑ MSDN . "وظائف المترجم الداخلية" . مايكروسوفت . تم الاسترجاع في 20 يونيو 2012 .
- ↑ وثائق GCC. "وظائف مدمجة خاصة بأجهزة مستهدفة محددة" . مؤسسة البرمجيات الحرة . تم الاطلاع بتاريخ 20 يونيو 2012 .
- ↑ "امتدادات المتجهات" . باستخدام مجموعة مترجمات جنو (GCC) . تم الاسترجاع في 16 يناير 2020 .
- ↑ "مكتبات سوني مفتوحة المصدر للرياضيات المتجهة ورياضيات SIMD (لأجهزة معالجة الرسومات/وحدات المعالجة الخاصة بالخلايا/منصات أخرى)" . منتدى Beyond3D . مؤرشف من الأصل بتاريخ 24-06-2016 . تم الاطلاع عليه بتاريخ 17-01-2020 .
- ↑ وظائف Intel الداخلية
- ↑ موك، كريس (25 فبراير 2013). "الأساليب المضمنة في HotSpot VM" . سلايدشير . تم الاسترجاع في 20 ديسمبر 2014 .
- ↑ لجنة ANSI X3 (1976). لغة البرمجة PL/I المعيار الوطني الأمريكي .
{{cite book}}: صيانة CS1: الأسماء الرقمية: قائمة المؤلفين ( رابط ) - ↑ شركة IBM (1995). مرجع لغة IBM PL/I لنظامي التشغيل MVS و VM .
روابط خارجية
- دليل Intel intrinsics
- باستخدام إجراءات ميليكود ، وثائق IBM AIX 6.1
- بناء المترجم
- برمجة الحاسوب
