Компілятори, інтерпретатори і байт-код, Різне, Програмування, статті

Алан Джок, Тижневик «Computerworld Росія»

Визначення

Компілятори – Це програми, які перетворять вихідні тексти програм, написані на мові програмування високого рівня, в програму на машинній мові, «зрозумілу» комп’ютера. Отриманий код, званий виконуваної програмою, можна встановлювати і запускати на потрібному комп’ютері без додаткових перетворень. Інтерпретатори виконують аналогічну функцію, але роблять це порядково всякий раз під час виконання програми. Байт-код – Це проміжний підхід, при якому програма перетвориться в проміжний двійковий вигляд, що інтерпретується якоїсь «віртуальною машиною» під час виконання.


Причиною знову спалахнула інтересу до компіляторам стала поява швидких і складних 64-розрядних мікропроцесорів, типовим представником яких можна вважати Intel Itanium. Все удосконалення в архітектурі процесорів, такі як розпаралелювання і передбачення розгалуження, а також можливість різкого збільшення продуктивності, виявляться марні до тих пір, поки програмісти не почнуть їх реально використовувати.


Турбота про створення коду, орієнтованого на ефективну паралельну обробку, серйозно ускладнює і без того непросту задачу сучасного програмування. В результаті відповідальність за збільшення продуктивності, на яке потенційно здатні майбутні 64-розрядні процесори, лягає на компілятори нового покоління.


Компілятори, яким належить забезпечити значне збільшення швидкості обчислень, вже створюються в дослідницьких лабораторіях ряду компаній – Hewlett-Packard, Intel, MetaWare, Microsoft та інших. У лютому минулого року компанія Silicon Graphics оголосила про те, що її оптимізовані компілятори дозволяють збільшити на 30-100% у порівнянні з існуючими продуктами продуктивність програм, працюють на комп’ютерах з процесорами Itanium і операційною системою Linux.


Як і їхні попередники, оптимізовані компілятори перетворять програми на високорівневої мовою в машинний код. Однак крім цього вони гарантують максимально ефективне використання пам’яті (і в першу чергу процесорного кешу і механізму розпаралелювання).


Наприклад, процесори Itanium призначені для того, щоб одночасно обробляти до шести команд на кожен такт процесора. Але для цього компілятор повинен підтримувати стабільну передачу даних через конвеєр команд.


Одна з можливих методик полягає в об’єднанні часто використовуваних команд в групи, які процесор може обробляти одночасно. Оптимізовані компілятори також максимально використовують вільні такти процесора за рахунок передбачення розгалуження, намагаючись заздалегідь визначити результат команд на зразок GOTO і тим самим уберегти процесор від необхідності шукати необхідні дані по всій програмі. Метод спекулятивних обчислень припускає, що оптимізований компілятор завантажує команди з деяким випередженням.

Інші шляхи

Інтерпретатори також перетворять код, написаний на мові програмування високого рівня, але вони роблять це порядково всякий раз, коли програма запускається на виконання. Для того щоб програма була «Зрозуміла» комп’ютера, на якому передбачається виконувати високорівнева код безпосередньо, на ньому також повинна працювати програма інтерпретації. Інтерпретатори корисні для тестування нового або модифікованого коду або при навчанні програмуванню.


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


Ідеологія Java спирається на третій, свого роду компромісний підхід – байт-код. При використанні байт-коду високорівневі програми перетворюються в проміжний вид, здатний виконуватися на різних апаратних платформах. Байт-код Java перетворюється в машинний код за допомогою спеціального інтерпретатора, званого віртуальною машиною Java (Java Virtual Machine – JVM). JVM формує виділений простір в пам’яті, яке відокремлене від пам’яті основної системи, для зберігання байт-коду і породжуваних структур.


Використання динамічних (just-in-time, JIT – «точно в строк») компіляторів збільшує продуктивність Java-додатків. В цьому випадку не JVM виконує байт-код, а JIT-компілятор перетворює його в «рідній» для даної машини код. Таким чином, з одного боку, підвищується продуктивність скомпільованого коду, а з іншого – зберігається переносимість, властива Java.


Hewlett-Packard дотримується аналогічної тактики зі своїм TurboChai – середовищем Java для вбудованих додатків. В TurboChai продуктивність збільшується за рахунок перетворення найбільш часто використовуваного коду в даному вбудованому додатку. За допомогою вибіркової компіляції в HP намагаються оптимальним чином управляти використанням пам’яті, в той же час досягаючи швидкостей, порівнянних з тими, яких дозволяють домогтися JIT-компілятори. TurboChai використовує байт-код Java в якості вхідної інформації і генерує вихідні тексти ANSI C, а потім використовує будь компілятор для мови Сі для отримання оптимізованого «Рідного» машинного коду.


В минулому році Microsoft анонсувала C #, об’єктно-орієнтована мова програмування, узгоджений з XML. Корпорація подає нову мову як логічне продовження Сі і C + + для Web-додатків. Ключовими модулями стануть Common Language Runtime для C # і спеціальний компілятор, який перетворює текст, написаний на традиційних мовах Кобол, Perl, Фортран або інших, в проміжний мова, яка буде працювати на новій платформі Microsoft. Net.


Кінцеві користувачі навряд чи будуть приділяти багато уваги компіляторам. Проте може з’явитися нове покоління компіляторів, які дозволяють збільшити продуктивність до рівня, що дозволяє переконати професіоналів у необхідності використовувати 64-розрядні апаратні архітектури.

Створення інструментальних засобів розробки

Інструментарій Що нового Цілі
Оптимізовані компілятори Забезпечують високу продуктивність процесорної обробки за рахунок розпаралелювання, передбачення розгалужень і спекулятивних обчислень Допомагають реалізувати потенціал 64-розрядних процесорів
JIT-компілятори У реальному часі компілюють код Збільшують продуктивність інтерпретованих мов, таких як Java
“Вибіркові” компілятори Компілюють тільки часто використовуваний код Збільшують продуктивність, не витрачаючи даремно дорогі ресурси пам’яті

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*