Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Movi_programuvannya_yikh_klasifikatsiya_ta_rozv...doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
246.88 Кб
Скачать

2. Теоретичні відомості

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

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

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

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

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

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

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

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

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

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

Машинна мова

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

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

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

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

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

Автокод

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

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

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

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

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

Макрос

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

Асемблер

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

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

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

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

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

Лісп

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

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

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

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

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

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

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

 

Фортран

Одним з перших і найбільш вдалих компіляторів стала мова Фортран, розроблений фірмою 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 .... . Але це вже наступний мову.

Бейсік

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

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

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

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

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

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

Рефаїл

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

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

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

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

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

Пролог і Пролог + +

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

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

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

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

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

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

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

Лекс

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

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

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

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

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

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

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

 

 

 

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

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

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

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

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

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

 

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

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

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

Сі + +

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]