مجموعة مترجمات جنو

مجموعة مُجمِّعات جنو ( GCC ؛ المعروفة سابقًا باسم مُجمِّع جنو للغة سي ) هي مجموعة من المُجمِّعات من مشروع جنو، تدعم لغات برمجة وبنى أجهزة وأنظمة تشغيل متنوعة . تُوزِّع مؤسسة البرمجيات الحرة (FSF) مجموعة مُجمِّعات جنو كبرنامج حر بموجب رخصة جنو العمومية (GNU GPL). تُعدّ مجموعة مُجمِّعات جنو مُكوِّنًا أساسيًا في سلسلة أدوات جنو ، والتي تُستخدم في مُعظم المشاريع المُتعلقة بجنو ونواة لينكس . مع ما يقرب من 15 مليون سطر برمجي في عام 2019، تُعتبر مجموعة مُجمِّعات جنو واحدة من أكبر البرامج الحرة الموجودة. [ 4 ] وقد لعبت دورًا هامًا في نمو البرمجيات الحرة ، كأداة ومثال يُحتذى به.

عندما أُصدرت GCC 1.0 لأول مرة عام 1987 على يد ريتشارد ستالمان ، سُميت بمترجم GNU C لأنها كانت تدعم لغة البرمجة C فقط . [ 1 ] وفي ديسمبر من ذلك العام، تم توسيعها لتشمل ترجمة C++ . لاحقًا، طُوّرت واجهات أمامية للغات أخرى مثل Objective-C و Objective-C++ و Fortran و Ada و Go و D و Modula-2 و Rust و COBOL و ALGOL 68. [ 6 ] كما تدعم مُترجمات C وC++ مواصفات OpenMP و OpenACC . [ 7 ] [ 8 ]

إلى جانب كونه المترجم الرسمي لنظام التشغيل جنو ، اعتُمد GCC كمترجم قياسي من قِبل العديد من أنظمة التشغيل الحديثة الأخرى الشبيهة بنظام يونكس ، بما في ذلك معظم توزيعات لينكس . كما تحولت معظم أنظمة تشغيل عائلة BSD إلى استخدام GCC بعد فترة وجيزة من إصداره، مع أن نظامي FreeBSD و Apple macOS انتقلا منذ ذلك الحين إلى استخدام مترجم Clang ، [ 9 ] ويعود ذلك في الغالب إلى أسباب تتعلق بالترخيص. [ 10 ] [ 11 ] [ 12 ] ويمكن لـ GCC أيضًا ترجمة التعليمات البرمجية لأنظمة التشغيل المتوافقة مع ويندوز ، وأندرويد ، وiOS ، وسولاريس ، و HP-UX ، وAIX ، و MS-DOS . [ 13 ]

تم نقل GCC إلى منصات وبنى مجموعات تعليمات أكثر من أي مترجم آخر، ويُستخدم على نطاق واسع كأداة في تطوير البرامج المجانية والاحتكارية . كما يتوفر GCC للعديد من الأنظمة المدمجة ، بما في ذلك الرقاقات القائمة على معالجات ARM و Power ISA .

تاريخ

في أواخر عام ١٩٨٣، وفي محاولة لإطلاق نظام التشغيل جنو ، طلب ريتشارد ستالمان من أندرو إس. تانينباوم ، مؤلف مجموعة أدوات مُترجم أمستردام (المعروفة أيضًا باسم مجموعة أدوات مُترجم الجامعة الحرة )، الإذن باستخدام ذلك البرنامج لنظام جنو. عندما أخبره تانينباوم أن المُترجم نفسه ليس مجانيًا، بل هو مُتاح للجامعة فقط، قرر ستالمان العمل على مُترجم مختلف. [ ١٤ ] كانت خطته الأولية هي إعادة كتابة مُترجم موجود من مختبر لورانس ليفرمور الوطني للغة باستيل ، مكتوب بلغة باستيل، بمساعدة من لين تاور وآخرين. [ ١٥ ] [ ١٦ ] كتب ستالمان واجهة أمامية جديدة بلغة سي لمُترجم ليفرمور، لكنه أدرك لاحقًا أنها تتطلب ميغابايتات من مساحة المكدس، وهو أمر مستحيل على نظام يونكس ٦٨٠٠٠ الذي لا يسمح بأكثر من ٦٤ كيلوبايت من مساحة المكدس، وخلص إلى أنه سيضطر إلى كتابة مُترجم جديد من الصفر. [ 15 ] لم يُدمج أيٌّ من أكواد مُصرّف باستيل في مُجمّع GCC، مع أن ستالمان استخدم واجهة C الأمامية التي كتبها بلغة باستيل. [ 15 ] [ 17 ] 

صدرت نسخة GCC لأول مرة في 22 مارس 1987، وهي متاحة عبر بروتوكول نقل الملفات (FTP) من معهد ماساتشوستس للتكنولوجيا (MIT ). [ 18 ] ذُكر اسم ستالمان كمؤلف رئيسي، ولكن تم الإشارة إلى مساهمات آخرين، من بينهم تاور لمساهمته في "أجزاء من المحلل اللغوي، ومولد لغة وصف الأجهزة (RTL)، وتعريفات RTL، ووصف آلة Vax"، وجاك ديفيدسون وكريستوفر دبليو فريزر لفكرة استخدام RTL كلغة وسيطة، وبول روبين لكتابة معظم المعالج المسبق. [ 19 ] وصف بيتر إتش سالوس مترجم GNU بأنه "أول نجاح للبرمجيات الحرة"، وقد ظهر في الوقت الذي كانت فيه شركة صن مايكروسيستمز تفصل أدوات التطوير الخاصة بها عن نظام التشغيل ، وتبيعها بشكل منفصل بسعر أعلى من سعر الحزمة السابقة، مما دفع العديد من مستخدمي صن إلى شراء أو تنزيل GCC بدلاً من أدوات الشركة المصنعة. [ 20 ] على الرغم من أن ستالمان اعتبر برنامج GNU Emacs مشروعه الرئيسي، إلا أنه بحلول عام 1990 كان برنامج GCC يدعم ثلاثة عشر معمارية حاسوبية، وكان يتفوق على العديد من برامج الترجمة الخاصة بالبائعين، وكان يُستخدم تجاريًا من قبل العديد من الشركات. [ 21 ]

شوكة EGCS

بما أن GCC كان مرخصًا بموجب رخصة جنو العمومية (GPL)، فقد كان بإمكان المبرمجين الراغبين في العمل في مجالات أخرى - لا سيما أولئك الذين يكتبون واجهات للغات أخرى غير C - تطوير نسخهم الخاصة من المترجم، شريطة استيفائهم لشروط رخصة جنو العمومية، بما في ذلك متطلبات توزيع شفرة المصدر . إلا أن تعدد النسخ أثبت عدم كفاءته وصعوبة استخدامه، وكانت صعوبة قبول العمل من قبل مشروع GCC الرسمي محبطة للغاية للكثيرين، حيث فضّل المشروع الاستقرار على الميزات الجديدة. [ 22 ] وقد فرضت مؤسسة البرمجيات الحرة (FSF) رقابة صارمة على ما يُضاف إلى الإصدار الرسمي من GCC 2.x (الذي طُوّر منذ عام 1992) لدرجة أن GCC استُخدم كمثال على نموذج التطوير "الكاتدرائية" في مقال إريك س. ريموند " الكاتدرائية والبازار" .

في عام ١٩٩٧، شكّلت مجموعة من المطورين نظام مُترجم جنو التجريبي/المُحسّن (EGCS) لدمج عدة نسخ تجريبية في مشروع واحد. [ ٢٢ ] [ ١٧ ] استند الدمج إلى نسخة تجريبية من مُترجم جنو (GCC) (مأخوذة عند الإصدار ٢.٧.٢ تقريبًا، ثم تلتها لاحقًا نسخة ٢.٨.١). شملت عمليات الدمج g٧٧ (فورتران)، وPGCC ( مُترجم جنو المُحسّن لمعالج بنتيوم P٥ )، [ ١٧ ] والعديد من تحسينات لغة C++، بالإضافة إلى العديد من البنى الجديدة وأنظمة التشغيل المختلفة. [ ٢٣ ]

على الرغم من أن كلا المشروعين تابعا تغييرات الآخر عن كثب، إلا أن تطوير EGCS أثبت أنه أكثر حيوية بشكل ملحوظ، لدرجة أن مؤسسة البرمجيات الحرة (FSF) أوقفت رسميًا تطوير مُصرّف GCC 2.x، واعتمدت EGCS كنسخة رسمية من GCC، وعيّنت مشروع EGCS مسؤولًا عن صيانة GCC في أبريل 1999. ومع إصدار GCC 2.95 في يوليو 1999، توحد المشروعان مجددًا. [ 24 ] [ 17 ] ومنذ ذلك الحين، يتولى صيانة GCC مجموعة متنوعة من المبرمجين من جميع أنحاء العالم تحت إشراف لجنة توجيهية. [ 25 ]

أزالت GCC 3 (2002) واجهة أمامية لـ CHILL بسبب نقص الصيانة. [ 26 ]

قبل الإصدار 4.0، كانت واجهة Fortran الأمامية هي g77، والتي كانت تدعم فقط FORTRAN 77 ، ولكن تم التخلي عنها لاحقًا لصالح واجهة GNU Fortran الأمامية الجديدة التي تدعم Fortran 95 وأجزاء كبيرة من Fortran 2003 و Fortran 2008 أيضًا. [ 27 ] [ 28 ]

اعتبارًا من الإصدار 4.8، تم تنفيذ GCC بلغة C++. [ 29 ]

كان دعم Cilk Plus موجودًا من GCC 5 إلى GCC 7. [ 30 ] [ 31 ]

تم نقل GCC إلى مجموعة واسعة من بنى مجموعات التعليمات ، ويُستخدم على نطاق واسع كأداة في تطوير البرمجيات الحرة والاحتكارية . يتوفر GCC أيضًا للعديد من الأنظمة المدمجة ، بما في ذلك Symbian (المسمى gcce[ 32 ] والرقاقات القائمة على ARM و Power ISA . [ 33 ] يمكن للمترجم استهداف مجموعة واسعة من المنصات، بما في ذلك أجهزة ألعاب الفيديو مثل PlayStation 2 ، [ 34 ] وCell SPE الخاص بـ PlayStation 3، [ 35 ] و Dreamcast . [ 36 ] وقد تم نقله إلى "أكثر من 60 منصة". [ 37 ]

اللغات المدعومة

اعتبارًا من الإصدار 16.1،يتضمن GCC واجهات أمامية للغات البرمجة C و C ++ و Objective - C وObjective-C++ وFortran وAda (GNAT) وGo وD ( منذ الإصدار 9.1 ) [ 38 ] [ 39 ] و Modula - 2 ( منذ الإصدار 13.1 ) [ 40 ] [ 41 ] و Rust ( منذ الإصدار 15.1 ) و COBOL ( منذ الإصدار 15.1) و ALGOL 68 ( منذ الإصدار 16.1) [ 6 ] مع دعم امتدادات اللغات المتوازية OpenMP و OpenACC منذ الإصدار GCC 5.1 [ 8 ] [ 42 ] . كما دعمت الإصدارات السابقة للإصدار GCC 7 لغة Java ، مما يسمح بتجميع Java إلى كود الآلة الأصلي [ 43 ] .gccg++gfortrangccgogdcgm2gccrsgcobolga68gcj

تتوفر واجهات أمامية خارجية للعديد من اللغات، مثل باسكال ( Pascal gpcوميركوري (Mercuryوموديولا-3 (Modula-3) ، وفي إتش دي إل ( VHDLGHDL )، وبي إل/آي (PL/I) . [ 6 ] وتوجد بعض الفروع التجريبية لدعم لغات إضافية، مثل مُصرّف GCC UPC للغة سي المتوازية الموحدة (Unified Parallel C) . [ 44 ] [ 45 ]

منذ إصدار GCC 15.1، أصبح الهدف الافتراضي للغة C++ هو gnu++20 ، وهو مجموعة فرعية من C++20 ، بينما أصبح الهدف الافتراضي للغة C منذ إصدار GCC 15 هو gnu23 ، وهو مجموعة فرعية من C23 ، مع توفر دعم قياسي كامل أيضًا. كما يوفر GCC دعمًا تجريبيًا للغات C2Y و C++23 و C++26 . [ 46 ] صدر إصدار GCC 16.1 في 30 أبريل 2026. [ 47 ] [ 48 ]

تصميم

نظرة عامة على مسار التجميع الموسع لـ GCC، بما في ذلك البرامج المتخصصة مثل المعالج المسبق والمجمع والرابط .
يتبع GCC بنية ثلاثية المراحل نموذجية للمترجمات متعددة اللغات ومتعددة المعالجات . يتم تحويل جميع أشجار البرنامج إلى تمثيل مجرد مشترك في "الطرف الأوسط"، مما يسمح بمشاركة جميع اللغات في تحسين التعليمات البرمجية وتوليد التعليمات البرمجية الثنائية .

تتبع الواجهة الخارجية لـ GCC اصطلاحات يونكس . يقوم المستخدمون باستدعاء برنامج تشغيل خاص باللغة ( gccلغة C، g++ولغة C++، وما إلى ذلك)، والذي يفسر وسيطات الأوامر ، ويستدعي المترجم الفعلي، ويشغل المجمع على الناتج، ثم يقوم اختيارياً بتشغيل الرابط لإنتاج ملف تنفيذي ثنائي كامل.

كل مترجم من مترجمات اللغات عبارة عن برنامج منفصل يقرأ شفرة المصدر ويخرج شفرة الآلة . جميعها تشترك في بنية داخلية واحدة. تقوم واجهة أمامية خاصة بكل لغة بتحليل شفرة المصدر بتلك اللغة وتنتج شجرة بناء جملة مجردة (شجرة اختصارًا).

يتم تحويل هذه البيانات، عند الضرورة، إلى تمثيل الإدخال الخاص بالطرف الأوسط، والذي يُسمى الشكل العام (GENERIC form)؛ ثم يقوم الطرف الأوسط بتحويل البرنامج تدريجيًا نحو شكله النهائي. تُطبق تحسينات المُصرّف وتقنيات تحليل الكود الثابت (مثل FORTIFY_SOURCE، [ 49 ] وهو توجيه للمُصرّف يحاول اكتشاف بعض حالات تجاوز سعة المخزن المؤقت ) على الكود. تعمل هذه التقنيات على تمثيلات متعددة، أبرزها تمثيل GIMPLE المستقل عن بنية المعالج، وتمثيل RTL المعتمد على بنية المعالج . أخيرًا، يُنتج كود الآلة باستخدام مطابقة الأنماط الخاصة ببنية المعالج، والتي استندت في الأصل إلى خوارزمية جاك ديفيدسون وكريس فريزر.

كُتب برنامج GCC بشكل أساسي بلغة C باستثناء أجزاء من واجهة Ada الأمامية. تتضمن التوزيعة المكتبات القياسية للغتي Ada و C++، والتي كُتب معظمها بهاتين اللغتين. [ 50 ]في بعض المنصات، تتضمن التوزيعة أيضًا مكتبة وقت تشغيل منخفضة المستوى، libgcc ، مكتوبة بمزيج من لغة C المستقلة عن الجهاز وشفرة الآلة الخاصة بالمعالج ، وهي مصممة في المقام الأول للتعامل مع العمليات الحسابية التي لا يستطيع المعالج المستهدف تنفيذها مباشرة. [ 51 ]

يستخدم GCC العديد من الأدوات الإضافية في عملية بنائه، والتي يتم تثبيت الكثير منها افتراضيًا في العديد من توزيعات Unix وLinux (ولكنها عادةً غير موجودة في أنظمة Windows)، بما في ذلك Perl و Flex و Bison وغيرها من الأدوات الشائعة. بالإضافة إلى ذلك، يتطلب حاليًا وجود ثلاث مكتبات إضافية لإتمام عملية البناء: GMP و MPC و MPFR . [ 52 ]

في مايو 2010، قررت اللجنة التوجيهية لمشروع GCC السماح باستخدام مُصرّف C++ لتجميع GCC. [ 53 ] وكان من المُقرر كتابة المُصرّف بلغة C في الغالب، بالإضافة إلى مجموعة فرعية من ميزات C++. وعلى وجه الخصوص، تم اتخاذ هذا القرار لتمكين مطوري GCC من استخدام ميزات المُدمّرات والأنواع العامة في C++. [ 54 ]

في أغسطس 2012، أعلنت اللجنة التوجيهية لمشروع GCC أن المشروع يستخدم الآن لغة C++ كلغة برمجة. [ 55 ] وهذا يعني أنه لبناء GCC من المصادر، يلزم وجود مُصرّف C++ يفهم معيار ISO/IEC C++03 .

في 18 مايو 2020، انتقل مُجمِّع GCC من معيار ISO/IEC C++03 إلى معيار ISO/IEC C++11 (أي أنه كان مطلوبًا لتجميع وتهيئته، بالإضافة إلى المُجمِّع نفسه؛ ولكنه يقوم افتراضيًا بتجميع الإصدارات الأحدث من لغة C++). [ 56 ]

الواجهات الأمامية

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

تستخدم كل واجهة أمامية محللاً لغوياً لإنتاج شجرة بناء الجملة المجردة لملف مصدر معين . وبفضل تجريد شجرة بناء الجملة، يمكن معالجة ملفات المصدر لأي من اللغات المدعومة المختلفة بواسطة نفس الواجهة الخلفية . بدأ GCC باستخدام محللات LALR المولدة بواسطة Bison ، لكنه تحول تدريجياً إلى محللات انحدار تكراري مكتوبة يدويًا للغة C++ في عام 2004، [ 57 ] ولللغتين C وObjective-C في عام 2006. [ 58 ] اعتبارًا من عام 2021، تستخدم جميع الواجهات الأمامية محللات انحدار تكراري مكتوبة يدويًا.

حتى إصدار GCC 4.0، لم يكن تمثيل البرنامج الشجري مستقلاً تماماً عن المعالج المستهدف. كان معنى الشجرة يختلف نوعاً ما بين واجهات البرمجة الأمامية للغات المختلفة، وكان بإمكان هذه الواجهات توفير رموزها الشجرية الخاصة. تم تبسيط هذا الأمر مع ظهور GENERIC وGIMPLE، وهما شكلان جديدان من الأشجار المستقلة عن اللغة، واللذان تم تقديمهما مع إصدار GCC 4.0. يُعد GENERIC أكثر تعقيداً، ويعتمد على التمثيل الوسيط لواجهة برمجة جافا الأمامية في GCC 3.x. أما GIMPLE فهو نسخة مبسطة من GENERIC، حيث يتم اختزال العديد من البنى إلى تعليمات GIMPLE متعددة. تُنتج واجهات برمجة C و C++ وجافا الأمامية GENERIC مباشرةً في الواجهة الأمامية. بينما تمتلك الواجهات الأمامية الأخرى تمثيلات وسيطة مختلفة بعد التحليل، وتقوم بتحويلها إلى GENERIC.

في كلتا الحالتين، يقوم ما يسمى بـ "gimplifier" بتحويل هذا الشكل الأكثر تعقيدًا إلى شكل GIMPLE الأبسط القائم على SSA والذي يمثل اللغة المشتركة لعدد كبير من التحسينات العالمية (نطاق الوظيفة) المستقلة عن اللغة والبنية.

عام وبسيط

لغة GENERIC هي لغة تمثيل وسيطة تُستخدم كطبقة وسيطة أثناء تجميع الشفرة المصدرية إلى ملفات تنفيذية ثنائية . وتستهدف جميع واجهات GCC الأمامية مجموعة فرعية منها تُسمى GIMPLE .

تتولى المرحلة الوسطى من مُجمِّع GCC جميع عمليات تحليل الكود وتحسينه ، وتعمل بشكل مستقل عن كلٍّ من لغة الترجمة والبنية المستهدفة، بدءًا من تمثيل GENERIC [ 59 ] وتوسيعه ليشمل لغة نقل السجلات (RTL). يحتوي تمثيل GENERIC على مجموعة فرعية فقط من بنيات البرمجة الإجرائية التي تم تحسينها بواسطة المرحلة الوسطى.

عند تحويل الشفرة المصدرية إلى GIMPLE، [ 60 ] تُقسّم التعبيرات المعقدة إلى شفرة ثلاثية العناوين باستخدام متغيرات مؤقتة . استُلهم هذا التمثيل من تمثيل SIMPLE الذي اقترحه لوري ج . هندري [ 62 ] في مُصرّف McCAT لتبسيط تحليل البرامج الإجرائية وتحسينها .

تحسين

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

تختلف مجموعة تحسينات GCC الدقيقة من إصدار لآخر مع تطورها، ولكنها تشمل الخوارزميات القياسية، مثل تحسين الحلقات ، وربط الخيوط ، وإزالة التعبيرات الفرعية المشتركة ، وجدولة التعليمات ، وما إلى ذلك. أما تحسينات RTL، فقد أصبحت أقل أهمية مع إضافة تحسينات SSA الشاملة على أشجار GIMPLE ، [ 63 ] نظرًا لأن نطاق تحسينات RTL محدود للغاية، وتحتوي على معلومات أقل تفصيلًا.

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

مكتبة C++ القياسية (libstdc++)

يتضمن مشروع GCC تطبيقًا لمكتبة C++ القياسية يُسمى libstdc++، [ 65 ] مرخص بموجب رخصة GPLv3 مع استثناء لربط التطبيقات غير المتوافقة مع GPL عند بناء المصادر باستخدام GCC. [ 66 ] منذ الإصدار الثالث من GCC، يعتمد ABI الخاص بلغة C++ على ABI الذي نشرته Intel لـ Itanium C++ ABI. [ 67 ]

ميزات أخرى

تتضمن بعض ميزات نظام التحكم في الحزم (GCC) ما يلي:

تحسين وقت الربط
تعمل تقنية تحسين وقت الربط على تحسين الأداء عبر حدود ملفات الكائنات لتحسين الملف الثنائي المرتبط مباشرةً. تعتمد هذه التقنية على ملف وسيط يحتوي على تسلسل تمثيل Gimple المُضمّن في ملف الكائن. يُنشأ هذا الملف بالتزامن مع ملف الكائن أثناء تجميع المصدر. يُنتج كل تجميع للمصدر ملف كائن منفصل وملف مساعد خاص بوقت الربط. عند ربط ملفات الكائنات، يُعاد تشغيل المُجمِّع ويستخدم الملفات المساعدة لتحسين أداء الكود عبر ملفات الكائنات المُجمَّعة بشكل منفصل.
الإضافات
تُوسّع الإضافات مُصرّف GCC مباشرةً. [ 68 ] تسمح الإضافات بتخصيص المُصرّف الأساسي وفقًا لاحتياجات مُحدّدة بواسطة كود خارجي يتم تحميله كإضافات. على سبيل المثال، يُمكن للإضافات إضافة أو استبدال أو حتى إزالة مراحل المعالجة الوسيطة التي تعمل على تمثيلات Gimple . [ 69 ] وقد نُشرت بالفعل العديد من إضافات GCC، أبرزها:
  • تتيح إضافة بايثون، التي ترتبط بمكتبة libpython، استدعاء أي نصوص برمجية بلغة بايثون من داخل المُصرّف. والهدف هو تمكين كتابة إضافات GCC بلغة بايثون.
  • توفر إضافة MELT لغة عالية المستوى تشبه لغة Lisp لتوسيع GCC. [ 70 ]
كان دعم الإضافات قضية مثيرة للجدل في عام 2007. [ 71 ]
ذاكرة المعاملات في لغة C++
تتضمن لغة C++ اقتراحًا فعالًا للذاكرة المعاملاتية. ويمكن تفعيلها في GCC 6 والإصدارات الأحدث عند التجميع باستخدام [ 7 ] [ 72 ]-fgnu-tm .
معرّفات يونيكود
على الرغم من أن لغة C++ تتطلب دعم أحرف Unicode غير ASCII في المعرّفات ، إلا أن هذه الميزة لم تُدعم إلا منذ إصدار GCC 10. وكما هو الحال مع التعامل الحالي مع السلاسل النصية، يُفترض أن ملف المصدر مُشفّر بنظام UTF-8 . هذه الميزة اختيارية في لغة C، ولكنها أصبحت متاحة أيضًا منذ هذا التغيير. [ 73 ] [ 74 ]
امتدادات لغة C
تُوسّع لغة GNU C لغة البرمجة C بالعديد من الميزات غير القياسية، بما في ذلك الدوال المتداخلة . [ 75 ]

الهندسة المعمارية

تجميع برنامج Hello World باستخدام GCC على نظام التشغيل Windows

عائلات المعالجات الأساسية المدعومة (والتي تم اختبارها بشكل أفضل) هي ARM 64 و 32 بت ، و x86 64 و 32 بت، و PowerPC و SPARC 64 و x86 و 64 بت . [ 76 ]

تتضمن عائلات المعالجات المستهدفة لـ GCC اعتبارًا من الإصدار 11.1 ما يلي: [ 77 ]

تضمنت المعالجات المستهدفة الأقل شهرة المدعومة في الإصدار القياسي ما يلي:

تم دعم معالجات إضافية بواسطة إصدارات GCC التي يتم الاحتفاظ بها بشكل منفصل عن إصدار FSF:

يمكن لمترجم GCJ Java استهداف بنية لغة الآلة الأصلية أو بايت كود Java الخاص بآلة Java الافتراضية . [ 80 ] عند إعادة توجيه GCC إلى منصة جديدة، غالبًا ما يُستخدم التمهيد . كما تستهدف إصدارات GCC المطورة لآلات حاسبة بيانية قابلة للبرمجة من Texas Instruments وHewlett Packard وSharp وCasio معالجات Motorola 68000 وZilog Z80 وغيرها. [ 81 ]

رخصة

يُرخَّص برنامج GCC بموجب رخصة جنو العمومية العامة الإصدار 3. [ 82 ] يسمح استثناء وقت تشغيل GCC بتجميع البرامج الاحتكارية (بالإضافة إلى البرامج الحرة) باستخدام رؤوس GCC ومكتبات وقت التشغيل. ولا يؤثر هذا على شروط ترخيص شفرة مصدر GCC. [ 83 ]

إلا أن هذا الاستثناء محدود. فعلى سبيل المثال، عند استخدام برامج غير متوافقة مع رخصة جنو العمومية (GPL) مع مُجمِّع GCC ضمن عملية التجميع ، يصبح الالتزام برخصة جنو العمومية الإصدار الثالث (GPLv3) لجميع أكواد الكائنات المُولَّدة بواسطة مُجمِّع GCC إلزاميًا، لأنها مُشتقة من المكتبات المرخصة بموجب رخصة جنو العمومية . [ 84 ]

انظر أيضاً

مراجع

  1. 1 2 "إصدارات GCC" . مشروع جنو. مؤرشف من الأصل في 4 يونيو 2023. تم الاطلاع عليه في 24 يوليو 2020 .
  2. ريتشارد بينر (30 أبريل 2026). "إصدار GCC 16.1" . تم الاطلاع عليه بتاريخ 30 أبريل 2026 .
  3. "اتفاقيات ترميز GCC - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 28 مايو 2023. تم الاطلاع عليه في 7 فبراير 2022 .
  4. 1 2 فيكتور رودريغيز (1 أكتوبر 2019). "مجموعة أدوات متطورة (أحدث الميزات في GCC/GLIBC)" . youtube.com . مؤسسة لينكس. مؤرشف من الأصل في 7 نوفمبر 2021. تم الاسترجاع في 19 يناير 2021 .
  5. "استثناء مكتبة وقت تشغيل GCC" . مؤرشف من الأصل في 31 مارس 2023. تم الاطلاع عليه في 24 يوليو 2020 .
  6. 1 2 3 "واجهات GCC الأمامية" . مشروع جنو. مؤرشف من الأصل في 13 فبراير 2026. تم الاسترجاع في 13 فبراير 2026 .
  7. 1 2 "سلسلة إصدارات GCC 6 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 22 سبتمبر 2016. تم الاطلاع عليه في 19 سبتمبر 2016 .
  8. 1 2 "OpenACC - GCC Wiki" . gcc.gnu.org . مؤرشف من الأصل في 1 أبريل 2015. تم الاطلاع عليه في 19 سبتمبر 2016 .
  9. "مشروع البنية التحتية لمترجم LLVM" . llvm.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 24 سبتمبر 2021 .
  10. "حذف أبل لرخصة GPLv3" . meta.ath0.com . 5 فبراير 2012. مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 12 يناير 2021 .
  11. لينمان، ريد (20 يونيو 2012). "لماذا كلانغ؟" . مؤرشف من الأصل في 18 يناير 2023. تم الاسترجاع في 12 يناير 2021 .
  12. "29 أغسطس 2007: نشرة مؤسسة FreeBSD، 29 أغسطس 2007" . 11 أكتوبر 2007. مؤرشف من الأصل في 11 أكتوبر 2007. تم الاطلاع عليه في 12 يناير 2021 .
  13. "تثبيت GCC: الملفات الثنائية - مشروع جنو - مؤسسة البرمجيات الحرة (FSF)" . gcc.gnu.org . مؤرشف من الأصل في 5 يناير 2021. تم الاطلاع عليه في 12 يناير 2021 .
  14. ^ فون هاغن، ويليام (2006). الدليل النهائي لدول مجلس التعاون الخليجي . أدلة نهائية ( الطبعة الثانية). Apress. ص. السابع والعشرون. رقم ISBN   978-1-4302-0219-6أُرشف من الأصل في 5 أبريل 2024. تم الاطلاع عليه في 25 سبتمبر 2020. لذلك راسل مؤلف VUCK مستفسرًا عما إذا كان بإمكان GNU استخدامه. من الواضح أن مطور VUCK لم يتعاون، إذ رد بأن الجامعة مجانية لكن المترجم ليس كذلك .
  15. ١ ٢ ٣ ستالمان، ريتشارد (٢٠ سبتمبر ٢٠١١). "حول مشروع جنو" . مشروع جنو. مؤرشف من الأصل في ٩ أغسطس ٢٠١٩. تم الاطلاع عليه في ٩ أكتوبر ٢٠١١ .
  16. بوزو، جيروم إي، محرر. (فبراير 1986). "حديقة حيوانات جنو" . نشرة جنو . 1 (1). مؤسسة البرمجيات الحرة. مؤرشف من الأصل في 23 يونيو 2015. تم الاسترجاع في 11 أغسطس 2007 .
  17. 1 2 3 4 فون هاغن، ويليام (2006). الدليل النهائي لدول مجلس التعاون الخليجي . أدلة نهائية ( الطبعة الثانية). Apress. ص. السابع والعشرون. رقم ISBN   978-1-4302-0219-6أُرشف من الأصل في 5 أبريل 2024. تم الاطلاع عليه في 25 سبتمبر 2020 .
  18. ريتشارد م. ستالمان (أعاد توجيهها ليونارد هـ. تاور الابن) (22 مارس 1987). "إصدار تجريبي لمترجم لغة سي من جنو" . مجموعة الأخبار : comp.lang.c. مؤرشف من الأصل في 2 يونيو 2013. تم الاطلاع عليه في 9 أكتوبر 2011 . 
  19. ستالمان، ريتشارد م. (22 يونيو 2001) [نُشر لأول مرة عام 1988]، "المساهمون في GNU CC" ، استخدام ونقل مجموعة مترجمات GNU (GCC) ، مؤسسة البرمجيات الحرة، ص مؤرشفة من الأصل في 18 يناير 2023 ، تم استرجاعها في 18 يونيو 2015 . 
  20. سالوس، بيتر هـ. (2005). "الفصل العاشر: SUN و gcc" . The Daemon, the Gnu and the Penguin . Groklaw . مؤرشف من الأصل في 20 يونيو 2022. تم الاطلاع عليه في 14 سبتمبر 2015 .
  21. غارفينكل، سيمسون ل. (6 أغسطس 1990). "استعد لبرمجيات جنو" . كمبيوتر وورلد . ص 102. 
  22. 1 2 هينكل-والاس، ديفيد (15 أغسطس 1997)، مشروع مترجم جديد لدمج فروع GCC الحالية ، مؤرشف من الأصل في 18 يناير 2023 ، تم استرجاعه في 25 مايو 2012 .
  23. "نبذة تاريخية عن تطور دول مجلس التعاون الخليجي" . www.softpanorama.org . مؤرشف من الأصل في 9 نوفمبر 2022. تم الاطلاع عليه في 24 يناير 2021 .
  24. "التاريخ - ويكي GCC" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 28 سبتمبر 2020 .
  25. "لجنة توجيه GCC - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  26. "PATCH ] إزالة chill" . gcc.gnu.org . مؤرشف من الأصل في 20 أكتوبر 2016. تم الاسترجاع في 29 يوليو 2010 .
  27. "مخطط ميزات فورتران 2003 المدعومة من قبل جنو فورتران" . جنو . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يونيو 2009 .
  28. "مخطط ميزات فورتران 2008 المدعومة من قبل جنو فورتران" . جنو . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يونيو 2009 .
  29. "سلسلة إصدارات GCC 4.8 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 8 ديسمبر 2015. تم الاطلاع عليه في 17 فبراير 2015 .
  30. "سلسلة إصدارات GCC 5 - التغييرات والميزات الجديدة والإصلاحات" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 13 يناير 2022 .
  31. "سلسلة إصدارات GCC 8 - التغييرات والميزات الجديدة والإصلاحات" . gcc.gnu.org . مؤرشف من الأصل في 29 نوفمبر 2018. تم الاطلاع عليه في 13 يناير 2022 .
  32. "مشروع تحسين نظام Symbian GCC" . مؤرشف من الأصل في 1 أغسطس 2014. تم الاطلاع عليه في 8 نوفمبر 2007 .
  33. "حزم دعم لوحات لينكس" . مؤرشف من الأصل في 7 يونيو 2011. تم الاطلاع عليه في 24 يناير 2021 .
  34. "إعداد gcc كمترجم متقاطع" . ps2stuff . 8 يونيو 2002. مؤرشف من الأصل في 11 ديسمبر 2008. تم الاسترجاع في 12 ديسمبر 2008 .
  35. "CompileFarm - GCC Wiki" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 19 سبتمبر 2016 .
  36. "دليل sh4 g++" . مؤرشف من الأصل في 20 ديسمبر 2002. تم الاطلاع عليه في 12 ديسمبر 2008 .
  37. "مشروع معلومات لينكس" . LINFO. مؤرشف من الأصل في 3 يناير 2023. تم الاطلاع عليه في 27 أبريل 2010. تم نقل مُجمِّع GCC إلى (أي تعديله ليعمل على) أكثر من 60 منصة، وهو عدد يفوق أي مُجمِّع آخر.
  38. "سلسلة إصدارات GCC 9 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . مؤرشف من الأصل في 19 فبراير 2022. تم الاطلاع عليه في 7 مايو 2019 .
  39. "دمج واجهة لغة D الأمامية أخيرًا في GCC 9 - Phoronix" . phoronix.com . مؤرشف من الأصل في 17 مايو 2022. تم الاطلاع عليه في 19 يناير 2021 .
  40. "سلسلة إصدارات GCC 13 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . مؤرشف من الأصل في 26 مايو 2023. تم الاطلاع عليه في 23 يونيو 2023 .
  41. بروفن، ليام (16 ديسمبر 2022). "GCC 13 يدعم Modula-2: متابعة Pascal مستمرة في شكل برمجيات حرة ومفتوحة المصدر" . مؤرشف من الأصل في 19 ديسمبر 2022. تم الاطلاع عليه في 19 ديسمبر 2022 .
  42. "سلسلة إصدارات GCC 5 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 23 أبريل 2015 .
  43. "سلسلة إصدارات GCC 7" . gnu.org. مؤرشف من الأصل في 2 سبتمبر 2020. تم الاطلاع عليه في 20 مارس 2018 .
  44. "GCC UPC (GCC Unified Parallel C)" . شركة Intrepid Technology، 20 فبراير 2006. مؤرشف من الأصل في 11 فبراير 2010. تم الاطلاع عليه في 11 مارس 2009 .
  45. سبينغلر، براد (12 يناير 2021). "شركة Open Source Security تعلن عن تمويل واجهة GCC الأمامية للغة Rust" . مؤرشف من الأصل في 25 أبريل 2021.
  46. "دعم معايير لغة C++ في GCC" . مؤرشف من الأصل في 20 أبريل 2022. تم الاطلاع عليه في 17 مايو 2021 .
  47. إصدار GCC 16.1 مع دعم AMD Zen 6، وAlgol 68، والعديد من التحسينات على لغة C++ ، بقلم مايكل لارابيل. phoronix.com. 30 أبريل 2026. تاريخ الاطلاع: 30 أبريل 2026.
  48. سلسلة إصدارات GCC 16 ، gcc.gnu.org. 30 أبريل 2026. تم الاطلاع عليه في 30 أبريل 2026.
  49. "ميزات الأمان: فحوصات المخزن المؤقت أثناء الترجمة (FORTIFY_SOURCE)" . fedoraproject.org. مؤرشف من الأصل في 7 يناير 2007. تم الاطلاع عليه في 11 مارس 2009 .
  50. "اللغات المستخدمة في تطوير GCC" . مؤرشف من الأصل في 27 مايو 2008. تم الاطلاع عليه في 14 سبتمبر 2008 .
  51. "GCC Internals" . GCC.org. مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 1 مارس 2010 .
  52. "المتطلبات الأساسية لـ GCC - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 5 سبتمبر 2021 .
  53. "يسمح GCC باستخدام لغة C++ - إلى حد ما" . صحيفة ذا إتش . 1 يونيو 2010. مؤرشف من الأصل في 26 سبتمبر 2022. تم الاطلاع عليه في 9 يونيو 2010 . 
  54. "ردًا على: جهود لجذب المزيد من المستخدمين؟" . lists.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 24 سبتمبر 2021 .
  55. "سلسلة إصدارات GCC 4.8: التغييرات والميزات الجديدة والإصلاحات" . مؤرشف من الأصل في 8 ديسمبر 2015. تم الاطلاع عليه في 4 أكتوبر 2013 .
  56. "bootstrap: تحديث المتطلبات إلى C++11" . GitHub . مؤرشف من الأصل في 29 سبتمبر 2022. تم الاطلاع عليه في 18 مايو 2020 .
  57. "سلسلة إصدارات GCC 3.4 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  58. "سلسلة إصدارات GCC 4.1 - التغييرات والميزات الجديدة والإصلاحات - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  59. "GENERIC (GNU Compiler Collection (GCC) Internals)" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  60. "GIMPLE (مجموعة مترجمات GNU (GCC) الداخلية)" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  61. "McCAT" . مؤرشف من الأصل في 12 أغسطس 2004. تم الاطلاع عليه في 14 سبتمبر 2017 .
  62. "الصفحة الرئيسية للوري هندري" . www.sable.mcgill.ca . مؤرشفة من الأصل في 27 سبتمبر 2022. تم الاطلاع عليها في 20 يوليو 2009 .
  63. نوفيلو، دييغو (ديسمبر 2004). "من المصدر إلى الثنائي: العمليات الداخلية لـ GCC" . مجلة ريد هات . مؤرشف من الأصل في 1 أبريل 2009.
  64. "تثبيت GCC: البناء - مشروع جنو" . gcc.gnu.org . مؤرشف من الأصل في 22 أغسطس 2023. تم الاطلاع عليه في 25 يوليو 2016 .
  65. "مكتبة GNU C++" . مشروع GNU. مؤرشف من الأصل في 25 ديسمبر 2022. تم الاطلاع عليه في 21 فبراير 2021 .
  66. "الترخيص" . مشروع جنو. مؤرشف من الأصل في 18 يناير 2023. تم الاسترجاع في 21 فبراير 2021 .
  67. "سياسة وإرشادات ABI" . gcc.gnu.org . تم الاطلاع عليه بتاريخ 11 نوفمبر 2025 .
  68. "الإضافات" . وثائق GCC على الإنترنت . مؤرشفة من الأصل في 30 أبريل 2013. تم الاطلاع عليها في 8 يوليو 2013 .
  69. ستارنكيفيتش، باسيل. "إضافات GCC من خلال مثال MELT" (ملف PDF) . مؤرشف (PDF) من الأصل في 13 أبريل 2014. تم الاطلاع عليه في 10 أبريل 2014 .
  70. "حول برنامج GCC MELT" . مؤرشف من الأصل بتاريخ 25 سبتمبر 2013. تم الاطلاع عليه بتاريخ 8 يوليو 2013 .
  71. كوربيت، جوناثان (19 نوفمبر 2007). "GCC unplugged [ LWN.net ] " . lwn.net . مؤرشف من الأصل في 9 نوفمبر 2020. تم الاطلاع عليه في 28 مارس 2021 .
  72. "الذاكرة التفاعلية - ويكي GCC" . gcc.gnu.org . مؤرشف من الأصل في 19 أغسطس 2016. تم الاطلاع عليه في 19 سبتمبر 2016 .
  73. "لويس هايات - [ رقعة ] wwwdocs: تمت إضافة دعم المستندات للمعرفات الموسعة إلى GCC" . gcc.gnu.org . مؤرشف من الأصل في 27 مارس 2020. تم الاطلاع عليه في 27 مارس 2020 .
  74. «توصيات بشأن أحرف المعرفات الموسعة للغتين C و C++» . www.open-std.org . مؤرشف من الأصل في 30 سبتمبر 2020. تم الاطلاع عليه في 27 مارس 2020 .
  75. "امتدادات لغة C (باستخدام مجموعة مترجمات GNU (GCC))" . gcc.gnu.org . مؤرشف من الأصل في 12 يناير 2022. تم الاطلاع عليه في 12 يناير 2022 .
  76. "معايير إصدار GCC 12" . gcc.gnu.org . 26 أكتوبر 2022. مؤرشف من الأصل في 27 يناير 2023. تم الاطلاع عليه في 27 يناير 2023 .
  77. "ملخص الخيارات (باستخدام مجموعة مترجمات جنو (GCC))" . gcc.gnu.org . مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 21 أغسطس 2020 .
  78. "ويكي مشروع هيكساغون" . مؤرشف من الأصل في 23 مارس 2012. تم الاطلاع عليه في 19 مايو 2011 .
  79. "أرشيف جوجل كود - تخزين طويل الأمد لاستضافة مشاريع جوجل كود" . code.google.com . مؤرشف من الأصل في 25 سبتمبر 2022. تم الاطلاع عليه في 24 سبتمبر 2021 .
  80. "مترجم جنو للغة برمجة جافا" . مؤرشف من الأصل في 9 مايو 2007. تم الاطلاع عليه في 22 أبريل 2010 .
  81. آلات حاسبة بيانية#برمجة
  82. "استخدام مجموعة مترجمات جنو" . gnu.org . مؤرشف من الأصل في 16 نوفمبر 2023. تم الاطلاع عليه في 5 نوفمبر 2019 .
  83. "استثناء وقت تشغيل GCC" . مؤسسة البرمجيات الحرة. مؤرشف من الأصل في 16 أبريل 2014. تم الاطلاع عليه في 10 أبريل 2014 .
  84. " مبررات استثناء مكتبة وقت تشغيل GCC والأسئلة الشائعة - مشروع جنو - مؤسسة البرمجيات الحرة" . www.gnu.org . مؤسسة البرمجيات الحرة . قسم "كيفية عمل الاستثناء". مؤرشف من الأصل في 25 يوليو 2025. تم الاسترجاع في 31 يوليو 2025. كيفية عمل الاستثناء (...) لديك الإذن بنشر عمل من التعليمات البرمجية المستهدفة المُشكَّلة من خلال دمج مكتبة وقت التشغيل مع الوحدات المستقلة، حتى لو كان هذا النشر سيخالف شروط رخصة جنو العمومية الإصدار 3، شريطة أن تكون جميع التعليمات البرمجية المستهدفة قد تم إنشاؤها بواسطة عمليات تجميع مؤهلة. يمكنك بعد ذلك نقل هذا المزيج بموجب الشروط التي تختارها، بما يتوافق مع ترخيص الوحدات المستقلة. (...) ومع ذلك، إذا استخدمتَ GCC بالتزامن مع برامج غير متوافقة مع رخصة جنو العمومية أثناء عملية تحويل التعليمات البرمجية عالية المستوى إلى تعليمات برمجية منخفضة المستوى، فلن تكون هذه عملية تجميع مؤهلة. سيحدث هذا، على سبيل المثال، إذا استخدمتَ GCC مع مكون إضافي احتكاري. (...) طالما أنك تستخدم عملية تجميع مؤهلة، فلديك إذنٌ بأخذ الكود المستهدف الذي يُولّده GCC ونشره "وفقًا للشروط التي تختارها". إذا استخدمتَ برامج غير متوافقة مع رخصة GPL بالتزامن مع GCC أثناء عملية التجميع، فلن تتمكن من الاستفادة من هذا الإذن. بما أن جميع أكواد الكائنات التي يُولّدها GCC مُشتقة من هذه المكتبات المرخصة بموجب رخصة GPL، فهذا يعني أنه سيتعين عليك اتباع شروط رخصة GPL عند نشر أيٍّ من أكواد الكائنات هذه. لا يمكنك استخدام GCC لتطوير برامجك الخاصة غير المتوافقة مع رخصة GPL.

للمزيد من القراءة

رسمي

آخر