Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Апаратне та програмне забезпечення загального п...doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.17 Mб
Скачать

2. Класифікація мов програмування. Системи програмування. Поняття про інтерпретацію та компіляцію.

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

Мова програмування служить двох пов'язаних між собою цілям: він дає програмісту апарат для завдання дій, які повинні бути виконані, і формує концепції, якими користується програміст, розмірковуючи про те, що робити. Першої мети ідеально відповідає мову, який настільки "близький до машини", що всіма основними машинними аспектами можна легко і просто оперувати досить очевидним для програміста чином. Другий мети ідеально відповідає мову, який настільки "близький до розв'язуваної задачі", щоб концепції її рішення можна було висловлювати прямо і коротко.

КЛАСИФІКАЦІЯ МОВ ПРОГРАМУВАННЯ

2.1. Машинно - орієнтовані мови

Машинно - орієнтовані мови - це мови, набори операторів і образотворчі засоби яких істотно залежать від особливостей ЕОМ (внутрішнього мови, структури пам'яті і т.д.). Машинно-орієнтовані мови дозволяють використовувати всі можливості та особливості Машинно - залежних мов:

- висока якість створюваних програм (компактність і швидкість виконання);

- можливість використання конкретних апаратних ресурсів;

- передбачуваність об'єктного коду та замовлень пам'яті;

- для складання ефективних програм необхідно знати систему команд та особливості функціонування даної ЕОМ;

- трудомісткість процесу складання програм (особливо на машинних мовах і ЯСК), погано захищеного від появи помилок;

- низька швидкість програмування;

- неможливість безпосереднього використання програм, складених на цих мовах, на ЕОМ інших типів.

Машинно-орієнтовані мови за ступенем автоматичного програмування поділяються на класи.

2.1.1. Машинний мова

Як я вже згадував, у введенні, окремий комп'ютер має свій певний Машинний мова (далі МЯ ), йому наказують виконання згаданих операцій над обумовленими ними операндами, тому МЯ є командним. Однак, деякі сімейства ЕОМ (наприклад, ЄС ЕОМ, IBM/370/тощо) мають єдиний МЯ для ЕОМ різної потужності. У команді будь-якого з них повідомляється інформація про місцезнаходження операндів і тип виконуваної операції.

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

2.1.2. Мови Символічного Кодування

Продовжимо розповідь про командні мовах, Мови Символічного Кодування (далі ЯСК ), так само, як і МЯ , є командними. Однак коди операцій та адреси в машинних командах, що представляють собою послідовність двійкових (у внутрішньому коді) або вісімкових (часто що використовуються при написанні програм) цифр, в ЯСК заміщені знаком (ідентифікатори), форма написання яких допомагає програмісту легше запам'ятовувати смисловий зміст операції. Це забезпечує суттєве зменшення кількості помилок при складанні програм.

Використання символічних адрес - перший крок до створення ЯСК . Команди ЕОМ замість істинних (фізичних) адрес містять символічні адреси. За результатами складеної програми визначається необхідна кількість сейфів для зберігання вихідних проміжних і результуючих значень. Призначення адрес, що виконується окремо від складання програми в символічних адресах, може проводитися менш кваліфікованим програмістом або спеціальною програмою, що в значній мірі полегшує працю програміста.

2.1.3. автокодом

Є також мови, що включають у себе всі можливості ЯСК , за допомогою розширеного введення макрокоманд - вони називаються автокодом .

У різних програмах зустрічаються деякі досить часто використовуються командні послідовності, які відповідають певним процедурам перетворення інформації. Ефективна реалізація таких процедур забезпечується оформленням їх у вигляді спеціальних макрокоманд і включенням останніх у мову програмування, доступний програмісту. Дії переводяться в машинні команди двома шляхами - розстановкою і генеруванням. У постановочної системі містяться «кістяки» - серії команд, що реалізують потрібну функцію, позначену дії. Дії забезпечують передачу фактичних параметрів, які в процесі трансляції вставляються в «Кістяк» програми, перетворюючи її в реальну машинну програму.

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

Обидві зазначених системи використовують транслятори з ЯСК і набір макросів, які також є операторами автокодом.

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

2.1.4. Макрос

Мова, що є засобом для заміни послідовності символів описують виконання необхідних дій ЕОМ на більш стислу форму - називається Макрос (засіб заміни).

В основному, Макрос призначений для того, щоб скоротити запис вихідної програми. Компонент програмного забезпечення, що забезпечує функціонування макросів, називається Макропорцесори . На Макропорцесори надходить макроопределяющій і початковий текст. Реакція Макропорцесори на виклик-видача вихідного тексту.

Макрос однаково може працювати, як з програмами, так і з даними.

2.2. Машинно - незалежні мови

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

Подібні мови отримали назву високорівневих мов програмування. Програми, що складаються на таких мовах, являють собою послідовності операторів, структуровані відповідно до правил розглядання мови (завдання, сегменти, блоки і т.д.). Оператори мови описують дії, які повинна виконувати система після трансляції програми на МЯ .

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

2.2.1. Проблемно - орієнтовані мови

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

Проблемних мов дуже багато, наприклад:

Фортран, Алгол - мови, створені для вирішення математичних завдань;

Simula , Слэнг - для моделювання;

Лісп, Снобол - для роботи з обліковим структурами.

Про ці мовах я розповім далі.

2.2.2. Універсальні мови

Універсальні мови були створені для широкого кола завдань: комерційних, наукових, моделювання і т.д. Перший універсальна мова був розроблений фірмою IBM, що став в послідовності мов Пл/1 . Другий за потужністю універсальна мова називається Алгол-68 . Він дозволяє працювати з символами, розрядами, числами з фіксованою та плаваючою комою. Пл/1 має розвинену систему операторів для управління форматами, для роботи з полями змінної довжини, з даними організованими у складні структури, і для ефективного використання каналів зв'язку. Мова враховує включені в багато машини можливості переривання і має відповідні оператори. Передбачена можливість паралельного виконання ділянок програм.

Програми в Пл/1 компілюються за допомогою автоматичних процедур. Мова використовує багато властивості Фортран, Алгол, Кобол . Однак він припускає не тільки динамічне, але і кероване і статистичне розподілу пам'яті.

2.2.3. Діалогові мови

Поява нових технічних можливостей поставило завдання перед системними програмістами -- створити програмні засоби, що забезпечують оперативну взаємодію людини з ЕОМ їх назвали діалоговими мовами .

Ці роботи велися в двох напрямках. Створювалися спеціальні управлять мови для забезпечення оперативного впливу на проходження завдань, які складалися на будь-яких раннє неопрацьованих (не діалогових) мовами. Розроблялися також мови, які крім цілей управління забезпечували б опис алгоритмів вирішення завдань.

Необхідність забезпечення оперативної взаємодії з користувачем зажадала збереження в пам'яті ЕОМ копії вихідної програми навіть після отримання об'єктної програми в машинних кодах. При внесенні змін до програми з використанням діалогового мови система програмування за допомогою спеціальних таблиць встановлює взаємозв'язок структур вихідної та об'єктної програм. Це дозволяє здійснити необхідні редакційні зміни до об'єктної програмі.

Одним із прикладів діалогових мов є Бейсік .

Бейсік використовує позначення подібні звичайним математичним виразами. Багато операторів є спрощеними варіантами операторів мови Фортран . Тому ця мова дозволяє вирішувати досить широке коло завдань.

2.2.4. Непроцедурного мови

непроцедурного мови складають групу мов, що описують організацію даних, що обробляються за фіксованими алгоритмам (табличні мови і генератори звітів), і мов зв'язку з операційними системами.

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

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

Програми, складені на табличному мовою, зручно описують складні ситуації, що виникають при системному аналізі.

1.1. Інтерпретатори

Одне, часто згадується перевага інтерпретаторной реалізації полягає в тому, що вона допускає "безпосередній режим". Безпосередній режим дозволяє вам задавати комп'ютера завдання на зразок PRINT 3.14159 * 3/2.1 і повертає вам слово, як тільки ви натиснете клавішу ENTER (це дозволяє використовувати комп'ютер вартістю 3000 доларів в якості калькулятора вартістю 10 доларів). Крім того, інтерпретатори мають спеціальні атрибути, які спрощують налагодження. Можна, наприклад, перервати обробку інтерпретаторной програми, відобразити вміст певних змінних, побіжно переглянути програму, а потім продовжити виконання.

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

Однак інтерпретаторние мови мають недоліки. Необхідно, наприклад, мати копію інтерпретатора в пам'яті весь час, тоді як багато можливостей інтерпретатора, а отже і його можливості можуть не бути необхідними для виконання конкретної програми.

Слабо помітним недоліком інтерпретаторів є те, що вони мають тенденцію відбивати охоту до хорошого стилю програмування. Оскільки коментарі та інші формалiзуються, деталі займають значне місце програмної пам'яті, люди прагнуть ними не користуватися. Диявол менше люті, ніж програміст, що працює на інтерпретаторном Бейсіку, який намагається отримати програму в 120К в пам'яті ємністю 60К. але найгірше те, що інтерпретатори тихохідні. Ними витрачається дуже багато часу на розгадування того, що робити, замість того щоб займатися дійсно справою.

При виконанні програмних операторів, інтерпретатор повинен спочатку сканувати кожен оператор з метою прочитання його вмісту (що ця людина просить мене зробити?), а потім виконати потрібну операцію. Оператори в циклах скануються надто багато.

Розглянемо програму: на інтерпретаторном Бейсік 10 FOR N = 1 TO 1000 20 PRINT N, SQR (N) 30

NEXT N при першому переході по цій програмі Бейсік-Інтерпретатор повинен розгадати що означає рядок 20:

1.преобразовать числову змінну N в рядок

2.послать рядок на екран

3.переместіть в наступну зону друку

4.вичісліть квадратний корінь з N

5.преобразовать результат в рядок

6.послать рядок на екран

При другому проході циклу все це розгадування повторюється знову, тому що абсолютно забуті всі результати вивчення цього рядка якусь мілісекунди тому тому. І так у всіх наступних 998 проходах. Цілком очевидно, що якщо вам вдалося якимось чином відокремити фазу сканування/розуміння від фази виконання ви мали б більш швидку програму. І це саме те, для чого існують компілятори.

1.2. Компілятори

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

3. Вирази та оператори. Операції, операнди. Пріоритет операцій. Арифметичні вирази. Логічні вирази. Оператори введення та виведення.

65