ج--

لغة C (تُكتب عادةً باستخدام الواصلة والطرح، ولكن تُنطق C--- ) هي لغة برمجة شبيهة بلغة C ، مصممة ليتم توليدها بشكل أساسي بواسطة مُترجمات لغات البرمجة عالية المستوى، بدلاً من كتابتها بواسطة مبرمجين بشريين. ابتكرها باحثا البرمجة الوظيفية سيمون بيتون جونز ونورمان رامزي. على عكس العديد من اللغات الوسيطة الأخرى، تُمثل C بنص ASCII عادي ، وليس برمز بايت أو أي تنسيق ثنائي آخر . [ 1 ] [ 2 ]

يوجد فرعان رئيسيان:

تصميم

لغة C هي " لغة تجميع محمولة " [ 6 ] ، مصممة لتسهيل تنفيذ المترجمات التي تُنتج شفرة آلية عالية الجودة . [ 7 ] ويتم ذلك عن طريق تفويض توليد الشفرة منخفضة المستوى وتحسين البرنامج إلى مترجم C. تستعير بنية اللغة بشكل كبير من لغة C، مع حذف أو تغيير بعض ميزات C القياسية، مثل الدوال ذات عدد متغير من الوسائط ، وبنية المؤشرات ، وبعض جوانب نظام أنواع C، لأنها تُعتبر مُعيقة للميزات الأساسية للغة C وسهولة توليد الشفرة.

اسم اللغة هو مزحة داخلية، تشير إلى أن C-- يُقصد به أن يكون شكلاً مختصراً من C، بنفس الطريقة التي تم بها اختيار " C++ " للدلالة على نسخة محسنة من C. (في C، تعني "الإنقاص" --و ++"الزيادة" على التوالي.) [ 8 ]

بدأ العمل على لغة C-- في أواخر التسعينيات. ونظرًا لأن كتابة مولد أكواد مخصص يمثل تحديًا بحد ذاته، ولأن واجهات برمجة التطبيقات المتاحة للباحثين آنذاك كانت معقدة وغير موثقة بشكل كافٍ، فقد طورت عدة مشاريع برامج ترجمة تُنتج أكواد C (على سبيل المثال، برنامج Modula-3 الأصلي ). مع ذلك، تُعاني لغة C من عدة عيوب مقارنةً باللغات الوظيفية: فهي لا تضمن تحسين استدعاءات الدوال ، ولا تدعم جمع البيانات المهملة بدقة، ولا معالجة الاستثناءات بكفاءة . تهدف لغة C-- إلى أن تكون بديلاً أبسط وأكثر دقة للغة C، يدعم كل هذه الميزات. وتتمثل أبرز ميزاتها المبتكرة في واجهة وقت التشغيل التي تسمح بكتابة برامج جمع بيانات مهملة محمولة، وأنظمة معالجة استثناءات، وميزات أخرى لوقت التشغيل تعمل مع أي برنامج ترجمة C--.

صدرت النسخة الأولى من لغة C-- في أبريل 1998 كبحثٍ نُشر في مؤتمر MSRA، [ 1 ] وتلتها ورقة بحثية أخرى في يناير 1999 حول جمع البيانات المهملة. [ 2 ] ونُشر دليلٌ مُنقّح بصيغة HTML في مايو 1999. [ 9 ] وأدّت مجموعتان من التغييرات الرئيسية التي اقترحها نورمان رامزي ("التغييرات المقترحة") وكريستيان لينديج ("قواعد نحوية جديدة") في عام 2000 إلى إصدار النسخة الثانية من لغة C--، والتي اكتملت في عام 2004 تقريبًا، وصدرت رسميًا في عام 2005. [ 3 ]

نظام الكتابة

صُمم نظام أنواع C-- ليعكس القيود التي تفرضها الأجهزة بدلاً من الاصطلاحات التي تفرضها لغات البرمجة عالية المستوى. لا يمكن أن يكون للقيمة المخزنة في سجل أو ذاكرة إلا نوع واحد: متجه بت . مع ذلك، يُعد متجه البت نوعًا متعدد الأشكال ، ويأتي بأطوال مختلفة، مثل bits8 و bits32 و bits64 . كما تدعم لغة C-- عائلة منفصلة من أنواع الفاصلة العائمة ذات 32 أو 64 بت. بالإضافة إلى نوع متجه البت، توفر C-- نوعًا منطقيًا bool ، يمكن حسابه باستخدام التعابير واستخدامه للتحكم في تدفق البرنامج، لكن لا يمكن تخزينه في سجل أو ذاكرة. وكما هو الحال في لغة التجميع، فإن أي نظام أنواع أعلى، مثل التمييز بين الأعداد الموقعة وغير الموقعة والفاصلة العائمة والمؤشرات، يُفرض بواسطة عوامل C-- أو بنيات نحوية أخرى. لا تخضع C-- لفحص الأنواع، كما أنها لا تفرض أو تتحقق من اصطلاح الاستدعاء. [ 3 ] : 28

يزيل الإصدار الثاني من لغة C التمييز بين أنواع المتجهات الثنائية وأنواع الأعداد العشرية. يمكن إضافة وسم "kind" إلى هذه الأنواع لتمييزها، من بين أمور أخرى، بين نوع المتغير (عدد صحيح أو عدد عشري) وسلوك تخزينه (عام أو محلي). يُعد النوع الأول مفيدًا في الأنظمة التي تحتوي على سجلات منفصلة لقيم الأعداد الصحيحة والأعداد العشرية. تم تقديم أنواع خاصة للمؤشرات والكلمة الأصلية، على الرغم من أنها تُربط بمتجه ثنائي بطول يعتمد على النظام المستهدف. [ 3 ] : 10

مثال على التعليمات البرمجية

يحسب الكود التالي المكتوب بلغة C مجموع وحاصل ضرب الأعداد الصحيحة من 1 إلى n [ 10 ] ( حيث يتم استقبال n كمعامل). وهو يوضح ميزتين من ميزات اللغة:

  • يمكن للإجراءات أن تُرجع نتائج متعددة.
  • يتم طلب التكرار الذيل بشكل صريح باستخدام الكلمة المفتاحية "jump".
/* استدعاء ذاتي متكرر */ export sp ; sp ( bits32 n ) { jump sp_help ( n , 1 , 1 ); }sp_help ( bits32 n , bits32 s , bits32 p ) { if n == 1 { return ( s , p ); } else { jump sp_help ( n - 1 , s + n , p * n ); } }

التطبيقات

تُدرج صفحة مواصفات لغة C بعض تطبيقاتها. أما المترجم "الأكثر نشاطًا في التطوير"، Quick C، فقد تم التخلي عنه في عام 2013. [ 11 ]

هاسكل

يعمل بعض مطوري لغة C، بمن فيهم سيمون بيتون جونز، وجواو دياس، ونورمان رامزي، أو عملوا سابقًا على GHC، الذي أدى تطويره إلى امتدادات في لغة C، مما أدى إلى تشكيل لهجة Cmm التي تستخدم معالج C المسبق لتحسين بيئة العمل. [ 4 ] [ 12 ]

تتولى واجهات GHC الخلفية مسؤولية تحويل لغة C-- إلى كود قابل للتنفيذ، عبر LLVM IR، أو لغة C البطيئة، أو مباشرةً من خلال الواجهة الخلفية الأصلية المدمجة. [ 13 ] [ 14 ] [ 15 ] على الرغم من الهدف الأصلي، تُجري GHC العديد من تحسيناتها العامة على لغة C--. وكما هو الحال مع واجهات IR الأخرى للمترجمات، يمكن استخراج تمثيل C-- لأغراض تصحيح الأخطاء. [ 16 ] تُجرى التحسينات الخاصة بالهدف لاحقًا بواسطة الواجهة الخلفية.

أنظمة المعالجة

اعتبارًا من عام 2018، فإن معظم أنظمة المعالجة لا يتم صيانتها، كما لا يتم إصدار شفرة المصدر الخاصة بها.

  • Quick C-- هو مُترجم برمجي طوّره فريق Quick C--. يقوم هذا المُترجم بتحويل الإصدار الثاني من كود C-- إلى كود آلة Intel x86 Linux. تتوفر ميزة التحويل إلى كود الآلة لمنصات أخرى كخاصية تجريبية. في السابق، كان Quick C-- يُطوّر بالتوازي مع تطور مواصفات لغة C--، ولكن تم أرشفة المشروع في عام 2019 على GitHub وتوقف تطويره، مع العلم أن الكود المصدري لا يزال متاحًا هناك.
  • cmmc هو مُترجم لغة C-- تم تنفيذه بلغة البرمجة ML بواسطة فيرمين ريغ. وهو يُولّد رمز الآلة لبنى Alpha و Sparc و x86. [ 17 ]
  • Trampoline C-- Compiler هو برنامج تحويل من لغة C-- إلى لغة C تم تطويره بواسطة سيرجي إيغوروف في مايو 1999. يقوم بترجمة كود C-- إلى كود C، مما يسمح بتجميعه باستخدام برامج تجميع C القياسية.
  • يُعد مُترجم لغة C-- التابع لمعهد أوريغون للدراسات العليا (OGI C-- Compiler) أقدم نموذج أولي لمترجم لغة C--، وقد طُوّر عام 1997 باستخدام لغة البرمجة ML. توقف دعم مُترجم OGI C-- Compiler بمجرد بدء تطوير لغة Quick C--.

انظر أيضاً

مراجع

  1. 1 2 نوردين، توماس؛ جونز، سيمون بيتون؛ إغليسياس، بابلو نوغيرا؛ أوليفا، دينو (23-04-1998). "دليل مرجعي للغة سي" . مايكروسوفت .
  2. 1 2 ريغ، فيرمين؛ رامزي، نورمان؛ جونز، سيمون بيتون (1999-01-01). "C–: لغة تجميع محمولة تدعم جمع البيانات المهملة" . مايكروسوفت : 1-28 .
  3. 1 2 3 4 رامزي، نورمان؛ جونز، سيمون بيتون. "مواصفات لغة C، الإصدار 2.0" (ملف PDF) . تم الاطلاع عليه بتاريخ 11 ديسمبر 2019 .
  4. 1 2 تعليق GHC: ما هو ملف .cmm بحق الجحيم؟
  5. "واجهة خلفية محسّنة لـ LLVM" . أبريل 2019.
  6. أوليفا، دينو؛ نوردين، ت.؛ بيتون جونز، سيمون (1997-01-01). "سي-: لغة تجميع محمولة" . وقائع ورشة عمل عام 1997 حول تنفيذ اللغات الوظيفية - عبر مايكروسوفت.
  7. جونز، سيمون بيتون؛ نوردين، توماس؛ أوليفا، دينو (1998). "C--: لغة تجميع محمولة" . في: كلاك، كريس؛ هاموند، كيفن؛ ديفي، توني (محررون). تنفيذ اللغات الوظيفية . سلسلة محاضرات في علوم الحاسوب. المجلد 1467. برلين، هايدلبرغ: سبرينغر. الصفحات 1-19 . doi : 10.1007/BFb0055421 . ISBN   978-3-540-68528-9.
  8. "معاملات الزيادة والنقصان في لغة C مع مراعاة الأسبقية" . unstop.com . تم الاطلاع عليه بتاريخ 2024-06-20 .
  9. نوردين، توماس؛ جونز، سيمون بيتون؛ إغليسياس، بابلو نوغيرا؛ أوليفا، دينو (23-05-1999). "دليل مرجعي للغة سي" .
  10. رامزي، نورمان؛ جونز، سيمون بيتون؛ لينديج، كريستيان (23-02-2005)، مواصفات لغة C، الإصدار 2.0 (مراجعة CVS 1.128) (ملف PDF) ، ص 7 ، تاريخ الاطلاع 22-06-2023 
  11. "C-- التنزيلات" . www.cs.tufts.edu . تم الاطلاع عليه بتاريخ 11 ديسمبر 2019 .
  12. "5.10. GHC Backends — Glasgow Haskell Compiler 9.8.1 User's Guide" . downloads.haskell.org . تم الاطلاع عليه بتاريخ 20 يونيو 2024 .
  13. واجهات GHC الخلفية
  14. "مقال رأي حول واجهات GHC الخلفية" . andreaspk.github.io . 25 أغسطس 2019. تم الاطلاع عليه بتاريخ 20 يونيو 2024 .
  15. "استخدام مُصرّف غلاسكو هاسكل (GHC)" . ProgDoer . تم الاسترجاع في 2024-06-20 .
  16. تصحيح أخطاء المترجمات باستخدام وقود التحسين
  17. "C-- التنزيلات" . www.cs.tufts.edu . تم الاطلاع عليه بتاريخ 2024-06-20 .