Сторінка
6
Не дивлячись на вказані недоліки, транслятори-інтерпретатори набули достатнього поширення, оскільки вони підтримують діалоговий режим, що особливо зручно при розробці і від ладці вихідних програм. Крім того, інтерпретатори легко розробляти, і вони обходяться дешевшим, ніж компілятори з тієї ж мови.
В разі багатократного рішення задачі, коли швидкодія роботи обчислювальної системи має істотне
значення, доцільно використовувати інший принцип - компіляцію.
При компіляції процеси трансляції і виконання розділені в часі: спочатку вихідна програма повністю перекладається машинною мовою (після чого наявність транслятора в оперативній пам'яті стає непотрібною), а потім програма, що від транслює, може багато разів виконуватися. Отже, для однієї і тієї ж програми трансляція методом компіляції забезпечує вищу продуктивність обчислювальної системи при скороченні необхідної оперативної пам'яті.
Велика складність в розробці компілятора в порівнянні з інтерпретатором з тієї ж самої мови пояснюється тим, що компіляція програми включає дві дії: аналіз, тобто визначення правильності запису вихідної програми відповідно до правил побудови мовних конструкцій вхідної мови, і синтез - генерування еквівалентної програми в машинних кодах. Трансляція методом компіляції вимагає неодноразового "перегляду" трансльованої програми, тобто транслятори-компілятори є багато прохідними: при першому проході вони перевіряють коректність синтаксису мовних конструкцій окремих операторів незалежно один від одного, при подальшому проході - коректність синтаксичних взаємозв'язків між операторами і так далі
Отримана в результаті трансляції методом компіляції програма називається об'єктним модулем, який є еквівалентною програмою в машинних кодах, але не "прив'язану" до конкретних адрес оперативної пам'яті. Тому перед виконання об'єктний модуль має бути оброблений спеціальною програмою операційної системи (редактором зв'язків) і перетворений в завантажувальний модуль, тобто програмний модуль з відносними адресами.
Завантажувальний модуль може мати просту, оверлейну або динамічну структуру.
Модуль простої структури складається з єдиного завантажувального модуля, сформованого редактором зв'язків. Цей модуль перед виконання цілком завантажується в оперативну пам'ять і включає всі необхідні для його роботи команди. Модулі простої структури найбільш ефективні з точки зору продуктивності, оскільки в ході виконання вимагають мінімального втручання програми ОС, що управляє.
Якщо програма функціонально досить складна або велика по розмірах, то вона реалізується у вигляді модулів (сегментів) оверлейної структури (структури "з перекриттям"). Завантажувальний модуль оверлейної структури складається з оверлейних сегментів і містить інформацію, використовувану оверлейним супервізором для завантаження окремих сегментів в основну пам'ять. При цьому різні сегменти такої програми можуть повторно використовувати одну і ту ж область оперативної пам'яті. Оверлейна організація модулів менш ефективна з точки зору часу їх виконання, оскільки вимагає більшого втручання програми ОС, що управляє.
При виконанні модулів простій і оверлейної структури програма ОС, що управляє, не здійснює виклик інших завантажувальних модулів, і в цьому вони поступаються динамічній організації модулів. При виконанні завантажувальних модулів динамічної структури можуть з'являтися запити на інші завантажувальні модулі, і програма ОС, що управляє, може почати завантаження цих модулів в оперативну пам'ять ще до завершення виконання попереднього модуля. Програмні модулі, що завдяки цьому викликаються, можуть виконуватися як послідовно, так і паралельно, що підвищує швидкодію програми.
Разом з розглянутими вище трансляторами-інтерпретаторами і трансляторами-компіляторами на практиці використовуються також транслятори інтерпретатори-компілятори, які об'єднують в собі достоїнства обох принципів трансляції: на етапі розробки і від ладки програм транслятор працює в режимі інтерпретатора, а після завершення процесу від ладки вихідна програма повторно транслюється в об'єктний модуль (тобто вже методом компіляції). Це дозволяє значно спростити і прискорити процес складання і від ладки програм, а за рахунок подальшого здобуття об'єктного модуля забезпечити ефективнішого виконання програми.
Враховуючи, що ефективність програм, що отримуються за допомогою високорівневих мов програмування, може значно поступатися аналогічним програмам, складеним на мовах низького рівня, у ряді випадків використовуються оптимізуючи транслятори (оптимайзери), які після завершення компіляції здійснюють оптимізацію об'єктного модуля.
Наприклад, хороший компілятор здатний розпізнати недбалість програміста і виключити з циклу «статичні»
обчислення. Під «статичними» обчисленнями розуміється виконання в циклі певної операції, результат якої не залежить від ітерацій циклу. Розпізнавши таку конструкцію, компілятор виводить її за рамки циклу. Цей тип оптимізації називається переміщенням виразів.
Іншим складнішим виглядом оптимізації є усунення невживаної коди. Компілятор знаходить операторів, які не виконуються ні за яких умов, і не включає їх у виконуваний код.
Інші реферати на тему «Фінанси»:
Бюджетна система та принципи її побудови
Аналіз грошових коштів за напрямками діяльності підприємства, аналіз фінансової стійкості підприємства
Фінансова санація підприємства, її економічний зміст та порядок проведення
Удосконалення біржового обігу як ключовий елемент ефективної інфраструктури ринку сільськогосподарської продукції
Статистика фінансів галузей національної економіки
