Мови програмування їх класифікація та розвиток

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Реферат на тему:

Мови програмування, їх класифікація та розвиток

ЗМІСТ.

1.Вступ

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

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

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

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

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

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

2.1.3. Автокоди

2.1.4. Макрос

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

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

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

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

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

3. Розвиток мов програмування

3.1. Асемблер

3.2. Лісп

3.4. Бейсік

3.5. Рефаїл

3.6. Пролог і Пролог + +

3.7. Лекс

3.8. Сі

3.8.1. Особливості мови Сі

3.8.2. Недоліки мови Сі

3.9. Сі + +

3.9.1. Зауваження щодо проекту мови Сі + +

4. Висновок

5. Бібліографія

1. ВСТУП

Мова формує наш спосіб

мислення і визначає те,

про що ми можемо мислити.

Б.Л Ворф

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

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

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

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

Персональні комп'ютери IBM використовують машинний мова мікропроцесорів сімейства 8086, тому що їх апаратна частина грунтується саме на даних мікропроцесорах.

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

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-кратного підвищення швидкодії. Зворотний бік монети полягає в тому, що програми, які витрачають велику частину часу на метушню з файлами на дисках або очікування введення, не зможуть продемонструвати якесь вражаюче збільшення швидкості.

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. Непроцедурної мови

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

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

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

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

3. РОЗВИТОК МОВ ПРОГРАМУВАННЯ

3.1 Асемблер

Мова Асемблер а - це символічне представлення машинної мови. Він полегшує процес програмування в порівнянні з програмуванням в машинних кодах.

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

Деякі завдання, наприклад, обмін з нестандартними пристроями обробки даних складних структур неможливо вирішити за допомогою мов програмування високого рівня. Це під силу асемблеру.

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

Вміючи розібратися в роздруківці мови асемблера, дає можливість полегшити пошук помилок в програмах, тому що деякі мови є компіляторами (див. п. 1.2.).

3.2. Лісп Один з найстаріших мов програмування Фортран був створений в 50-х рр.. нашого століття. Фортран та подібні їй мови програмування (Алгол, ПЛ / 1) призначалися для вирішення обчислювальних завдань, що виникають в математиці, фізиці, інженерних розрахунках, економіку тощо Ці мови в основному працюють з числами.

Другий найстаріший мова програмування Лісп (L ist I nformation S ymbol P rocessing), Дж. Маккарті в 1962 р. швидше для роботи з рядками символів, ніж для роботи з числами. Це особливе призначення Лісп а відкрило для програмістів нову область діяльності, відому нині, як «штучний інтелект». В даний час Лісп успішно застосовується в експертних системах, системах аналітичних обчислень і т.п.

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

Існування безлічі різних діалектів Лісп а призвело до створення на початку 80-х рр.. Common LISP Комітету, який повинен був вибрати найбільш підходящий діалект Лісп а й запропонувати його в якості основного. Цей діалект, обраний Комітетом в 1985р., Отримав назву Common LISP. Надалі він був прийнятий в університетах США, а також багатьма розробниками систем штучного інтелекту, в якості основного діалекту мови Лісп.

Мова програмування Лісп істотно відрізняється від інших мов програмування, таких, як Паскаль, Сі тощо Робота з символами і робота з числами як з основними елементами вимагає різних способів мислення.

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

Професор Массачусетського технологічного інституту Дж. самман зауважив, що математична ясність та різке Лісп а - це ще не все. Головне - Лісп дозволяє сформулювати і запам'ятати «ідіоми», настільки характерні для проектів з штучного інтелекту.

3.3. Фортран

Одним з перших і найбільш вдалих компіляторів стала мова Фортран, розроблений фірмою IBM. Професор Дж. Букс і група американських фахівців в області програмування в 1954 році опублікувало перше повідомлення про мову. Дослівно, назва мови FOR mulae TRAN slation-перетворення формул.

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

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

Модифікація мови Фортран, що з'явилися в 1958 році, отримала назву Фортран II і містила поняття підпрограми і загальних змінних для забезпечення зв'язку між сегментами.

До 1962 року відноситься поява мови, відомого під ім'ям Фортран IV і став найбільш вживаним в даний час. До цього ж часу відноситься і початок діяльності комісії при Американській Асоціації Стандартів (ASA), яка виробила до 1966 року два стандарти - мови Фортран і базисний (основний) Фортран (Basic FORTRAN). Ці мови приблизно відповідають модифікаціям IV і II, проте базисний Фортран є підмножиною Фортрану, в той час, як Фортран II таким для Фортрану IV не є. Мова Фортран до цих пір продовжує розвиватися і вдосконалюватися, роблячи вплив на створення і розвиток інших мов. Наприклад, Фортран закладений в основу Basic - діалогового мови, дуже популярного для вирішення невеликих завдань, чудового мови для навчання навичкам використання алгоритмічних мов в практиці програмування. Розроблено ця мова - Beginner's All-purpose Symbolic Instruction Code - групою співробітників Обчислювального центру Дармутском коледжу, штат Нью-Хемпшир створений в 19 .... . Але це вже наступний мову.

3.4. Бейсік

Як знамениті гамбургери, бейсбол і баскетбол, Бейсік - це продукт Нової Англії. Як я говорив, створений в 1964р., Як мова навчання програмуванню. Бейсік є загальноприйнятим акронімом від "B eginner's A ll-purpose S ymbolic I nsruction C ode" (BASIC) - М ногоцелевой З імволіческій Про буча До од для Н ачінающіх ".

Незабаром як учні, так і автори програм виявили, що Бейсік може робити практично все те, що робить нудний незграбний Фортран. А так як Бейсік у було легко навчитися і легко з ним працювати, програми на ньому писалися звичайно швидше, ніж на Фортран тобто Бейсік був також доступний на персональних комп'ютерах, зазвичай він вбудований в ПЗУ. Так Бейсік завоював популярність. Цікаво, що через 20 років після винаходу Бейсік а, він і сьогодні найпростіший для освоєння з десятків мов общецелевое програмування, наявних у розпорядженні любителів програмування. Більш того, він чудово справляється з роботою.

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

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

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

Більш того, з появою транслятора QuickBasic фірми Microsoft розробники отримали можливість будувати на Бейсіку програми з роздільно скомпільованих модулів, деякі з яких можуть бути написані на інших мовах. Тепер, як і у випадку інших провідних мов програмування, розробник має вибір з кількох промислових бібліотек підпрограм, які містять готові рішення для поширених завдань програмування.

3.5.    Рефаїл

Безсумнівно треба розповісти і про деяких мовах програмування створених у нас на батьківщині. Один з таких мов є Рефаїл, розроблений у нас в Росії (СРСР), в 1966р. ІПМ АН СРСР. Ця мова простий і зручний для опису маніпуляцій над довільними текстовими об'єктами.

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

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

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

Певною специфікою володіють і змінні типу «висловлювання» - мається на увазі їх здатність подовжуватися при ототожненні. Правильне використання змінних цього типу також дозволяє значно підвищити ефективність Рефаїл - програми.

3.6. Пролог і Пролог + +

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

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

Всі властивості мови як і раніше доступні програмістам. Отже, Пролог + + можна віднести до групи гібридних мов, представниками якої вважаються Object Pascal і C + +. Розширення Пролог + + підтримує всі властивості, притаманні зазвичай об'єктно-орієнтованим мовам: концепції об'єктів і класів, одиничне і багаторазове успадкування, розбиття на підкласи і передачу повідомлень. Підтримуються також деякі вдосконалені властивості, що існують в таких мовах, як C + + і Smalltalk, включаючи загальні та приватні методи.

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

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

Сама мова заснований на концепції передачі повідомлень. Програма на Пролог е + + будується навколо багатьох об'єктів Пролог а + +, які обмінюються повідомленнями. У цьому сенсі Пролог + + ближче до чистого об'єктно-орієнтованого мови, такому, як Smalltalk, ніж C + + або Object Pascal. Визначення об'єктів будуються виходячи з викликів

Open_Object [імя_об'екта] і Close_Object [імя_об'екта], а методи визначаються практично так само, як в інших об'єктно-орієнтованих мовах. Для завдання спадкоємства можна явно вказати, який метод якого об'єкта повинен успадковуватися, що є необхідним для багаторазового наслідування.

3.7.   Лекс

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

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

Лексичний аналізатор розпізнає тип кожної лексеми і відповідним чином позначає її. Наприклад, при компіляції Сі-програми можуть бути виділені наступні типи лексем: число, ідентифікатор, оператор, обмежувач і т.д.

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

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

3.8. C і

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

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

3.8.1. Особливості мови Сі

Мова Сі має свої суттєві особливості, давайте перерахуємо деякі з них:

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

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

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

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

3.8.2. Недоліки мови Сі:

Також, як і особливостей, у мові Сі присутня купа недоліків. Адже від них не захищений не один проект, в тому числі проект розробки та виконання програм, на мові Сі:

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

3.9.    Сі + +

Безумовно, Сі + + сходить, головним чином, до Cі. Cи збережений як підмножина, тому зробленого у акценту на засобах низького рівня досить, щоб справлятися із самими насущними завданнями системного програмування. Cи, у свою чергу, багато чим зобов'язаний своєму попередникові BCPL.

Назва Сі + + - винахід літа 1983-його. Більш ранні версії мови використовувалися починаючи з 1980-ого і були відомі як "Сі з Класами". Спочатку мова була придуманий тому, що автор хотів написати подієво керовані моделі для чого був би ідеальний Simula67, якщо не брати до уваги ефективність. "Сі з Класами" використовувався для великих проектів моделювання, в яких суворо тестувалися можливості написання програм, що вимагають (тільки) мінімального простору пам'яті і часу на виконання. У "Cи з Класами" не вистачало перевантаження операцій, посилань, віртуальних функцій і багатьох деталей. Сі + + був вперше введений за межами дослідницької групи автора в липні 1983-го. Проте тоді багато особливостей Сі + + були ще не придумані.

Назва Сі + + вигадав Рік Массітті. Назва вказує на еволюційну природу переходу до нього від Cі. "+ +" - Це операція збільшення у Cі. Трохи більш короткий ім'я C + є синтаксичної помилкою, крім того, воно вже було використано як ім'я зовсім іншої мови. Знавці семантики знаходять, що Сі + + гірше, ніж C + +. Назви D мова не отримав, оскільки він є розширенням і в ньому не робиться спроб зцілитися від проблем шляхом викидання різних особливостей.

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

Спочатку Сі + + був розроблений, щоб авторові і його друзям не доводилося програмувати на асемблері, або інших сучасних мовах високого рівня. Основним його призначенням було зробити написання хороших програм більш простим і приємним для окремого програміста. Плану розробки Сі + + на папері ніколи не було. Проект, документація та реалізація рухалися одночасно. Зрозуміло, зовнішній інтерфейс Сі + + був написаний на Сі + +. Ніколи не існувало "Проекту Сі + +" і "Комітету з розробки Сі + +". Тому Сі + + розвивався і продовжує розвиватися у всіх напрямках, щоб справлятися зі складнощами, з якими стикаються користувачі, а також у процесі дискусій автора з його друзями та колегами.

В якості базової мови для Сі + + був обраний Cи, тому що він:

багатоцільовий, лаконічний і відносно низького рівня:

відповідає більшості завдань системного програмування:

йде скрізь і на всьому:

придатний у середовищі програмування UNIX.

У є свої складності, але в наспіх спроектованому мові теж були б свої, а складнощі нам відомі. Найголовніше, робота з дозволила "Сі з Класами" бути корисним (правда, незручним) інструментом в ході перших місяців роздумів про додавання до Cи Simula-подібних класів.

Сі + + став використовуватися ширше, і в міру того, як можливості, надані їм крім можливостей Cи, ставали все більш суттєвими, знову і знову порушувалося питання про те, чи зберігати сумісність з Cі. Ясно, що відмовившись від певної частини спадщини можна було б уникнути низки проблем. Це не було зроблено, тому що:

є мільйони рядків на Cи, які могли б принести користь в Сі + + за умови, що їх не потрібно було б повністю переписувати з на Сі + +;

є сотні тисяч рядків бібліотечних функцій і сервісних програм, написаних на які можна було б використати з або на Сі + + за умови, що Сі + + повністю сумісний з із завантаження та синтаксично дуже схожий на Cи;

є десятки тисяч програмістів, які знають Cи, і яким, тому, потрібно тільки навчитися використовувати нові особливості Сі + +, а не заново вивчати його основи;

оскільки Сі + + і будуть використовуватися на одних і тих же системах одними і тими ж людьми, відмінності повинні бути або дуже великими, або дуже маленькими, щоб звести до мінімуму помилки та непорозуміння.

Пізніше була проведена перевірка визначення Сі + +, щоб упевнитися в тому, що будь-яка конструкція, допустима і у Cі, і в Сі + +, дійсно означає в обох мовах одне і те ж.

Сі + + був розвинений з мови програмування Сі і за дуже небагатьма винятками зберігає як підмножина. Базова мова, підмножина Сі + +, спроектований так, що є дуже близьке відповідність між його типами, операціями та операторами і комп'ютерними об'єктами, з якими безпосередньо доводиться мати справу: числами, символами та адресами. За винятком операцій вільної пам'яті new і delete, окремі вислови і оператори Сі + + зазвичай не потребують прихованої підтримки під час виконання або підпрограмах.

Одним з початкових призначень було застосування його замість програмування на асемблері в найбільш нагальних завданнях системного програмування. Коли проектувався Сі + +, були вжиті заходи, щоб не ставити під загрозу успіхи в цій області. Різниця між і Сі + + складається в першу чергу в ступені уваги, що приділяється типам і структурам. виразний і поблажливий. Сі + + ще більш виразна, але щоб досягти цієї виразності, програміст повинен приділити більше уваги типами об'єктів. Коли відомі типи об'єктів, компілятор може правильно обробляти вираження, тоді як в іншому випадку програмісту довелося б ставити дії з болісними подробицями. Знання типів об'єктів також дозволяє компілятору виявляти помилки, які в іншому разі залишилися б до тестування. Зауважте, що використання системи типів для того, щоб отримати перевірку параметрів функцій, захистити дані від випадкового перекручування, задати нові операції і т.д., саме по собі не збільшує витрат за часом виконання і пам'яті.

Особливу увагу, приділену при розробці Сі + + структурі, відбилося на зростанні масштабу програм, написаних з часу розробки Cі. Маленьку програму (менше 1000 рядків) ви можете змусити працювати за допомогою грубої сили, навіть порушуючи всі правила хорошого стилю. Для програм великих розмірів це не зовсім так. Якщо програма в 10 000 рядків має погану структуру, то ви виявите, що нові помилки з'являються так само швидко, як видаляються старі. Сі + + був розроблений так, щоб дати можливість розумним чином структурувати великі програми таким чином, щоб для однієї людини не було непомірним справлятися з програмами в 25 000 рядків. Існують програми набагато більших розмірів, однак ті, які працюють, в цілому, як виявляється, складаються з великого числа майже незалежних частин, розмір кожної з яких набагато нижче зазначених меж.

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

3.9.1. Зауваження щодо проекту мови Сі + +

Істотним критерієм при розробці мови була простота. Там, де виникав вибір між спрощенням керівництва з мови та іншої документації і спрощенням компілятора, вибиралося перше. Величезне значення також надавалося сумісності з Cи, це завадило видалити синтаксис Cі.

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

Виключалися ті риси, які могли б спричинити додаткові витрати пам'яті або часу виконання. Наприклад, думки про те, щоб зробити необхідним зберігання в кожному об'єкті "господарської" інформації, були відкинуті. Якщо користувач описує структуру, що складається з двох 16-бітових величин, то структура поміститься в 32-бітовий регістр.

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

4. ВИСНОВОК.

Винахід мови програмування вищого рівня дозволило нам спілкуватися з машиною, розуміти її (якщо звичайно Вам знаком використовувана мова), як розуміє американець трохи знайомий з російською мовою стародавню азбуку Кирилиці. Простіше кажучи, ми в нашому розвитку науки програмування поки що з ЕОМ на ВИ. Повірте мені це не сарказм ви тільки подивіться як розвинулася наука програмування з того часу, як з'явилися мови програмування, але ж мова програмування вищого рівня, судячи з усього ще немовля. Але якщо ми звернемо увагу на темпи росту і розвитку новітніх технологій в області програмування, то можна припустити, що в найближчому майбутньому, людські пізнання в цій сфері, допоможуть зробити на світло мови, вміють приймати, обробляти і передавати інформації у вигляді думки, слова, звуку чи жесту. Так і хочеться назвати це дітище комп'ютеризованого майбутнього: «мови програмування" найвищого "рівня». Можливо, концепція вирішення цього питання проста, а найближче майбутнє цього проекту вже не за горами, і в цей момент, де-небудь в Запоріжжі, Амстердамі, Токіо чи Єрусалимі, перед стареньким 133MHz горбиться молодий, ніким не визнаний фахівець і розробляє новітню систему штучного інтелекту , яка нарешті дозволить людині, з допомогою своїх машинних мов, вести діалог з машиною на ТИ.

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

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

Єдиний спосіб вивчати нову мову програмування - писати на ньому програми.

Брайен Керніган

5. БІБЛІОГРАФІЯ

1) "LEX - генератор програм лексичного аналізу"

Давидів Михайло Ізгіяевіч; Антонов Вадим Геннадійович

МОСКВА - 1985;

2) "BASIC Face-off", Justin J. Crom,

PC Tech Journal, September 1987, p.136

Переклад: Лопухов В.М. (Інтегратор Promt98);

3) "Мова програмування Сі." Б.В. Керніган, Д. Рітчі, А. Фьюер.

Російський переклад: Москва: Фінанси і Статистика. 1985 р.;

4) "Основи автоматизації" ч.1, Золотарьов В.В., 1978 р.;

5) "Мови програмування" кн.5, Ваулин А.С., 1993 р.;

6) "Мови програмування: розробка та реалізація",

П. Терренс, 1979 р.;

7) "Введення в програмування на мові Асемблер"

ч.1, Касвандс Е.Г.;

8) "Мови програмування високого рівня",

Хротко Г., 1982 р.;

9) "Мови програмування",

Малютін Е.А., Малютіна Л.В., 1982 р.;

10) "Нові мови програмування та тенденції їх розвитку", Ушкова В., 1982 р.;

11) "Світ Ліспу" т.1, Хьювенен Е., Сеппенен Й., 1990 р.;

12) "Алгоритмічні мови реального часу", Янг С., 1985 р..


Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Реферат
95кб. | скачати


Схожі роботи:
Мови програмування
Мови програмування 2
Мови та системи програмування
Мови та технологія програмування
Алгоритмічні мови програмування
Мови та технологія програмування 2
Операції мови програмування С
Історичний огляд класифікація та характеристика мов програмування
АвтоЛІСП - реалізація мови програмування
© Усі права захищені
написати до нас