Відмінності між версіями «Мови програмування2»
(Створена сторінка: '''Мова програмування''' - формальна знакова система, призначена для запису комп'ютерних пр...) |
|||
(не показано 2 проміжні версії ще одного учасника) | |||
Рядок 49: | Рядок 49: | ||
Мова програмування будується відповідно до тієї чи іншої базової моделлю обчислень і парадигмою програмування. | Мова програмування будується відповідно до тієї чи іншої базової моделлю обчислень і парадигмою програмування. | ||
− | Незважаючи на те, що більшість мов орієнтоване на імперативну модель обчислень, що задається фон-неймановской архітектурою ЕОМ, існують і інші підходи. Можна згадати мови зі стекової обчислювальної моделлю ( Forth, Factor, Postscript тощо), а також функціональне ( Лісп, Haskell, ML тощо) і логічне програмування ( Пролог) і мову Рефаїл, заснований на моделі обчислень, введеної радянським математиком А. А. Марковим-молодшим. | + | Незважаючи на те, що більшість мов орієнтоване на імперативну модель обчислень, що задається фон-неймановской архітектурою ЕОМ, існують і інші підходи. Можна згадати мови зі стекової обчислювальної моделлю ( Forth, Factor, Postscript тощо), а також функціональне ( Лісп, Haskell, ML тощо) і логічне програмування ( Пролог) і мову Рефаїл, заснований на моделі обчислень, введеної радянським математиком А. А. Марковим-молодшим. [[:файл:мови_програмування.pdf|Імперативна і функціональна парадигми]] |
В даний час також активно розвиваються проблемно-орієнтовані, декларативні і візуальні мови програмування. | В даний час також активно розвиваються проблемно-орієнтовані, декларативні і візуальні мови програмування. | ||
Рядок 90: | Рядок 90: | ||
'''Класи мов програмування''' | '''Класи мов програмування''' | ||
− | - Функціональні | + | - [http://znaimo.com.ua/%D0%A4%D1%83%D0%BD%D0%BA%D1%86%D1%96%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Функціональні] |
− | - Процедурні (імперативні) | + | - [http://uk.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D1%96%D1%8F:%D0%86%D0%BC%D0%BF%D0%B5%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D1%96_%D0%BC%D0%BE%D0%B2%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Процедурні (імперативні)] |
- Стекові | - Стекові | ||
Рядок 98: | Рядок 98: | ||
- Векторні | - Векторні | ||
− | - Аспектно-орієнтовані | + | - [http://znaimo.com.ua/%D0%90%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Аспектно-орієнтовані] |
− | - Декларативні | + | - [http://uk.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BB%D0%B0%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Декларативні] |
− | - Динамічні | + | -[http://znaimo.com.ua/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D1%96%D1%87%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Динамічні] |
− | - Навчальні | + | -[http://znaimo.com.ua/%D0%9B%D1%96%D0%BD%D1%96%D0%B9%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Навчальні] |
− | - Опис інтерфейсів | + | -[http://znaimo.com.ua/%D0%86%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F_%D0%B4%D0%BE%D0%B4%D0%B0%D1%82%D0%BA%D1%96%D0%B2 Опис інтерфейсів] |
− | - Прототипних | + | - [http://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D1%82%D0%B8%D0%BF%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Прототипних] |
− | - Об'єктно-орієнтовані | + | - [http://znaimo.com.ua/%D0%9E%D0%B1_%D1%94%D0%BA%D1%82%D0%BD%D0%BE-%D0%BE%D1%80%D1%96%D1%94%D0%BD%D1%82%D0%BE%D0%B2%D0%B0%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F#link14 Об'єктно-орієнтовані] |
− | - Рефлексивні - підтримують відображення. | + | - [https://docs.google.com/viewer?a=v&q=cache:Gp0hlRMdYgYJ:unicyb.kiev.ua/~kuzenko/it/it_demo05/Reflection_%25D0%25AF%25D0%25BD%25D1%2587%25D0%25B8%25D0%25BA.doc+%D0%A0%D0%B5%D1%84%D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%B2%D0%BD%D1%96+%D0%BC%D0%BE%D0%B2%D0%B8+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F&hl=ru&gl=ua&pid=bl&srcid=ADGEEShjrR9rfCkAuvW-5zkJhrfQ3epFySQ2mNU7inpainitRcn2fjCyYmDO296Y2bqFSBjOBbwpnpQgALzBNbUN6RA9IGcaNvF-UXbzl50kqIwpD-fgfQJVIJFC_gwPYgwye3VGd2Mq&sig=AHIEtbTK4zY04bAYOnNxQxCpXO6kiI2WXg Рефлексивні - підтримують відображення.] |
− | - Логічні | + | - [http://znaimo.com.ua/%D0%9B%D0%BE%D0%B3%D1%96%D1%87%D0%BD%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Логічні] |
− | - Паралельного програмування | + | - [https://docs.google.com/viewer?a=v&q=cache:QPyhsnVJxRcJ:pmk.fpm.kpi.ua/arhive_2010/05-DOSLIDZHENNYA%2520METODIV%2520I%2520TEHNOLOGIJ%2520PARALEL'NOGO%2520PROGRAMUVANNYA.pdf+%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE+%D0%BC%D0%BE%D0%B2%D0%B8+%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F&hl=ru&gl=ua&pid=bl&srcid=ADGEESjvKVk8VBqrVCTx8I3jCSrHsxtWKZN2mqxcdRWp5R8aqMvBDeCfe77RXpRoh20qzyg8DepF4oHoicFQlAfyXaXVB7zSCJCGBQ0vyI2y-mOkEGr992nxqo0vGK-E5zrsRImYxzRv&sig=AHIEtbTwKtxL_VPfrjLp0sxIkqAFA3mS9Q Паралельного програмування] |
- Скриптові (сценарні) | - Скриптові (сценарні) | ||
− | - Езотеричні | + | - [http://ukrmemoria.com/%D0%95%D0%B7%D0%BE%D1%82%D0%B5%D1%80%D0%B8%D1%87%D0%BD%D1%96_%D0%BC%D0%BE%D0%B2%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%83%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F Езотеричні] |
− | - C російським синтаксисом | + | - [http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%AF%D0%B7%D1%8B%D0%BA%D0%B8_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D1%81_%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%BC%D0%B8_%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%BC%D0%B8_%D1%81%D0%BB%D0%BE%D0%B2%D0%B0%D0%BC%D0%B8 C російським синтаксисом] |
Поточна версія на 14:58, 8 листопада 2012
Мова програмування - формальна знакова система, призначена для запису комп'ютерних програм. Мова програмування визначає набір лексичних, синтаксичних і семантичних правил, які задають зовнішній вигляд програми і дії, які виконає виконавець (комп'ютер) під її управлінням.
З часу створення перший програмований машин людство придумало більше двох з половиною тисяч мов програмування. Щороку їх кількість збільшується. Деякими мовами вміє користуватися тільки невелике число їх власних розробників, інші стають відомі мільйонам людей. Професійні програмісти іноді застосовують у своїй роботі більш десятка різноманітних мов програмування.
Творці мов по-різному тлумачать поняття мову програмування. До найбільш поширеним твердженням, що визнаються більшістю розробників, відносяться наступні:
- Функція: мова програмування призначений для написання комп'ютерних програм, які застосовуються для передачі комп'ютеру інструкцій щодо виконання того чи іншого обчислювального процесу та організації управління окремими пристроями.
- Завдання: мова програмування відрізняється від природних мов тим, що призначений для передачі команд і даних від людини до комп'ютера, у той час як природні мови використовуються для спілкування людей між собою. Можна узагальнити визначення "мов програмування" - це спосіб передачі команд, наказів, чіткого керівництва до дії, тоді як людські мови служать також для обміну інформацією.
- Виконання: мова програмування може використовувати спеціальні конструкції для визначення та маніпулювання структурами даних і управління процесом обчислень.
Стандартизація мов програмування
Мова програмування може бути представлений у вигляді набору специфікацій, що визначають його синтаксис і семантику.
Для багатьох широко поширених мов програмування створені міжнародні стандарти. Спеціальні організації проводять регулярне оновлення і публікацію специфікацій і формальних визначень відповідної мови. В рамках таких комітетів продовжується розробка і модернізація мов програмування та вирішуються питання про розширення або підтримки вже існуючих і нових мовних конструкцій.
Типи даних
Сучасні цифрові комп'ютери зазвичай є двійковими і дані зберігають у двійковому (бінарному) коді (хоча можливі реалізації і в інших системах числення). Ці дані як правило відображають інформацію з реального світу (імена, банківські рахунки, вимірювання та ін), що представляє високорівневі концепції.
Особлива система, по якій дані організовуються в програмі, - це система типів мови програмування, розробка і вивчення систем типів відома під назвою теорія типів. Мови можуть бути класифіковані як системи зі статичною типізацією і мови з динамічною типізацією.
Статично-типізовані мови можуть бути надалі поділені на мови з обов'язковою декларацією, де кожна змінна і оголошення функції має обов'язкове оголошення типу, і мови з виведеними типами. Іноді динамічно-типізовані мови називаються латентно-типізований.
Структури даних
Системи типів в мовах високого рівня дозволяють визначати складні, складені типи, так звані структури даних. Як правило, структурні типи даних утворюються як декартовій твір базових (атомарних) типів і раніше визначених складових типів.
Основні структури даних (списки, черги, хеш-таблиці, двійкові дерева і пари) часто представлені особливими синтаксичними конструкціями в мовах високого рівня. Такі дані структуруються автоматично.
Семантика мов програмування
Існує кілька підходів до визначення семантики мов програмування.
Найбільш широко поширені різновиди наступних трьох: операційного, дериваційного (аксіоматичного) і денотаціонного (математичного).
- При описі семантики в рамках операційного підходу зазвичай виконання конструкцій мови програмування інтерпретується за допомогою деякої уявної (абстрактної) ЕОМ.
- Дериваційні семантика описує наслідки виконання конструкцій мови за допомогою мови логіки і завдання перед-і постусловіем.
- Денотаціонная семантика оперує поняттями, типовими для математики - множини, відповідності, а також судження, затвердження та ін.
Мова програмування будується відповідно до тієї чи іншої базової моделлю обчислень і парадигмою програмування.
Незважаючи на те, що більшість мов орієнтоване на імперативну модель обчислень, що задається фон-неймановской архітектурою ЕОМ, існують і інші підходи. Можна згадати мови зі стекової обчислювальної моделлю ( Forth, Factor, Postscript тощо), а також функціональне ( Лісп, Haskell, ML тощо) і логічне програмування ( Пролог) і мову Рефаїл, заснований на моделі обчислень, введеної радянським математиком А. А. Марковим-молодшим. Імперативна і функціональна парадигми
В даний час також активно розвиваються проблемно-орієнтовані, декларативні і візуальні мови програмування.
Способи реалізації мов
Мови програмування можуть бути реалізовані як компільовані і інтерпретовані.
Програма на компільованих мов за допомогою компілятора (особливої програми) перетвориться ( компілюється) в машинний код (набір інструкцій) для даного типу процесора і далі збирається в здійснимий модуль, який може бути запущений на виконання як окрема програма. Іншими словами, компілятор переводить вихідний текст програми з мови програмування високого рівня в двійкові коди інструкцій процесора.
Якщо програма написана на скриптової мови, то Лари безпосередньо виконує ( інтерпретує) вихідний текст без попереднього перекладу. При цьому програма залишається мовою оригіналу і не може бути запущена без інтерпретатора. Процесор комп'ютера, в зв'язку з цим, можна назвати інтерпретатором для машинного коду.
Поділ на компільовані і інтерпретовані мови є умовним. Так, для будь-якого традиційно компилируемого мови, як, наприклад, Паскаль, можна написати інтерпретатор. Крім того, більшість сучасних "чистих" інтерпретаторів не виконують конструкції мови безпосередньо, а компілюють їх в деякий високорівневе проміжне представлення (наприклад, з разименованія змінних і розкриттям макросів).
Для будь-якого інтерпретується мови можна створити компілятор - наприклад, мова Лісп, спочатку інтерпретується, може компілюватися без яких би то не було обмежень. Створюваний під час виконання програми код може так само динамічно компілюватися під час виконання.
Як правило, скомпільовані програми виконуються швидше і не вимагають для виконання додаткових програм, так як вже переведені на машинну мову. Разом з тим, при кожній зміні тексту програми потрібно її перекомпіляція, що уповільнює процес розробки. Крім того, скомпільована програма може виконуватися тільки на тому ж типі комп'ютерів і, як правило, під тією ж операційною системою, на яку був розрахований компілятор. Щоб створити виконуваний файл для машини іншого типу, потрібна нова компіляція.
Інтерпретовані мови мають деякими специфічними додатковими можливостями (див. вище), крім того, програми на них можна запускати відразу ж після зміни, що полегшує розробку. Програма на скриптової мови може бути найчастіше запущена на різних типах машин та операційних систем без додаткових зусиль.
Однак інтерпретовані програми виконуються помітно повільніше, ніж компільовані, крім того, вони не можуть виконуватися без програми-інтерпретатора.
Деякі мови, наприклад, Java і C #, знаходяться між компільованих і інтерпретуються. А саме, програма компілюється не в машинний мову, а в машинно-незалежний код низького рівня, байт-код. Далі байт-код виконується віртуальною машиною. Для виконання байт-коду зазвичай використовується інтерпретація, хоча окремі його частини для прискорення роботи програми можуть бути трансльовані в машинний код безпосередньо під час виконання програми за технологією компіляції "на льоту" (Just-in-time compilation, JIT). Для Java байт-код виповнюється віртуальною машиною Java (Java Virtual Machine, JVM), для C # - Common Language Runtime.
Подібний підхід у деякому сенсі дозволяє використовувати плюси як інтерпретаторів, так і компіляторів. Слід згадати, що є мови, які мають та інтерпретатор, і компілятор ( Форт (Forth)).
Використовувані символи
Сучасні мови програмування розраховані на використання ASCII, тобто доступність всіх графічних символів ASCII є необхідною і достатньою умовою для запису будь-яких конструкцій мови. Керуючі символи ASCII використовуються обмежено: допускаються тільки повернення каретки CR, переклад рядка LF і горизонтальна табуляція HT (іноді також вертикальна табуляція VT і перехід до наступної сторінки FF).
Ранні мови, що виникли в епоху 6-бітних символів, використовували більш обмежений набір. Наприклад, алфавіт Фортрану включає 49 символів (включаючи пробіл): ABCDEFGHIJKLMNOPQRSTU VWXYZ 0 1 2 3 4 5 6 7 8 9 = + - * / (). , $ ':
Помітним винятком є мова APL, в якому використовується дуже багато спеціальних символів.
Використання символів за межами ASCII (наприклад, символів KOI8-R або символів Юнікоду) залежить від реалізації: іноді вони дозволяються тільки у коментарях і символьних / строкових константах, а іноді і в ідентифікаторах. В СРСР існували мови, де всі ключові слова писалися російськими літерами, але більшу популярність подібні мови не завоювали (виняток становить Вбудована мова програмування 1С: Підприємство).
Розширення набору використовуваних символів стримується тим, що багато проектів по розробці програмного забезпечення є міжнародними. Дуже складно було б працювати з кодом, де імена одних змінних записані російськими літерами, інших - арабськими, а третє - китайськими ієрогліфами. Разом з тим, для роботи з текстовими даними мови програмування нового покоління ( Delphi 2006, C #, Java, PureBasic) підтримують Unicode.
Класи мов програмування
- Стекові
- Векторні
- Рефлексивні - підтримують відображення.
- Логічні
- Скриптові (сценарні)