Яким способом (и) є низький рівень LLVM?


12

Яким способом (ами) LLVM (Virtual Virtual Machine) низького рівня? (Під час написання я не знайшов такого розширення абревіатури "LLVM" на своєму веб-сайті, а у Вікіпедії .)

Це називається "Низький рівень" у тому, для чого він розроблений (інфраструктура компілятора), або тому, що він працює на "нижчому рівні", ніж інші інструменти?

Чи є (на зразок) "ілюстрацією" цього LLVM нижчого рівня, ніж JVM та CLR , чи він призначений лише для використання "нижчого рівня"?

Відповіді:


16

LLVM є нижчим рівнем, ніж типові ВМ, такі як JVM та CLR. Наприклад, хоча він має гачки для сміттєзбірника, він не забезпечує сміттєзбірник сам.

Так само JVM має вбудований компілятор JIT (за винятком справді давніх версій). У LLVM є кілька компіляторів JIT для LLVM IR, але розробник все ще повинен підключити речі і фактично JIT-код.

Коли JVM стикається з невирішеним зовнішнім, він виходить і знаходить потрібний клас для його задоволення, і знає, як шукати .class файли безпосередньо у файловій системі та у .jar-файлах 1 . У компіляторів JIT LLVM є гачки, на яких можна вирішити, як керуються подібними справами. Як і слід було очікувати, деякі люди написали деякі версії за замовчуванням, тож вони можуть робити речі приблизно в тому ж порядку, що і JVM, але ви також можете ігнорувати їх і робити щось по-іншому, якщо захочете.

Простіше кажучи, якщо ви розробляєте компілятор (або щось на те, щоб замовити), у нього є багато інструментів, щоб полегшити ваше життя. Замість того, щоб багато переживати з приводу оптимізації, ви можете зробити приблизно найпростіший переклад, яким ви можете керувати зі свого вихідного коду до ІК LLVM, а потім використовувати бібліотеки LLVM для керування оптимізацією, JITing, посилання тощо. Тим не менш, це бібліотеки - це забезпечує деякі дійсно корисні функції, тому вам не доведеться мати справу з усіма деталями, але вони все одно функціонують, і ви все ще пишете код, щоб викликати їх. Це не готовий продукт, просто корисні інструменти для побудови виробів порівняно швидко та легко.


1 Технічно не все це вбудовано у власне СВМ. Він визначає те, що зазвичай називають завантажувачем класів первинних частин як частиною власного JVM, а потім є навантажувачі класів користувачів, вказані в java.util.ClassLoader, які обробляють інші речі. Деякі навантажувачі класів включені за замовчуванням, і якщо ви хочете досить погано, ви можете доповнити їх, визначивши власні.


12

Це низький рівень, оскільки він розроблений таким чином, що існуючі або майбутні віртуальні машини (JVM) можуть використовувати його як серцевину їх реалізації.

Подивіться це так: Віртуальні машини Java та Python дуже портативні, оскільки вони написані в стандартному С, і багато покладаються на власні бібліотеки. Метою LLVM є створення інфраструктури, щоб легко перенести будь-яку віртуальну машину на платформу, яка вже підтримує LLVM.

LLVM пропонує підтримку для статичної та JIT-компіляції, а також розроблена таким чином, щоб вона могла працювати в надійному просторі операційної системи. Це означає, що теоретично запуск віртуальної машини поверх LLVM повинен означати набагато менше роботи та виробляти щось набагато швидше та ефективніше. В теорії.

Тоді LLVM, будучи нижчим рівнем, повинен бути простішим в порту до різних архітектур ОС та обладнання.

Існують великі заощадження, якщо мовні виконавці зможуть писати на єдиній платформі низького рівня, що легко переноситься. Найвідоміші віртуальні машини знаходяться на відстані між мовою, якою вони обслуговуються, та операційною системою, і їм належить реалізувати власні проміжні представлення та JITC.


5

Частина "низького рівня" імені LLVM відноситься до рівня використовуваного набору віртуальних інструкцій. Проміжна мова (ІЧ), якою використовується LLVM, близька до рівня машинного коду, хоча це архітектура агностична і загальна.

З іншого боку, байт-код JVM та CLR є досить високим, оскільки він має інструкції, що знаходяться на більш високому рівні абстракції. Вони обидва об'єктно-орієнтовані мови складання на основі стека. Наприклад, JVM має інструкцію invokevirtual, яка є інструкцією, яка повинна знати про конкретну об'єктну модель мови Java.


3

Це, безумовно, нижчий рівень, ніж будь-який з мови, що відповідає специфіці мови, та об'єднані VM, такі як JVM та CLR. Його дизайн близький до проміжного представництва низького рівня в GCC (GIMPLE) та подібних компіляторах. Не існує стандартного GC за замовчуванням, не застосовується конкретна система типу високого рівня, не передбачається вирівнювання (це повинно бути чітко вказано), типи даних цілочисельних чи плаваючих точок є явними (і залежать від платформи), а найнижчий рівень усіх - a Доступна арифметика вказівника.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.