LLVM

LLVM هي مجموعة من تقنيات المترجمات وسلاسل الأدوات [ 5 ] التي يمكن استخدامها لتطوير واجهة أمامية لأي لغة برمجة وواجهة خلفية لأي بنية مجموعة تعليمات . صُممت LLVM حول تمثيل وسيط مستقل عن اللغة (IR) يعمل كلغة تجميع عالية المستوى قابلة للنقل ، ويمكن تحسينها من خلال مجموعة متنوعة من التحويلات عبر مراحل متعددة. [ 6 ] كان اسم LLVM في الأصل اختصارًا لـ Low Level Virtual Machine (الآلة الافتراضية منخفضة المستوى). ومع ذلك، توسع المشروع منذ ذلك الحين، ولم يعد الاسم اختصارًا بل اختصارًا مستقلًا . [ 7 ]

تمت كتابة LLVM بلغة C++ وهي مصممة لتحسين وقت الترجمة ووقت الربط ووقت التشغيل . تم تنفيذ LLVM في الأصل للغتين C و C++، ومنذ ذلك الحين، أدى تصميمه غير المرتبط بلغة معينة إلى ظهور مجموعة واسعة من واجهات المستخدم الأمامية: تشمل اللغات التي تستخدم مُجمِّعات LLVM (أو التي لا تستخدم LLVM بشكل مباشر ولكنها قادرة على توليد برامج مُجمَّعة بصيغة LLVM IR) ما يلي: ActionScript ، و Ada ، و C # لـ .NET ، و Common Lisp ، و Crystal ، و CUDA ، و D ، و Delphi ، و Dylan ، و Forth ، و Fortran ، و FreeBASIC ، و Free Pascal ، و Halide ، و Haskell ، و Idris ، و Jai ( فقط لإصدارات البرامج المُحسَّنة)، و Java bytecode ، و Julia ، و Kotlin ، ولغة G الخاصة بـ LabVIEW ، و Objective - C ، OpenCL ، [ 19 ] Odin ، [ 20 ] PicoLisp ، SQL و PL/pgSQL الخاصة بـ PostgreSQL ، [ 21 ] Ruby ، ​​[ 22 ] Rust ، [ 23 ] Scala ، [ 24 ] [ 25 ] Standard ML ، [ 26 ] Swift ، Wolfram Language ، [ 27 ] Xojo ، و Zig .

تاريخ

بدأ مشروع LLVM في عام 2000 بجامعة إلينوي في أوربانا-شامبين ، تحت إشراف فيكرام أدفي وكريس لاتنر . طُوّر LLVM في الأصل كبنية تحتية بحثية لدراسة تقنيات الترجمة الديناميكية للغات البرمجة الثابتة والديناميكية . صدر LLVM بموجب ترخيص المصادر المفتوحة لجامعة إلينوي/المركز الوطني للحوسبة الفائقة (NCSA) ، [ 3 ] وهو ترخيص برمجيات حرة متساهل . في عام 2005، وظّفت شركة آبل لاتنر وشكّلت فريقًا للعمل على نظام LLVM لاستخدامات متنوعة ضمن أنظمة تطوير آبل. [ 28 ] أصبح LLVM جزءًا لا يتجزأ من أدوات تطوير Xcode من آبل لأنظمة macOS و iOS منذ إصدار Xcode 4 في عام 2011. [ 29 ]

في عام 2006، بدأ لاتنر العمل على مشروع جديد يُدعى كلانغ . ويُطلق على مزيج واجهة كلانغ الأمامية وواجهة LLVM الخلفية اسم كلانغ/LLVM أو ببساطة كلانغ.

كان اسم LLVM في الأصل اختصارًا لعبارة Low Level Virtual Machine (الآلة الافتراضية منخفضة المستوى) . إلا أن مشروع LLVM تطور ليصبح مشروعًا شاملًا لا يرتبط كثيرًا بما يعتبره معظم المطورين الحاليين آلة افتراضية . وقد جعل هذا الاختصار "مُربكًا" و"غير مناسب"، ومنذ عام 2011، لم يعد LLVM "اختصارًا رسميًا" [ 30 ] ، بل أصبح علامة تجارية تُطلق على مشروع LLVM الشامل. [ 31 ] يشمل المشروع تمثيل LLVM الوسيط (IR)، ومصحح أخطاء LLVM ، وتطبيق LLVM لمكتبة C++ القياسية (مع دعم كامل لـ C++11 و C++14 [ 32 ] )، وغير ذلك. تُدير مؤسسة LLVM مشروع LLVM. تولت مهندسة المترجمات تانيا لاتنر رئاسة المؤسسة عام 2014 [ 33 ] ، وظلت رئيسة ومديرة تنفيذية لها حتى يوليو 2026. [ 34 ]

"لتصميم وتنفيذ LLVM" ، منحت جمعية آلات الحوسبة فيكرام أدفي، وكريس لاتنر، وإيفان تشينغ جائزة نظام البرمجيات لعام 2012. [ 35 ]

كان المشروع متاحًا في الأصل بموجب ترخيص جامعة إلينوي في أوربانا-شامبين . بعد إصدار النسخة 9.0.0 في عام 2019، [ 36 ] أعيد ترخيص LLVM إلى ترخيص أباتشي 2.0 مع استثناءات LLVM. [ 3 ] اعتبارًا من نوفمبر 2022 لم يتم تجديد ترخيص حوالي 400 مساهمة. [ 37 ] [ 38 ]

سمات

يُمكن لـ LLVM توفير الطبقات الوسطى لنظام مُترجم كامل، حيث يأخذ رمز التمثيل الوسيط (IR) من المُترجم ويُصدر رمز IR مُحسّن. يُمكن بعد ذلك تحويل رمز IR الجديد وربطه برمز لغة التجميع الخاص بالجهاز لمنصة مُستهدفة. يُمكن لـ LLVM قبول رمز IR من مجموعة أدوات GNU Compiler Collection (GCC) ، مما يسمح باستخدامه مع مجموعة واسعة من واجهات المُترجمات الأمامية الموجودة والمكتوبة لهذا المشروع. يُمكن أيضًا بناء LLVM باستخدام gcc بعد الإصدار 7.5. [ 39 ]

يمكن لـ LLVM أيضًا توليد رمز آلة قابل للنقل في وقت الترجمة أو وقت الربط أو حتى رمز آلة ثنائي في وقت التشغيل.

يدعم LLVM مجموعة تعليمات ونظام أنواع مستقلين عن اللغة . [ 6 ] تأتي كل تعليمة بصيغة إسناد ثابت أحادي (SSA)، ما يعني أن كل متغير (يُسمى سجلًا مُحدد النوع) يُسند إليه قيمة مرة واحدة ثم يُجمد. يُسهّل هذا تحليل التبعيات بين المتغيرات. يسمح LLVM بتجميع الشيفرة بشكل ثابت، كما هو الحال في نظام GCC التقليدي، أو تركها للتجميع المتأخر من لغة الوسيط (IR) إلى شيفرة الآلة عبر التجميع الفوري (JIT)، على غرار Java . يتكون نظام الأنواع من أنواع أساسية مثل الأعداد الصحيحة أو العشرية، وخمسة أنواع مشتقة : المؤشرات ، والمصفوفات ، والمتجهات ، والهياكل ، والدوال . يمكن تمثيل بنية نوع في لغة محددة بدمج هذه الأنواع الأساسية في LLVM. على سبيل المثال، يمكن تمثيل فئة في C++ بمزيج من الهياكل والدوال ومصفوفات مؤشرات الدوال .

يُمكن لمُترجم LLVM JIT تحسين الفروع الثابتة غير الضرورية في البرنامج أثناء التشغيل، مما يجعله مفيدًا للتقييم الجزئي في الحالات التي يحتوي فيها البرنامج على العديد من الخيارات، والتي يُمكن تحديد معظمها بسهولة على أنها غير ضرورية في بيئة مُحددة. تُستخدم هذه الميزة في مسار OpenGL لنظام التشغيل Mac OS X Leopard (الإصدار 10.5) لتوفير الدعم لميزات الأجهزة المفقودة. [ 40 ]

يمكن ترك كود الرسومات ضمن حزمة OpenGL في تمثيل وسيط، ثم تجميعه عند تشغيله على الجهاز المستهدف. في الأنظمة المزودة بوحدات معالجة رسومات عالية الأداء (GPUs)، يظل الكود الناتج بسيطًا، حيث يمرر التعليمات إلى وحدة معالجة الرسومات بأقل قدر من التغييرات. أما في الأنظمة المزودة بوحدات معالجة رسومات منخفضة الأداء، فيقوم LLVM بتجميع الإجراءات الاختيارية التي تعمل على وحدة المعالجة المركزية المحلية (CPU) لمحاكاة التعليمات التي لا تستطيع وحدة معالجة الرسومات تنفيذها داخليًا. وقد حسّن LLVM الأداء على الأجهزة منخفضة الأداء التي تستخدم شرائح Intel GMA . تم تطوير نظام مشابه ضمن Gallium3D LLVMpipe، وتم دمجه في واجهة GNOME للسماح بتشغيله دون تحميل برنامج تشغيل أجهزة ثلاثية الأبعاد مناسب. [ 41 ]

في عام 2011، تفوقت البرامج المُجمَّعة بواسطة GCC على تلك المُجمَّعة بواسطة LLVM بنسبة 10% في المتوسط. [ 42 ] [ 43 ] وفي عام 2013، أفادت شركة phoronix بأن LLVM قد لحقت بـ GCC، حيث قامت بتجميع ملفات ثنائية ذات أداء متقارب. [ 44 ]

عناصر

أصبح مشروع LLVM مشروعًا شاملاً يحتوي على مكونات متعددة.

واجهات المستخدم

كُتب LLVM في الأصل ليكون بديلاً لمولد الشفرة الحالي في حزمة GCC، [ 45 ] وقد عُدّلت العديد من واجهات GCC الأمامية للعمل معه، مما أدى إلى ظهور حزمة LLVM-GCC التي لم تعد مستخدمة. تضمنت التعديلات عمومًا خطوة تحويل من GIMPLE إلى LLVM IR بحيث يمكن استخدام مُحسِّنات LLVM ومولد الشفرة بدلاً من نظام GIMPLE الخاص بـ GCC. كانت Apple من أبرز مستخدمي LLVM-GCC حتى إصدار Xcode 4.x (2013). [ 46 ]

اعتُبر استخدام واجهة GCC الأمامية إجراءً مؤقتًا؛ إذ أصبح متقادمًا إلى حد كبير مع تطوير Apple لـ Clang ، وهي واجهة أمامية أحدث للمترجم، تتميز بقاعدة بيانات معيارية أكثر حداثة وسرعة ترجمة أعلى، وتدعم لغات C و C++ و Objective-C . وقد أُسقط دعم LLVM-GCC في Xcode 5. [ 47 ] كان الهدف من Clang، المدعوم بشكل أساسي من Apple، استبدال مترجم C/Objective-C في نظام GCC بنظام يسهل دمجه مع بيئات التطوير المتكاملة (IDEs) ويدعم تعدد الخيوط على نطاق أوسع. وقد أُضيف دعم توجيهات OpenMP إلى Clang منذ الإصدار 3.8. [ 48 ]

وقد أدى الاهتمام الواسع النطاق بـ LLVM إلى بذل العديد من الجهود لتطوير واجهات أمامية جديدة للعديد من اللغات الأخرى، بما في ذلك Ada و D و Delphi و Fortran و Haskell و Julia و Rust و Swift وغيرها .

يستطيع مُصرّف لغة هاسكل في أوتريخت توليد شيفرة برمجية لـ LLVM. ورغم أن المُولّد كان في مراحله التطويرية الأولى، إلا أنه كان في كثير من الحالات أكثر كفاءة من مُولّد شيفرة C. [ 49 ] يستخدم مُصرّف غلاسكو هاسكل (GHC) الخلفي LLVM، ويحقق تسريعًا بنسبة 30% في الشيفرة المُصرّفة مقارنةً بتصريف الشيفرة الأصلية عبر GHC أو توليد شيفرة C متبوعًا بالتصريف، مع غياب تقنية واحدة فقط من تقنيات التحسين العديدة التي يُطبّقها GHC. [ 50 ]

توجد العديد من المكونات الأخرى في مراحل مختلفة من التطوير، بما في ذلك على سبيل المثال لا الحصر، واجهة أمامية لرمز بايت جافا ، وواجهة أمامية للغة الوسيطة المشتركة (CIL)، وتنفيذ MacRuby للغة روبي 1.9، وواجهات أمامية متنوعة للغة Standard ML ، ومخصص سجلات تلوين الرسوم البيانية الجديد .

التمثيل الوسيط

تُستخدم LLVM IR، على سبيل المثال، بواسطة radeonsi وllvmpipe. وكلاهما جزء من Mesa 3D .

جوهر LLVM هو التمثيل الوسيط (IR)، وهي لغة برمجة منخفضة المستوى تشبه لغة التجميع. IR عبارة عن مجموعة تعليمات حاسوبية مُصغّرة ذات كتابة قوية (RISC)، تُجرّد معظم تفاصيل البرنامج المستهدف. على سبيل المثال، يتم تجريد اصطلاح الاستدعاءcall من خلال تعليمات retذات وسائط صريحة. كذلك، بدلاً من مجموعة ثابتة من المسجلات، يستخدم IR مجموعة لا نهائية من المتغيرات المؤقتة على شكل %0، %1، إلخ. يدعم LLVM ثلاثة أشكال متكافئة من IR: صيغة تجميع قابلة للقراءة البشرية، [ 51 ] وصيغة في الذاكرة مناسبة للواجهات الأمامية، وصيغة رمز بت كثيف للتسلسل. مثال على برنامج "Hello, world!" بسيط بصيغة IR القابلة للقراءة البشرية:

@.str = ثابت داخلي [ 14 x i8 ] c "Hello, world\0A\00"declare i32 @printf ( ptr , ...)define i32 @main ( i32 %argc , ptr %argv ) nounwind { entry: %tmp1 = getelementptr [ 14 x i8 ], ptr @.str , i32 0 , i32 0 %tmp2 = call i32 ( ptr , ...) @printf ( ptr %tmp1 ) nounwind ret i32 0 }

بسبب تعدد الاتفاقيات المستخدمة والميزات التي توفرها الأهداف المختلفة، لا يستطيع LLVM إنتاج وسيط برمجي مستقل تمامًا عن الهدف وإعادة توجيهه دون الإخلال ببعض القواعد الراسخة. ويمكن إيجاد أمثلة على اعتمادية الهدف، تتجاوز ما هو مذكور صراحةً في الوثائق، في اقتراح عام 2011 لـ "wordcode"، وهو نسخة مستقلة تمامًا عن الهدف من وسيط LLVM البرمجي، مُخصصة للتوزيع عبر الإنترنت. [ 52 ] ومن الأمثلة العملية الأخرى PNaCl . [ 53 ]

يُقدّم مشروع LLVM أيضًا نوعًا آخر من التمثيل الوسيط يُسمى MLIR [ 54 ] ، والذي يُساعد في بناء بنية تحتية قابلة لإعادة الاستخدام والتوسيع للمُترجم من خلال استخدام بنية إضافية تُسمى Dialect [ 55 ] . ويُمكّن هذا من استخدام معلومات عالية المستوى حول بنية البرنامج في عملية التحسين، بما في ذلك الترجمة متعددة السطوح .

الخوادم الخلفية

في الإصدار 16، يدعم LLVM العديد من مجموعات التعليمات ، بما في ذلك IA-32 و x86-64 و ARM و Qualcomm Hexagon و LoongArch و M68K و MIPS و NVIDIA Parallel Thread Execution (PTX، ويسمى أيضًا NVPTX في وثائق LLVM) و PowerPC و AMD TeraScale و [ 56 ] أحدث وحدات معالجة الرسومات AMD (يسمى أيضًا AMDGPU في وثائق LLVM) و [ 57 ] SPARC و z/Architecture (يسمى أيضًا SystemZ في وثائق LLVM) و XCore .

بعض الميزات غير متوفرة على بعض المنصات. معظم الميزات متوفرة لأنظمة IA-32 و x86-64 و z/Architecture و ARM و PowerPC. [ 58 ] يدعم النظام معمارية RISC-V بدءًا من الإصدار 7.

في الماضي، كان LLVM يدعم أيضًا واجهات خلفية أخرى، كليًا أو جزئيًا، بما في ذلك واجهة C الخلفية، و Cell SPU ، وmblaze (MicroBlaze) ، [ 59 ] و AMD R600، وDEC/Compaq Alpha ( Alpha AXP ) [ 60 ] و Nios2 ، [ 61 ] ولكن هذه الأجهزة أصبحت قديمة في الغالب، وقرر مطورو LLVM أن تكاليف الدعم والصيانة لم تعد مبررة.

يدعم LLVM أيضًا WebAssembly كهدف، مما يُمكّن البرامج المُجمّعة من العمل في بيئات تدعم WebAssembly مثل Google Chrome / Chromium و Firefox و Microsoft Edge و Apple Safari أو WAVM . وتدعم مُجمّعات WebAssembly المتوافقة مع LLVM عادةً شفرة المصدر المكتوبة بلغات C وC++ وD وRust وNim وKotlin والعديد من اللغات الأخرى، دون تعديل يُذكر.

يُعد مشروع LLVM الفرعي لرمز الآلة (MC) إطار عمل LLVM لترجمة تعليمات الآلة بين النصوص ورمز الآلة. سابقًا، كان LLVM يعتمد على مُجمِّع النظام، أو مُجمِّع مُقدَّم من سلسلة أدوات، لترجمة لغة التجميع إلى رمز الآلة. يدعم مُجمِّع LLVM MC المُدمج مُعظم مُستهدفات LLVM، بما في ذلك IA-32 وx86-64 وARM وARM64. بالنسبة لبعض المُستهدفات، بما في ذلك مجموعات تعليمات MIPS المُختلفة، فإن دعم التجميع المُدمج مُتاح ولكنه لا يزال في مرحلة تجريبية.

رابط

يُعدّ مشروع lld الفرعي محاولةً لتطوير رابط مدمج ومستقل عن المنصة لـ LLVM. [ 62 ] ويهدف lld إلى إزالة الاعتماد على رابط تابع لجهة خارجية. اعتبارًا من مايو 2017 يدعم برنامج lld صيغ ELF و PE/COFF و Mach-O و WebAssembly [ 63 ] بترتيب تنازلي حسب اكتمالها. يُعدّ lld أسرع من كلا إصداري GNU ld .

على عكس روابط GNU، يدعم lld تحسين وقت الربط (LTO) بشكل مدمج. وهذا يسمح بتوليد كود أسرع لأنه يتجاوز استخدام ملحق الرابط، ولكنه من ناحية أخرى يمنع التوافق مع أنواع أخرى من LTO. [ 64 ]

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

يتضمن مشروع LLVM تطبيقًا لمكتبة C++ القياسية المسماة libc++، والمرخصة بترخيص مزدوج بموجب ترخيص MIT وترخيص UIUC . [ 65 ]

منذ الإصدار 9.0.0، تم إعادة ترخيصه بموجب رخصة أباتشي 2.0 مع استثناءات LLVM. [ 3 ]

بولي

يطبق هذا مجموعة من تحسينات موضع التخزين المؤقت بالإضافة إلى التوازي التلقائي والتحويل إلى متجه باستخدام نموذج متعدد السطوح . [ 66 ]

مصحح الأخطاء

مكتبة C القياسية

llvm-libc هي مكتبة C قياسية غير مكتملة وقادمة ومستقلة عن واجهة التطبيق الثنائية (ABI)، تم تصميمها بواسطة مشروع LLVM ولأجله. [ 67 ]

المشتقات

بسبب ترخيصها المتساهل، يُصدر العديد من الموردين نسخًا مُعدّلة خاصة بهم من LLVM. وهذا مُعترف به رسميًا في وثائق LLVM، التي تُشير إلى عدم استخدام أرقام الإصدارات في عمليات التحقق من الميزات لهذا السبب. [ 68 ] ومن بين هؤلاء الموردين:

انظر أيضاً

مراجع

  1. "شعار LLVM" . مشروع البنية التحتية لمترجم LLVM .
  2. "LLVM 22.1.8" . 16 يونيو 2026. تم الاطلاع عليه في 16 يونيو 2026 .
  3. 1 2 3 4 "LICENSE.TXT" . llvm.org . تم الاطلاع عليه بتاريخ 24 سبتمبر 2019 .
  4. "سياسة مطوري LLVM — وثائق LLVM 20.0.0git" . llvm.org . تم الاطلاع عليه في 9 نوفمبر 2024 .
  5. "مشروع البنية التحتية لمترجم LLVM" . تم الاطلاع عليه بتاريخ 11 مارس 2016 .
  6. 1 2 "دليل مرجعي للغة LLVM" . تم الاطلاع عليه في 9 يونيو 2019 .
  7. "مشروع البنية التحتية لمترجم LLVM" . llvm.org . تم الاطلاع عليه بتاريخ 13 يناير 2025 .{{cite web}}: CS1 maint: deprecated archiveal service ( link )
  8. "الإعلان عن LLILC - مُصرّف جديد قائم على LLVM لـ .NET" . dotnetfoundation.org . مؤرشف من الأصل في 12 ديسمبر 2021. تم الاطلاع عليه في 12 سبتمبر 2020 .
  9. "Mono LLVM" . تم الاطلاع عليه بتاريخ 10 مارس 2013 .
  10. لاتنر، كريس (2011). "LLVM" . في براون، آمي؛ ويلسون، جريج (محرران). هندسة تطبيقات المصادر المفتوحة .
  11. "Clasp" . مطورو Clasp . تم الاسترجاع في 2 ديسمبر 2024 .
  12. "LDC" . ويكيبيديا . تم الاطلاع عليه في 2 ديسمبر 2024 .
  13. "مترجمات دلفي القائمة على LLVM" . إمباركاديرو . تم الاطلاع عليه بتاريخ 26 نوفمبر 2024 .
  14. ^ "موففورث" . جيثب . 28 نوفمبر 2021.
  15. "مترجم فلانج" . مشروع LLVM . تم الاطلاع عليه في 2 ديسمبر 2024 .
  16. "سريع" . سريع . تم الاسترجاع في 22 نوفمبر 2024 .
  17. وونغ، ويليام (23 مايو 2017). "ما الفرق بين LabVIEW 2017 وLabVIEW NXG؟" . التصميم الإلكتروني .
  18. "مترجم NI LabVIEW: نظرة من الداخل" .
  19. لارابيل، مايكل (11 أبريل 2018). "كرونوس تعلن رسميًا عن مترجم LLVM/SPIR-V" . Phoronix.com .
  20. "الأسئلة الشائعة" . odin-lang.org . تم الاطلاع عليه بتاريخ 26 يناير 2026 .
  21. "32.1. ما هي عملية الترجمة الفورية (JIT)؟" . وثائق PostgreSQL . 12 نوفمبر 2020. تم الاطلاع عليه في 25 يناير 2021 .
  22. "الميزات" . روبي موشن . شركة سكراتشورك للتطوير ذ.م.م. تم الاسترجاع في 17 يونيو 2017. يقوم روبي موشن بتحويل كود روبي المصدر لمشروعك إلى ... كود الآلة باستخدام ... مُترجم مُسبق (AOT)، يعتمد على LLVM.
  23. "توليد الكود - دليل لتطوير Rustc" . rust-lang.org . تم الاطلاع عليه في 4 يناير 2023 .
  24. ريدي، جيف (24 سبتمبر 2012). "تجميع سكالا إلى LLVM" . سانت لويس، ميزوري، الولايات المتحدة . تم الاسترجاع في 19 فبراير 2013 .
  25. "Scala Native" . تم الاطلاع عليه بتاريخ 26 نوفمبر 2023 .
  26. "LLVMCodegen" . MLton . تم الاسترجاع في 26 نوفمبر 2024 .
  27. توثيق لغة وولفرام
  28. آدم تريت (19 فبراير 2005)، مواصفات mkspecs وتصحيحات لتجميع LLVM لـ Qt4 ، مؤرشفة من الأصل في 4 أكتوبر 2011 ، تم استرجاعها في 27 يناير 2012
  29. "نظرة عامة على أدوات المطورين" . مطورو أبل . أبل. مؤرشف من الأصل في 23 أبريل 2011.
  30. لاتنر، كريس (21 ديسمبر 2011). "اسم LLVM" . llvm-dev (قائمة بريدية) . تم الاطلاع عليه في 2 مارس 2016 .لم يعد اختصار "LLVM" رسميًا. كان الاختصار الذي توسع إليه سابقًا مُربكًا وغير مناسب منذ البداية تقريبًا.  :) ومع توسع LLVM ليشمل مشاريع فرعية أخرى، أصبح أقل فائدةً وأكثر عبثية.
  31. لاتنر، كريس (1 يونيو 2011). "LLVM" . في براون، آمي؛ ويلسون، جريج (محرران). بنية تطبيقات المصادر المفتوحة . Lulu.com. ISBN 978-1257638017كان اسم "LLVM" في السابق اختصارًا ، ولكنه الآن مجرد علامة تجارية للمشروع الشامل.
  32. ""libc++" مكتبة C++ القياسية" .
  33. لاتنر، كريس (3 أبريل 2014). "مؤسسة LLVM" . مدونة مشروع LLVM .
  34. "مجلس الإدارة" . مؤسسة LLVM . تم الاطلاع عليه في 4 يوليو 2026 .
  35. "جائزة نظام البرمجيات من ACM" . ACM.
  36. وينبورغ، هانز (19 سبتمبر 2019). " [ إعلان llvm ] إصدار LLVM 9.0.0" .
  37. "إعادة ترخيص المنتجات ذات القيمة العالية" . foundation.llvm.org . ١١ نوفمبر ٢٠٢٢. مؤرشف من الأصل في ١٣ مايو ٢٠٢٤. تم الاطلاع عليه في ١ أبريل ٢٠٢٢ .
  38. "إعادة ترخيص LLVM - الذيل الطويل" . مستندات جوجل . مشروع LLVM. مؤرشف من الأصل في 13 مايو 2024. تم الاسترجاع في 27 نوفمبر 2022 .
  39. "⚙ D156286 [ docs ] رفع الحد الأدنى لإصدار GCC إلى 7.5" . reviews.llvm.org . تم الاطلاع عليه في 28 يوليو 2023 .
  40. لاتنر، كريس (15 أغسطس 2006). "استخدام رائع لـ LLVM في شركة آبل: حزمة OpenGL" . llvm-dev (قائمة بريدية) . تم الاطلاع عليه في 1 مارس 2016 .
  41. مايكل لارابيل، "واجهة جنوم تعمل بدون دعم برنامج تشغيل وحدة معالجة الرسومات" ، فورونيكس ، 6 نوفمبر 2011
  42. ماكاروف، ف. "SPEC2000: مقارنة بين LLVM-2.9 و GCC4.6.1 على x86" . تم الاطلاع عليه في 3 أكتوبر 2011 .
  43. ماكاروف، ف. "SPEC2000: مقارنة بين LLVM-2.9 و GCC4.6.1 على x86_64" . تم الاطلاع عليه في 3 أكتوبر 2011 .
  44. لارابيل، مايكل (27 ديسمبر 2012). "مترجم LLVM/Clang 3.2 ينافس GCC" . تم الاطلاع عليه في 31 مارس 2013 .
  45. لاتنر، كريس ؛ أدفي، فيكرام (مايو 2003). بنية الجيل القادم من نظام التحكم في الاتصالات . القمة السنوية الأولى لمطوري نظام التحكم في الاتصالات . تم الاطلاع عليه في 6 سبتمبر 2009 .
  46. "نظرة عامة على مُجمِّع LLVM" . developer.apple.com .
  47. "ملاحظات إصدار Xcode 5" . شركة آبل .
  48. "ملاحظات إصدار Clang 3.8" . تم الاطلاع عليها بتاريخ 24 أغسطس 2016 .
  49. "تجميع لغة هاسكل إلى LLVM" . تم الاطلاع عليه بتاريخ 22 فبراير 2009 .
  50. "مدونة مشروع LLVM: مُصرّف غلاسكو هاسكل وLLVM" . 17 مايو 2010. تم الاطلاع عليه في 13 أغسطس 2010 .
  51. "دليل مرجعي للغة LLVM" . LLVM.org . 10 يناير 2023.
  52. كانغ، جين-غو. "Wordcode: المزيد من رموز LLVM الثنائية المستقلة عن الهدف" (ملف PDF) . تم الاطلاع عليه في 1 ديسمبر 2019 .
  53. "PNaCl: ملفات تنفيذية محمولة للعميل الأصلي" (ملف PDF) . مؤرشف من الأصل (ملف PDF) في 2 مايو 2012. تم الاطلاع عليه في 25 أبريل 2012 .
  54. "MLIR" . mlir.llvm.org . تم الاطلاع عليه في 7 يونيو 2022 .
  55. "اللهجات - MLIR" . mlir.llvm.org . تم الاطلاع عليه في 7 يونيو 2022 .
  56. ستيلارد، توم (26 مارس 2012). " [ LLVMdev ] RFC: R600، واجهة خلفية جديدة لوحدات معالجة الرسومات من AMD" . llvm-dev (قائمة بريدية).
  57. "دليل المستخدم لـ AMDGPU Backend — وثائق LLVM 15.0.0git" .
  58. ملاحظات التنفيذ الخاصة بالهدف: مصفوفة ميزات الهدف // مولد التعليمات البرمجية المستقل عن الهدف LLVM، موقع LLVM.
  59. "إزالة الواجهة الخلفية mblaze من llvm" . GitHub . 25 يوليو 2013. تم الاطلاع عليه في 26 يناير 2020 .
  60. "إزالة الواجهة الخلفية ألفا" . جيت هاب . 27 أكتوبر 2011. تم الاطلاع عليه في 26 يناير 2020 .
  61. " [ Nios2 ] إزالة الواجهة الخلفية لـ Nios2" . GitHub . 15 يناير 2019. تم الاطلاع عليه في 26 يناير 2020 .
  62. "lld - رابط LLVM" . مشروع LLVM . تم الاطلاع عليه بتاريخ 10 مايو 2017 .
  63. "منفذ WebAssembly lld" .
  64. "42446 – لا يستطيع lld التعامل مع ملفات gcc LTO" . bugs.llvm.org .
  65. ""libc++" مكتبة C++ القياسية" .
  66. "Polly - تحسينات متعددة السطوح لـ LLVM" .
  67. "llvm-libc: مكتبة قياسية متوافقة مع معيار ISO C — وثائق libc 15.0.0git" . libc.llvm.org . تم الاطلاع عليه بتاريخ 18 يوليو 2022 .
  68. "إضافات لغة Clang" . وثائق Clang 12. يُرجى ملاحظة أنه لا ينبغي استخدام أرقام الإصدارات التسويقية للتحقق من ميزات اللغة، حيث يستخدم الموردون المختلفون أنظمة ترقيم مختلفة. بدلاً من ذلك، استخدم وحدات الماكرو للتحقق من الميزات.
  69. "apple/llvm-project" . شركة آبل. 5 سبتمبر 2020.
  70. "مترجمات IBM C/C++ و Fortran ستعتمد بنية LLVM مفتوحة المصدر" . 29 يوليو 2022.
  71. "مترجمات Intel C/C++ تُكمل اعتماد LLVM" . Intel . تم الاطلاع عليه بتاريخ 17 أغسطس 2021 .
  72. "lanl/kitsune" . مختبر لوس ألاموس الوطني. 27 فبراير 2020.
  73. "مواصفات NVVM IR 1.5" . يعتمد NVVM IR الحالي على LLVM 5.0
  74. مجموعة أدوات المطورين لجهاز بلاي ستيشن 4 (ملف PDF) ، تم الاطلاع عليه بتاريخ 24 فبراير 2015

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

  1. لاتنر، كريس (15 مارس 2012). "الفصل 11" . بنية تطبيقات المصادر المفتوحة . آمي براون، جريج ويلسون. ISBN 978-1257638017.