Мо́ва програмува́ння (англ. Programming language) — це штучна мова, створена для передачі команд машинам, зокрема комп'ютерам. Мови програмування використовуються для створення програм, які контролюють поведінку машин, та для запису алгоритмів.
Суворіше визначення: мова програмування — це система позначень для опису алгоритмів і структур даних, певна штучна формальна система, засобами якої можна виражати алгоритми. Мову програмування визначає набір лексичних, синтаксичних і семантичних правил, що задають зовнішній вигляд програми та дії, які виконує виконавець (комп'ютер) під її управлінням.
З часу створення перших програмованих машин було створено понад дві з половиною тисячі мов програмування. Щороку до них додаються нові. Деякими мовами вміє користуватись тільки невелике число їхніх розробників, інші стають відомі мільйонам людей. Професійні програмісти зазвичай застосовують у своїй роботі декілька мов програмування.
Означення
Мова програмування — це нотація для запису програм, які є специфікаціями якогось обчислення або алгоритму.
Історія
Перші мови програмування з'явилися задовго до появи перших комп'ютерів. Ще в XIX столітті існували «програмовані» ткацькі верстати та піаніно-програвачі, спосіб програмування яких нагадує так звані предметно-орієнтовані мови програмування. На початку XX століття починають використовувати перфокарти та механічну обробку даних. У 1930—1940 рр. виникає лямбда-числення та машина Тюринга, які застосовували математичну абстракцію для опису алгоритмів. Лямбда-числення згодом здійснило вплив на проєктування мов програмування.
У 1940 роках створюються перші електричні двійкові комп'ютери. Вважається, що першу мову програмування високого рівня — Планкалькюль (нім. Plankalkül) розробив німець Конрад Цузе в період 1943—1945 років, але в той час вона не була реалізована і нею не зацікавилися. Реалізацією мови зайнялися і здійснили її лише в 1998—2000 роках.
Наприкінці 1940-х — початку 1950-х років застосовували інтерпретовані системи кодування, коли певні команди мови програмування кодували числами, які вже інтерпретувалися машинним кодом. Ці системи називалися «автоматичним програмуванням» і були простішими для програмування, ніж машинні коди, але могли мати значно меншу (до 50 разів) швидкодію, через що перевагу часто надавали машинним кодам. До таких систем належали — Short Code для BINAC (1949) і UNIVAC I (1952), [en] для IBM 701, розроблена Джоном Бекусом у 1954 році.
Першою багатоконцептуальною (імперативною та декларативною) мовою програмування високого рівня була Адресна мова програмування (реалізована 1955 року на ЕОМ «Київ»). Мова має опосередковану адресацію вищих рангів (вказівники є аналогом). В ЕОМ «Київ» апаратно була реалізована «штрих-операція», аналогом якої є розіменування вказівників. Операція багаторазового розіменування вказівників (Multiple indirection) була реалізована груповими операціями модернізації адрес задля прискорення обробки деревоподібних форматів (Абстрактні типи даних є частковим випадком, оскільки деревоподібні формати припускають наявність у вузлах «дерева» процедур обробки даних, як в ООП). Адресна мова програмування має вичерпні засоби декларативного програмування. До найпотужнішого декларативного засобу належить «мінус штрих-операція», яка є оберненою до розіменування вказівника. Використання «мінус штрих-операції» нагадує використання первинних і зовнішніх ключів в реляційних базах даних: по заданому первинному ключу визначити місце розташування (адреси) в іншій таблиці, зовнішні ключі яких збігаються з заданим первинним ключем.
Першою широковживаною компільованою мовою став розроблений групою Джона Бекуса Фортран, анонсований 1954 року та випущений 1957 року для IBM 704. Основним призначенням Фортрану були швидкі наукові обчислення, оголошувалося, що швидкодія згенерованого компілятором коду майже не відрізнятиметься від написаного вручну машинного коду. Уже у квітні 1958 року близько половини програм для IBM 704 були написані на Фортрані. Випущений 1958 року Фортран II дозволяв незалежну компіляцію підпрограм, що давало змогу створювати більші програми, оскільки через низьку надійність IBM 704 не можна було скомпілювати без збоїв велику програму (понад 300—400 рядків) одразу. Розроблений у 1960—1962 роках Фортран IV був однією з найпоширеніших мов того часу і лишався стандартною версією Фортрану до появи 1978 року .
1958 року в MIT розробили LISP — першу функційну мову, яка понад чверть століття домінувала у програмуванні задач штучного інтелекту.
Наприкінці 1950-х років почали розробляти різні мови програмування. 1958 року декілька значних груп комп'ютерних користувачів у США, включаючи SHARE — групу науковців-користувачів IBM і USE (, група науковців-користувачів UNIVAC) запропонували ACM заснувати робочу групу зі створення . Також ще 1955 року німецьке Товариство прикладної математики й механіки (GAMM) заснувало комітет зі створення універсальної мови програмування. У кінці травня 1958 року було проведено зустріч у Цюриху між ACM і GAMM, на матеріалах якої у грудні опубліковано ALGOL 58 Report. На його основі було створено 3 значні реалізації — MAD (1961), NELIAC (1963), (1963). З них лише JOVIAL отримав поширення, ставши на чверть століття офіційною мовою програмування у Військово-морських силах США. SHARE та IBM почали створення власної реалізації ALGOL, але припинили, врахувавши витрати на створення і просування Фортрану.
Упродовж 1959 року ALGOL 58 широко обговорювався, була запропонована нотація для опису синтаксису мов програмування — . 1960 року проведено чергову зустріч і опубліковано ALGOL 60 Report. ALGOL вплинув на багато мов програмування і став стандартною мовою для публікації алгоритмів, але через ряд причин не одержав широкого розповсюдження — він був заскладним, і не було реалізацій, які підтримували його повністю, відсутність стандартного введення-виведення зумовила появу різних несумісних реалізацій, деякі неоднозначності опису мови так і не були розв'язані. Окрім того, широкого вжитку уже набув Фортран, і IBM не підтримала ALGOL.
1959 року було проведено зустріч у Пентагоні для створення мови CBL (Common Business Language), засновано комітет з її створення, і 1960 року опубліковано початкову специфікацію COBOL 60, який невдовзі став першою мовою, ухваленою у Міністерстві оборони США. 1968 року COBOL було стандартизовано ANSI.
У 1964 році було створено спрощену мову BASIC (Beginners All-purpose Symbolic Instruction Code) для навчання програмуванню студентів, які переважно спеціалізувалися у вільних мистецтвах, а не технічних науках.
Тоді як науковці переважно використовували Фортран, а бізнес — COBOL, 1963 року в IBM вирішили створити універсальну платформу (IBM/360) і мову програмування. У стислі терміни до 1965 року було розроблено мову (PL/I), яка поєднувала можливості Фортрану, ALGOL і COBOL, і виявилась заскладною, хоча і була у широкому вжитку в 1970-х у наукових і бізнес-задачах, також її підмножини (, ) використовувалися для навчання програмуванню.
На початку 1960-х років було створено перші мови із динамічною типізацією — APL і SNOBOL.
SIMULA 67 була першою об'єктно-орієнтованою мовою програмування.
1965 року Ніклаус Вірт і Тоні Гоар запропонували комітету з розвитку мови ALGOL свою версію, яку згодом назвали ALGOL-W і застосовували для навчання в деяких університетах. Пропозиція була відхилена через незначну кількість змін на користь значно складнішого ALGOL 68. У ALGOL 68 з'явилися визначення структур даних і динамічні масиви. ALGOL 68 став першою мовою із формальною специфікацією, яка, однак, була складною для розуміння.
1971 року Вірт опублікував опис мови Pascal, яка у 1970-х стала загальновживаною для навчання студентів.
1972 року Деніс Річі розробив у Bell Labs мову C. Тоді ж у Марселі створено інтерпретатор мови Пролог — першої і найвідомішої мови логічного програмування. Алан Кей у Xerox PARC розробив першу широко вживану об'єктно-орієнтовану мову — Smalltalk.
1973 року Робін Мілнер в Единбурзькому університеті створив ML.
1975 року в Массачусетському технологічному інституті описано спрощений діалект мови Лісп — Scheme.
1976 року випущено мову для статистичного програмування S, на базі якої 1993 року створено R.
1977 року випущено Bourne shell і awk.
1975 року Міністерство оборони США утворило міжнародну групу для створення нової мови програмування для власних потреб, конкурс 1979 року виграла мова Ада.
1981 року випущено II.
1984 року з метою об'єднання різних діалектів Ліспу створено Common Lisp. Випущено MATLAB
1985 року Б'ярн Страуструп опублікував реалізацію мови .
1986 року опубліковано мову Objective-C і створено Erlang. Тоді ж Borland і Apple незалежно створили об'єктно-орієнтоване розширення мови Pascal — Object Pascal.
1987 року створено Perl.
1990 року опубліковано Standard ML і Haskell.
1991 року створено Visual Basic і опубліковано Python.
1992 року випущено Oracle 7 з підтримкою (PL/SQL)
1993 року створено Lua.
1995 року Sun Microsystems випустила Java, Netscape — JavaScript, тоді ж створено PHP і Ruby.
1996 року створено OCaml.
2001 року створено C#.
2002 року створено F#.
2003 року створено Scala.
2009 року створено Go.
2010 року створено Kotlin.
2010 року була офіційно представлена мова програмування Rust на Mozilla Summit 2010. Роботу над мовою розпочав ще 2006 року.
2012 року створено Elm.
2012 року створено Elixir.
2014 року на конференції розробників WWDC 2014 було представлено мову Swift.
2014 року презентовано перший офіційний реліз мови програмування Crystal.
Елементи
Синтаксис
Синтаксис мови програмування визначає те, як буде виглядати програма цією мовою, зокрема, як пишуться оператори, оголошення й інші мовні конструкції. Наприклад, оголошення масиву V з десяти елементів у форматі цілих чисел у мові С буде виглядати так:
int V[10];
На мові Pascal:
V: array[0..9] of integer;
Семантика
Термін семантика стосується значення мови, на відміну від її форми (синтаксису). Наприклад, термін «семантика оператора» означає дію, яку виконує оператор під час виконання програми. Таким чином, семантика мови програмування — це сукупність семантик окремих елементів, дозволених синтаксисом мови.
Статична семантика
Статична семантика описує обмеження на структуру текстів мови які важко або неможливо виразити звичайними структурними формалізмами. Для компільованих мов, статична семантика, по суті, це правила які можуть бути перевіреними на етапі компіляції. Наприклад перевірка того що кожен ідентифікатор задекларований до того як використовується (в мовах які потребують таких декларацій) або що варіанти в операторі switch різні. Багато важливих обмежень цього типу, такі як перевірка використання ідентифікатора в правильному контексті (наприклад заборона додавання чисел до функцій), або що виклики підпрограма мають правильну кількість і типи аргументів можуть бути забезпеченні визначенням їх як правил логіки яка називається системою типізації. Інші форми статичного аналізу, такі як [en] також можуть бути частиною статичної семантики. Такі мови програмування як Java та С# мають як частину своєї статичної семантики [en] — форму аналізу потоку даних.
Динамічна семантика
Коли дані описані, комп'ютер має отримати інструкції щось робити з даними. Наприклад, семантика може описувати стратегії обчислення за якими отримуються значення виразів, або спосіб яким інструкції визначають потік керування. Динамічна семантика мови (також відома як семантика виконання, англ. execution semantics) визначає як і коли різні конструкції мови повинні задавати поведінку програми. Існує багато способів задання семантики виконання. Для опису семантики виконання мов, які часто застосовуються на практиці, використовується природна мова. Велика частина досліджень мов програмування стосується формальної семантики мов програмування.
Типи даних
Область зберігання даних в апаратній частині комп'ютера (пам'ять, регістри та зовнішні запам'ятовувальні пристрої) зазвичай мають доволі просту структуру в вигляді послідовності бітів, згрупованих в байти або слова. Проте в віртуальному комп'ютері, як правило, організовано складнішим чином — в різні моменти виконання програми використовуються такі форми зберігання даних, як стеки, масиви, числа, символьні рядки та інші. Один або декілька однотипних елементів даних, об'єднаних в одне ціле в віртуальному комп'ютері в певний момент виконання програми, заведено називати об'єктом даних. При виконанні програми існує багато об'єктів даних різних типів. Тип даних — це деякий клас об'єктів даних разом з набором операцій для створення і роботи з ним. В кожній мові програмування є певний набір вбудованих примітивних типів даних. Додатково в мові можуть бути передбачені засоби, що дозволяють програмісту визначати нові типи даних.
Класифікація мов програмування
Мови класифікують за такими критеріями[]:
- Рівень абстракції
- Мови програмування високого рівня оперують сутностями ближчими людині, такими як об'єкти, змінні, функції. Мови програмування нижчого рівня оперують сутностями ближчими машині: байти, адреси, інструкції. Текст програми мовою високого рівня зазвичай набагато коротший ніж текст такої самої програми мовою низького рівня, проте програма має більший розмір.
- Ділянка застосування
- Універсальні та спеціалізовані. Спеціалізовані мови теж бувають Тюрінг-повні, та все ж їх ділянка застосування обмежена, як, наприклад, у мови shell.
- Підтримувані парадигми програмування
- Об'єктно-орієнтовані, логічні, функційні, структурні…
Імперативні мови ґрунтуються на ідеї змінної, значення якої змінюється присвоєнням. Вони називаються імперативними (лат. imperative — наказовий), оскільки складаються із послідовностей команд, які звичайно містять присвоєння змінних <code><назва_змінної> = <[[вираз]]></code>, де вираз може посилатися на значення змінних присвоєних попередніми командами.
Способи реалізації мов
Мови програмування можуть бути реалізовані як компільовані та інтерпретовані.
Програма компільованою мовою за допомогою компілятора (особливої програми) (компілюється) в машинний код (набір інструкцій) для даного типу процесора, що записується у об'єктний модуль. З одного або кількох об'єктних файлів компонувальник формує виконуваний файл, який може бути запущений на виконання як окрема програма. Іншими словами, компілятор переводить вихідний текст програми з мови програмування високого рівня в двійкові коди інструкцій процесора.
Якщо програма написана скриптовою мовою, то інтерпретатор безпосередньо виконує (інтерпретує) вихідний текст без попереднього перекладу. При цьому програма залишається мовою оригіналу і не може бути запущена без інтерпретатора. Процесор комп'ютера, у зв'язку з цим, можна назвати інтерпретатором для машинного коду.
Поділ на компільовані і інтерпретовані мови є умовним. Так, для будь-якої традиційно компіляційної мови, як, наприклад, Паскаль, можна написати інтерпретатор. Крім того, більшість сучасних «чистих» інтерпретаторів не виконують конструкції мови безпосередньо, а компілюють їх в деяке високорівневе проміжне представлення (наприклад, з розіменуванням змінних і розкриттям макросів).
Для будь-якої інтерпретувальної мови можна створити компілятор — наприклад, мова Лісп, початково інтерпретована, може компілюватися без обмежень. Створюваний під час виконання програми код може так само динамічно компілюватися під час виконання.
Як правило, скомпільовані програми виконуються швидше і не вимагають для виконання додаткових програм, оскільки вже переведені на машинну мову. Разом з тим, при кожній зміні тексту програми потрібно її перекомпіляція, що уповільнює процес розробки. Крім того, скомпільована програма може виконуватися тільки на тому ж типі комп'ютерів і, як правило, під тією ж операційною системою, на яку був розрахований компілятор. Щоб створити виконуваний файл для машини іншого типу, потрібна нова компіляція.
Інтерпретовані мови володіють деякими специфічними додатковими можливостями (див. вище), крім того, програми на них можна запускати відразу ж після зміни, що полегшує розробку. Програма скриптовою мовою може бути найчастіше запущена на різних типах машин та операційних систем без додаткових зусиль.
Однак інтерпретовані програми виконуються помітно повільніше, ніж компільовані, крім того, вони не можуть виконуватися без програми-інтерпретатора.
Деякі мови, наприклад, Java та C#, перебувають між компільованими і інтерпретованими. А саме, програма компілюється не в машинну мову, а в машинно-незалежний код низького рівня, байт-код. Далі байт-код виконується віртуальною машиною. Для виконання байт-коду зазвичай використовується інтерпретація, хоча окремі його частини для прискорення роботи програми можуть бути трансльовані в машинний код безпосередньо під час виконання програми за технологією компіляції «на льоту» (Just-in-time compilation, JIT). Для Java байт-код виконується віртуальною машиною Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.
Подібний підхід у деякому сенсі дозволяє використовувати плюси як інтерпретаторів, так і компіляторів. Слід згадати, що є мови, які мають і інтерпретатор, і компілятор (Форт (Forth)).
Процедури та функції
Підпрограми діляться на процедури та функції: Синтаксично процедури та функції складаються з заголовка (що містить ключове слово procedure
або function
, ім'ям, за яким може слідувати опис передаваних параметрів в дужках, тип повертаного значення через символ двокрапки для функцій і крапки з комою для процедур), після заголовка слідує 'тіло', після якого ставиться символ ;
.
program mine(output); var i : integer; procedure print(var j: integer); function next(k: integer): integer; begin next := k + 1 end; begin writeln('Всього: ', j); j := next(j) end; begin i := 1; while i <= 10 do print(i) end.
Тіло процедури, як і програми, своєю чергою може містити описи процедур і функцій. Таким чином, процедури і функції можуть бути вкладені один в одного як завгодно глибоко, при цьому тіло програми — саме верхнє в ланцюжку.
Причому вміст секцій опису змінних, типів, констант, зовнішнього тіла (процедури, функції, програми), розташованих перед описом процедури/функції, доступні усередині неї. Також, в більшості діалектів з процедури можна звертатися до параметрів зовнішньої процедури.
Услід за заголовком процедур/функцій замість тіла може поміщатися ключове слово forward
, це робиться в тому випадку, якщо опис процедури/функції розташовується в програмі після її виклику, і пов'язано з підтримуваною в Паскалі можливістю компіляції програми за один прохід.
Процедури відрізняються від функцій тим, що функції повертають якесь значення, а процедури — ні.
Об'єктно-орієнтоване програмування
Об'єктно-орієнтоване програмування (ООП) — це технологія створення складного програмного забезпечення, яке засноване на представленні програми у вигляді сукупності об'єктів, кожен з яких є екземпляром певного класу, а класи утворюють ієрархію зі спадкоємством властивостей.
Основна перевага ООП — це значне спрощення процесів створення та модифікації програмних систем. Набагато легше маніпулювати 100 об'єктами, кожен з яких сам відповідає за свою поведінку і обробку даних пов'язаних з ним, ніж тисячами функцій розкиданих по різних модулях.
Основні недоліки в ООП — це деяке зниження швидкодії через складнішу організацію програмної системи, а також, як правило, помітне збільшення об'єму бінарного коду (особливо при використанні стандартних бібліотек класів в невеликих програмах) через те, що більшість сучасних компіляторів і компонувальників не здатні виявити і видалити весь код, що доводиться на невживані класи, віртуальні методи і інші елементи ООП.
Семантика мов програмування
Існує кілька підходів до визначення семантики мов програмування.
Найбільш широко поширені наступні три різновиди семантик: операційна, дериваційна (аксіоматична) і денотаційна (математична)[].
- При описі семантики в рамках операційного підходу зазвичай виконання конструкцій мови програмування інтерпретується за допомогою деякої уявної (абстрактної) ЕОМ.
- Дериваційна семантика описує наслідки виконання конструкцій мови за допомогою мови логіки і завдання перед- і постумов.
- Денотаційна семантика оперує поняттями, типовими для математики — множини, відповідності, а також судження, твердження та ін.
Мови програмування низького рівня
Перші комп'ютери доводилось програмувати двійковими машинними кодами. Проте програмувати таким чином — доволі трудомістке і важке завдання. Для спрощення цього завдання почали з'являтися мови програмування низького рівня, які дозволяли задавати машинні команди в зрозумілішому для людини вигляді. Для перетворення їх у двійковий код були створені спеціальні програми — асемблери.
Прикладом мови низького рівня є мова асемблера. Мови низького рівня орієнтовані на конкретний тип процесора і враховують його особливості, тому для перенесення програми на асемблері на іншу апаратну платформу її потрібно майже цілком переписати. Певні відмінності є і в синтаксисі програм під різні компілятори. Щоправда, центральні процесори для комп'ютерів фірм AMD та Intel практично сумісні й відрізняються лише деякими специфічними командами. А ось спеціалізовані процесори для інших пристроїв, наприклад, відеокарт, телефонів містять суттєві відмінності.
Переваги
За допомогою мов низького рівня створюють ефективні й компактні програми, оскільки розробник отримує доступ до всіх можливостей процесора.
Вади
- Програміст, що працює з мовами низького рівня, має бути високої кваліфікації, добре розуміти будову , для якої створює програму.
- Результівна програма не може бути перенесена на комп'ютер або пристрій з іншим типом процесора; часто труднощі виникають і при перенесенні програми для іншої операційної системи
- Значний час розробки великих і складних програм.
Мови низького рівня, як правило, використовують для написання невеликих системних програм, драйверів пристроїв, модулів стиків з нестандартним обладнанням, програмування спеціалізованих мікропроцесорів, коли найважливішими вимогами є компактність, швидкодія і можливість прямого доступу до апаратних ресурсів.
Мови програмування високого рівня
Транслятори поділяються на:
- компілятори — перетворюють текст програми в машинний код, який можна зберегти і після цього використовувати уже без компілятора (прикладом є виконувальні файли з розширенням *.exe).
- інтерпретатори — перетворюють частину програми в машинний код, виконують і після цього переходять до наступної частини. При цьому щоразу при виконанні програми використовується інтерпретатор.
Можна сказати є зрозумілішими людині, ніж комп'ютеру. Особливості конкретних комп'ютерних архітектур в них не враховуються, тому створені програми легко переносяться з комп'ютера на комп'ютер. Здебільшого достатньо просто перекомпілювати програму під певну комп'ютерну архітектурну та операційну систему. Розробляти програми на таких мовах значно простіше і помилок допускається менше. Значно скорочується час розробки програми, що особливо важливо при роботі над великими програмними проєктами.
Наразі у середовищі розробників вважається, що мови програмування, які мають прямий доступ до пам'яті та регістрів або мають асемблерні вставки, потрібно вважати мовами програмування з низьким рівнем абстракції. Тому більшість мов, які вважалися мовами високого рівня до 2000-го року зараз вже такими не вважаються.
- Адресна мова програмування
- Фортран
- Кобол
- Алгол
- Pascal
- PascalABC
- Java
- C
- C++
- Objective C
- Smalltalk
- C#
- Delphi
Недоліком мов високого рівня є більший розмір програм у порівнянні з програмами мовою низького рівня. Сам текст програм мовою високого рівня менший, проте, якщо взяти у байтах, то код початково писаний на асемблері буде компактніший. Тому в основному мови високого рівня використовуються для розробок програмного забезпечення комп'ютерів, і пристроїв, які мають великий обсяг пам'яті. А різні підвиди асемблеру застосовуються для програмування інших пристроїв, де критичним є розмір програми.
Покоління мов програмування
Інколи в літературі та в інтернеті згадують про п'ять поколінь мов програмування, щоправда, даний поділ є спірним і суперечним. В професійній літературі з програмування доволі рідко згадують про покоління мов програмування, а більше зосереджуються на функціональній класифікації мов програмування. Крім того, саме віднесення певних мов до різних поколінь різниться у різних авторів.
Поділ на покоління мов програмування почав поширюватись з появою високорівневих мов програмування і до того не застосовувався. Високорівневі мови програмування почали вважатися третім поколінням, асемблерні мови — другим, а машинний код — першим поколінням. Сучасні спроби класифікація мов на четверте і п'яте покоління проводяться різними авторами по різному по різних ознаках і різниця між мовами третього, четвертого та п'ятого покоління часто доволі нечітка. Крім того, багато компаній розробники мов програмування та середовищ програмування для них використовують маркетинговий хід проголошуючи певну мову (мову та інтегроване середовище розробки для неї) п'ятим поколінням.
Див. також
Вікіцитати містять висловлювання на тему: Мова програмування |
Вікісховище має мультимедійні дані за темою: Мови програмування |
Примітки
- (Пратт, розділ І)
- (Gabrielli, С. 27)
- Скляр І. В. Алгоритмізація та програмування. Навчально-методичний посібник
- Список мов програмування. Архів оригіналу за 23 червня 2013. Процитовано 18 травня 2010. (англ.)
- Aaby, Anthony (2004). . Архів оригіналу за 8 листопада 2012. Процитовано 11 березня 2017.
- Benjamin C. Pierce writes:
- Rojas, Raúl, et al. (2000). «Plankalkül: The First High-Level Programming Language and its Implementation». Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000. (full text) [ 18 жовтня 2014 у Wayback Machine.]
- Yuschenko, Yury (2020). . Наукові записки НаУКМА. Комп'ютерні науки (укр.). Т. 3. с. 17—26. doi:10.18523/2617-3808.2020.3.17-26. ISSN 2617-7323. Архів оригіналу за 29 червня 2021. Процитовано 29 червня 2021.
- Future Tense. 29 квітня 2011. Архів оригіналу за 18 вересня 2012. Процитовано 17 квітня 2012.
At Mozilla Summit 2010, we launched Rust, a new programming language motivated by safety and concurrency for parallel hardware, the “manycore” future which is upon us.
- . crystal-lang.org. 19 липня 2014. Архів оригіналу за 19 січня 2016. Процитовано 10 грудня 2020.
- Пратт Т., Зелкович М.- C. 42
- Michael Lee Scott, Programming language pragmatics, Edition 2, Morgan Kaufmann, 2006, , p. 18–19
- Пратт Т., Зелкович М. 2002- С.186
- Пам'ять ЕОМ і представлення інформації[недоступне посилання]
- . Архів оригіналу за 24 травня 2009. Процитовано 26 березня 2010.
- . Архів оригіналу за 24 березня 2010. Процитовано 26 березня 2010.
- Відеопрезентація на тему «Історія мов програмування»(англ.)
- . Архів оригіналу за 10 серпня 2011. Процитовано 18 травня 2010.
- . Архів оригіналу за 25 лютого 2011. Процитовано 18 травня 2010.
- . Архів оригіналу за 3 березня 2011. Процитовано 18 травня 2010.
Література
- Pratt T.W., Zelkovitz M.V. Programming languages, design and implementation (4th ed.). Prentice Hall, 2000 (англ.) (Пратт Т., Зелкович М., Языки программирования: разработка и реализация.- Спб.: Питер, 2002.-688 с.)(рос.)
- Gabbrielli, Maurizio (2010). Programming languages principles and paradigms. London, New York: Springer,. ISBN .
- : Concepts of Programming Languages, 9th ed., Addison Wesley 2009.
Посилання
- The Computer Language Benchmarks [ 29 травня 2018 у Wayback Machine.] порівняння мов за швидкодією і використаними ресурсами
- Tiobe Index [ 25 грудня 2018 у Wayback Machine.] рейтинг мов програмування
- Форум програмістів [ 21 травня 2012 у Wayback Machine.] україномовний форум програмістів
Це незавершена стаття про мови програмування. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
U Vikipediyi ye statti pro inshi znachennya cogo termina Mova znachennya Mo va programuva nnya angl Programming language ce shtuchna mova stvorena dlya peredachi komand mashinam zokrema komp yuteram Movi programuvannya vikoristovuyutsya dlya stvorennya program yaki kontrolyuyut povedinku mashin ta dlya zapisu algoritmiv Suvorishe viznachennya mova programuvannya ce sistema poznachen dlya opisu algoritmiv i struktur danih pevna shtuchna formalna sistema zasobami yakoyi mozhna virazhati algoritmi Movu programuvannya viznachaye nabir leksichnih sintaksichnih i semantichnih pravil sho zadayut zovnishnij viglyad programi ta diyi yaki vikonuye vikonavec komp yuter pid yiyi upravlinnyam Z chasu stvorennya pershih programovanih mashin bulo stvoreno ponad dvi z polovinoyu tisyachi mov programuvannya Shoroku do nih dodayutsya novi Deyakimi movami vmiye koristuvatis tilki nevelike chislo yihnih rozrobnikiv inshi stayut vidomi miljonam lyudej Profesijni programisti zazvichaj zastosovuyut u svoyij roboti dekilka mov programuvannya OznachennyaMova programuvannya ce notaciya dlya zapisu program yaki ye specifikaciyami yakogos obchislennya abo algoritmu IstoriyaDokladnishe Istoriya mov programuvannya Pidruchniki mov programuvannya Pershi movi programuvannya z yavilisya zadovgo do poyavi pershih komp yuteriv She v XIX stolitti isnuvali programovani tkacki verstati ta pianino progravachi sposib programuvannya yakih nagaduye tak zvani predmetno oriyentovani movi programuvannya Na pochatku XX stolittya pochinayut vikoristovuvati perfokarti ta mehanichnu obrobku danih U 1930 1940 rr vinikaye lyambda chislennya ta mashina Tyuringa yaki zastosovuvali matematichnu abstrakciyu dlya opisu algoritmiv Lyambda chislennya zgodom zdijsnilo vpliv na proyektuvannya mov programuvannya U 1940 rokah stvoryuyutsya pershi elektrichni dvijkovi komp yuteri Vvazhayetsya sho pershu movu programuvannya visokogo rivnya Plankalkyul nim Plankalkul rozrobiv nimec Konrad Cuze v period 1943 1945 rokiv ale v toj chas vona ne bula realizovana i neyu ne zacikavilisya Realizaciyeyu movi zajnyalisya i zdijsnili yiyi lishe v 1998 2000 rokah Naprikinci 1940 h pochatku 1950 h rokiv zastosovuvali interpretovani sistemi koduvannya koli pevni komandi movi programuvannya koduvali chislami yaki vzhe interpretuvalisya mashinnim kodom Ci sistemi nazivalisya avtomatichnim programuvannyam i buli prostishimi dlya programuvannya nizh mashinni kodi ale mogli mati znachno menshu do 50 raziv shvidkodiyu cherez sho perevagu chasto nadavali mashinnim kodam Do takih sistem nalezhali Short Code dlya BINAC 1949 i UNIVAC I 1952 en dlya IBM 701 rozroblena Dzhonom Bekusom u 1954 roci Pershoyu bagatokonceptualnoyu imperativnoyu ta deklarativnoyu movoyu programuvannya visokogo rivnya bula Adresna mova programuvannya realizovana 1955 roku na EOM Kiyiv Mova maye oposeredkovanu adresaciyu vishih rangiv vkazivniki ye analogom V EOM Kiyiv aparatno bula realizovana shtrih operaciya analogom yakoyi ye rozimenuvannya vkazivnikiv Operaciya bagatorazovogo rozimenuvannya vkazivnikiv Multiple indirection bula realizovana grupovimi operaciyami modernizaciyi adres zadlya priskorennya obrobki derevopodibnih formativ Abstraktni tipi danih ye chastkovim vipadkom oskilki derevopodibni formati pripuskayut nayavnist u vuzlah dereva procedur obrobki danih yak v OOP Adresna mova programuvannya maye vicherpni zasobi deklarativnogo programuvannya Do najpotuzhnishogo deklarativnogo zasobu nalezhit minus shtrih operaciya yaka ye obernenoyu do rozimenuvannya vkazivnika Vikoristannya minus shtrih operaciyi nagaduye vikoristannya pervinnih i zovnishnih klyuchiv v relyacijnih bazah danih po zadanomu pervinnomu klyuchu viznachiti misce roztashuvannya adresi v inshij tablici zovnishni klyuchi yakih zbigayutsya z zadanim pervinnim klyuchem Pershoyu shirokovzhivanoyu kompilovanoyu movoyu stav rozroblenij grupoyu Dzhona Bekusa Fortran anonsovanij 1954 roku ta vipushenij 1957 roku dlya IBM 704 Osnovnim priznachennyam Fortranu buli shvidki naukovi obchislennya ogoloshuvalosya sho shvidkodiya zgenerovanogo kompilyatorom kodu majzhe ne vidriznyatimetsya vid napisanogo vruchnu mashinnogo kodu Uzhe u kvitni 1958 roku blizko polovini program dlya IBM 704 buli napisani na Fortrani Vipushenij 1958 roku Fortran II dozvolyav nezalezhnu kompilyaciyu pidprogram sho davalo zmogu stvoryuvati bilshi programi oskilki cherez nizku nadijnist IBM 704 ne mozhna bulo skompilyuvati bez zboyiv veliku programu ponad 300 400 ryadkiv odrazu Rozroblenij u 1960 1962 rokah Fortran IV buv odniyeyu z najposhirenishih mov togo chasu i lishavsya standartnoyu versiyeyu Fortranu do poyavi 1978 roku 1958 roku v MIT rozrobili LISP pershu funkcijnu movu yaka ponad chvert stolittya dominuvala u programuvanni zadach shtuchnogo intelektu Naprikinci 1950 h rokiv pochali rozroblyati rizni movi programuvannya 1958 roku dekilka znachnih grup komp yuternih koristuvachiv u SShA vklyuchayuchi SHARE grupu naukovciv koristuvachiv IBM i USE grupa naukovciv koristuvachiv UNIVAC zaproponuvali ACM zasnuvati robochu grupu zi stvorennya Takozh she 1955 roku nimecke Tovaristvo prikladnoyi matematiki j mehaniki GAMM zasnuvalo komitet zi stvorennya universalnoyi movi programuvannya U kinci travnya 1958 roku bulo provedeno zustrich u Cyurihu mizh ACM i GAMM na materialah yakoyi u grudni opublikovano ALGOL 58 Report Na jogo osnovi bulo stvoreno 3 znachni realizaciyi MAD 1961 NELIAC 1963 1963 Z nih lishe JOVIAL otrimav poshirennya stavshi na chvert stolittya oficijnoyu movoyu programuvannya u Vijskovo morskih silah SShA SHARE ta IBM pochali stvorennya vlasnoyi realizaciyi ALGOL ale pripinili vrahuvavshi vitrati na stvorennya i prosuvannya Fortranu Uprodovzh 1959 roku ALGOL 58 shiroko obgovoryuvavsya bula zaproponovana notaciya dlya opisu sintaksisu mov programuvannya 1960 roku provedeno chergovu zustrich i opublikovano ALGOL 60 Report ALGOL vplinuv na bagato mov programuvannya i stav standartnoyu movoyu dlya publikaciyi algoritmiv ale cherez ryad prichin ne oderzhav shirokogo rozpovsyudzhennya vin buv zaskladnim i ne bulo realizacij yaki pidtrimuvali jogo povnistyu vidsutnist standartnogo vvedennya vivedennya zumovila poyavu riznih nesumisnih realizacij deyaki neodnoznachnosti opisu movi tak i ne buli rozv yazani Okrim togo shirokogo vzhitku uzhe nabuv Fortran i IBM ne pidtrimala ALGOL 1959 roku bulo provedeno zustrich u Pentagoni dlya stvorennya movi CBL Common Business Language zasnovano komitet z yiyi stvorennya i 1960 roku opublikovano pochatkovu specifikaciyu COBOL 60 yakij nevdovzi stav pershoyu movoyu uhvalenoyu u Ministerstvi oboroni SShA 1968 roku COBOL bulo standartizovano ANSI U 1964 roci bulo stvoreno sproshenu movu BASIC Beginners All purpose Symbolic Instruction Code dlya navchannya programuvannyu studentiv yaki perevazhno specializuvalisya u vilnih mistectvah a ne tehnichnih naukah Todi yak naukovci perevazhno vikoristovuvali Fortran a biznes COBOL 1963 roku v IBM virishili stvoriti universalnu platformu IBM 360 i movu programuvannya U stisli termini do 1965 roku bulo rozrobleno movu PL I yaka poyednuvala mozhlivosti Fortranu ALGOL i COBOL i viyavilas zaskladnoyu hocha i bula u shirokomu vzhitku v 1970 h u naukovih i biznes zadachah takozh yiyi pidmnozhini vikoristovuvalisya dlya navchannya programuvannyu Na pochatku 1960 h rokiv bulo stvoreno pershi movi iz dinamichnoyu tipizaciyeyu APL i SNOBOL SIMULA 67 bula pershoyu ob yektno oriyentovanoyu movoyu programuvannya 1965 roku Niklaus Virt i Toni Goar zaproponuvali komitetu z rozvitku movi ALGOL svoyu versiyu yaku zgodom nazvali ALGOL W i zastosovuvali dlya navchannya v deyakih universitetah Propoziciya bula vidhilena cherez neznachnu kilkist zmin na korist znachno skladnishogo ALGOL 68 U ALGOL 68 z yavilisya viznachennya struktur danih i dinamichni masivi ALGOL 68 stav pershoyu movoyu iz formalnoyu specifikaciyeyu yaka odnak bula skladnoyu dlya rozuminnya 1971 roku Virt opublikuvav opis movi Pascal yaka u 1970 h stala zagalnovzhivanoyu dlya navchannya studentiv 1972 roku Denis Richi rozrobiv u Bell Labs movu C Todi zh u Marseli stvoreno interpretator movi Prolog pershoyi i najvidomishoyi movi logichnogo programuvannya Alan Kej u Xerox PARC rozrobiv pershu shiroko vzhivanu ob yektno oriyentovanu movu Smalltalk 1973 roku Robin Milner v Edinburzkomu universiteti stvoriv ML 1975 roku v Massachusetskomu tehnologichnomu instituti opisano sproshenij dialekt movi Lisp Scheme 1976 roku vipusheno movu dlya statistichnogo programuvannya S na bazi yakoyi 1993 roku stvoreno R 1977 roku vipusheno Bourne shell i awk 1975 roku Ministerstvo oboroni SShA utvorilo mizhnarodnu grupu dlya stvorennya novoyi movi programuvannya dlya vlasnih potreb konkurs 1979 roku vigrala mova Ada 1981 roku vipusheno II 1984 roku z metoyu ob yednannya riznih dialektiv Lispu stvoreno Common Lisp Vipusheno MATLAB 1985 roku B yarn Straustrup opublikuvav realizaciyu movi C 1986 roku opublikovano movu Objective C i stvoreno Erlang Todi zh Borland i Apple nezalezhno stvorili ob yektno oriyentovane rozshirennya movi Pascal Object Pascal 1987 roku stvoreno Perl 1990 roku opublikovano Standard ML i Haskell 1991 roku stvoreno Visual Basic i opublikovano Python 1992 roku vipusheno Oracle 7 z pidtrimkoyu PL SQL 1993 roku stvoreno Lua 1995 roku Sun Microsystems vipustila Java Netscape JavaScript todi zh stvoreno PHP i Ruby 1996 roku stvoreno OCaml 2001 roku stvoreno C 2002 roku stvoreno F 2003 roku stvoreno Scala 2009 roku stvoreno Go 2010 roku stvoreno Kotlin 2010 roku bula oficijno predstavlena mova programuvannya Rust na Mozilla Summit 2010 Robotu nad movoyu rozpochav she 2006 roku 2012 roku stvoreno Elm 2012 roku stvoreno Elixir 2014 roku na konferenciyi rozrobnikiv WWDC 2014 bulo predstavleno movu Swift 2014 roku prezentovano pershij oficijnij reliz movi programuvannya Crystal ElementiSintaksis Sintaksis movi programuvannya viznachaye te yak bude viglyadati programa ciyeyu movoyu zokrema yak pishutsya operatori ogoloshennya j inshi movni konstrukciyi Napriklad ogoloshennya masivu V z desyati elementiv u formati cilih chisel u movi S bude viglyadati tak int V 10 Na movi Pascal V array 0 9 of integer Semantika Termin semantika stosuyetsya znachennya movi na vidminu vid yiyi formi sintaksisu Napriklad termin semantika operatora oznachaye diyu yaku vikonuye operator pid chas vikonannya programi Takim chinom semantika movi programuvannya ce sukupnist semantik okremih elementiv dozvolenih sintaksisom movi Statichna semantika Statichna semantika opisuye obmezhennya na strukturu tekstiv movi yaki vazhko abo nemozhlivo viraziti zvichajnimi strukturnimi formalizmami Dlya kompilovanih mov statichna semantika po suti ce pravila yaki mozhut buti perevirenimi na etapi kompilyaciyi Napriklad perevirka togo sho kozhen identifikator zadeklarovanij do togo yak vikoristovuyetsya v movah yaki potrebuyut takih deklaracij abo sho varianti v operatori switch rizni Bagato vazhlivih obmezhen cogo tipu taki yak perevirka vikoristannya identifikatora v pravilnomu konteksti napriklad zaborona dodavannya chisel do funkcij abo sho vikliki pidprograma mayut pravilnu kilkist i tipi argumentiv mozhut buti zabezpechenni viznachennyam yih yak pravil logiki yaka nazivayetsya sistemoyu tipizaciyi Inshi formi statichnogo analizu taki yak en takozh mozhut buti chastinoyu statichnoyi semantiki Taki movi programuvannya yak Java ta S mayut yak chastinu svoyeyi statichnoyi semantiki en formu analizu potoku danih Dinamichna semantika Dokladnishe Semantika mov programuvannya Koli dani opisani komp yuter maye otrimati instrukciyi shos robiti z danimi Napriklad semantika mozhe opisuvati strategiyi obchislennya za yakimi otrimuyutsya znachennya viraziv abo sposib yakim instrukciyi viznachayut potik keruvannya Dinamichna semantika movi takozh vidoma yak semantika vikonannya angl execution semantics viznachaye yak i koli rizni konstrukciyi movi povinni zadavati povedinku programi Isnuye bagato sposobiv zadannya semantiki vikonannya Dlya opisu semantiki vikonannya mov yaki chasto zastosovuyutsya na praktici vikoristovuyetsya prirodna mova Velika chastina doslidzhen mov programuvannya stosuyetsya formalnoyi semantiki mov programuvannya Tipi danih Oblast zberigannya danih v aparatnij chastini komp yutera pam yat registri ta zovnishni zapam yatovuvalni pristroyi zazvichaj mayut dovoli prostu strukturu v viglyadi poslidovnosti bitiv zgrupovanih v bajti abo slova Prote v virtualnomu komp yuteri yak pravilo organizovano skladnishim chinom v rizni momenti vikonannya programi vikoristovuyutsya taki formi zberigannya danih yak steki masivi chisla simvolni ryadki ta inshi Odin abo dekilka odnotipnih elementiv danih ob yednanih v odne cile v virtualnomu komp yuteri v pevnij moment vikonannya programi zavedeno nazivati ob yektom danih Pri vikonanni programi isnuye bagato ob yektiv danih riznih tipiv Tip danih ce deyakij klas ob yektiv danih razom z naborom operacij dlya stvorennya i roboti z nim V kozhnij movi programuvannya ye pevnij nabir vbudovanih primitivnih tipiv danih Dodatkovo v movi mozhut buti peredbacheni zasobi sho dozvolyayut programistu viznachati novi tipi danih Klasifikaciya mov programuvannyaMovi klasifikuyut za takimi kriteriyami dzherelo Riven abstrakciyi Movi programuvannya visokogo rivnya operuyut sutnostyami blizhchimi lyudini takimi yak ob yekti zminni funkciyi Movi programuvannya nizhchogo rivnya operuyut sutnostyami blizhchimi mashini bajti adresi instrukciyi Tekst programi movoyu visokogo rivnya zazvichaj nabagato korotshij nizh tekst takoyi samoyi programi movoyu nizkogo rivnya prote programa maye bilshij rozmir Dilyanka zastosuvannya Universalni ta specializovani Specializovani movi tezh buvayut Tyuring povni ta vse zh yih dilyanka zastosuvannya obmezhena yak napriklad u movi shell Pidtrimuvani paradigmi programuvannya Ob yektno oriyentovani logichni funkcijni strukturni Imperativni movi gruntuyutsya na ideyi zminnoyi znachennya yakoyi zminyuyetsya prisvoyennyam Voni nazivayutsya imperativnimi lat imperative nakazovij oskilki skladayutsya iz poslidovnostej komand yaki zvichajno mistyat prisvoyennya zminnih lt code gt lt nazva zminnoyi gt lt viraz gt lt code gt de viraz mozhe posilatisya na znachennya zminnih prisvoyenih poperednimi komandami Sposobi realizaciyi mov Movi programuvannya mozhut buti realizovani yak kompilovani ta interpretovani Programa kompilovanoyu movoyu za dopomogoyu kompilyatora osoblivoyi programi kompilyuyetsya v mashinnij kod nabir instrukcij dlya danogo tipu procesora sho zapisuyetsya u ob yektnij modul Z odnogo abo kilkoh ob yektnih fajliv komponuvalnik formuye vikonuvanij fajl yakij mozhe buti zapushenij na vikonannya yak okrema programa Inshimi slovami kompilyator perevodit vihidnij tekst programi z movi programuvannya visokogo rivnya v dvijkovi kodi instrukcij procesora Yaksho programa napisana skriptovoyu movoyu to interpretator bezposeredno vikonuye interpretuye vihidnij tekst bez poperednogo perekladu Pri comu programa zalishayetsya movoyu originalu i ne mozhe buti zapushena bez interpretatora Procesor komp yutera u zv yazku z cim mozhna nazvati interpretatorom dlya mashinnogo kodu Podil na kompilovani i interpretovani movi ye umovnim Tak dlya bud yakoyi tradicijno kompilyacijnoyi movi yak napriklad Paskal mozhna napisati interpretator Krim togo bilshist suchasnih chistih interpretatoriv ne vikonuyut konstrukciyi movi bezposeredno a kompilyuyut yih v deyake visokorivneve promizhne predstavlennya napriklad z rozimenuvannyam zminnih i rozkrittyam makrosiv Dlya bud yakoyi interpretuvalnoyi movi mozhna stvoriti kompilyator napriklad mova Lisp pochatkovo interpretovana mozhe kompilyuvatisya bez obmezhen Stvoryuvanij pid chas vikonannya programi kod mozhe tak samo dinamichno kompilyuvatisya pid chas vikonannya Yak pravilo skompilovani programi vikonuyutsya shvidshe i ne vimagayut dlya vikonannya dodatkovih program oskilki vzhe perevedeni na mashinnu movu Razom z tim pri kozhnij zmini tekstu programi potribno yiyi perekompilyaciya sho upovilnyuye proces rozrobki Krim togo skompilovana programa mozhe vikonuvatisya tilki na tomu zh tipi komp yuteriv i yak pravilo pid tiyeyu zh operacijnoyu sistemoyu na yaku buv rozrahovanij kompilyator Shob stvoriti vikonuvanij fajl dlya mashini inshogo tipu potribna nova kompilyaciya Interpretovani movi volodiyut deyakimi specifichnimi dodatkovimi mozhlivostyami div vishe krim togo programi na nih mozhna zapuskati vidrazu zh pislya zmini sho polegshuye rozrobku Programa skriptovoyu movoyu mozhe buti najchastishe zapushena na riznih tipah mashin ta operacijnih sistem bez dodatkovih zusil Odnak interpretovani programi vikonuyutsya pomitno povilnishe nizh kompilovani krim togo voni ne mozhut vikonuvatisya bez programi interpretatora Deyaki movi napriklad Java ta C perebuvayut mizh kompilovanimi i interpretovanimi A same programa kompilyuyetsya ne v mashinnu movu a v mashinno nezalezhnij kod nizkogo rivnya bajt kod Dali bajt kod vikonuyetsya virtualnoyu mashinoyu Dlya vikonannya bajt kodu zazvichaj vikoristovuyetsya interpretaciya hocha okremi jogo chastini dlya priskorennya roboti programi mozhut buti translovani v mashinnij kod bezposeredno pid chas vikonannya programi za tehnologiyeyu kompilyaciyi na lotu Just in time compilation JIT Dlya Java bajt kod vikonuyetsya virtualnoyu mashinoyu Java Java Virtual Machine JVM dlya C Common Language Runtime Podibnij pidhid u deyakomu sensi dozvolyaye vikoristovuvati plyusi yak interpretatoriv tak i kompilyatoriv Slid zgadati sho ye movi yaki mayut i interpretator i kompilyator Fort Forth Proceduri ta funkciyi Pidprogrami dilyatsya na proceduri ta funkciyi Sintaksichno proceduri ta funkciyi skladayutsya z zagolovka sho mistit klyuchove slovo procedure abo function im yam za yakim mozhe sliduvati opis peredavanih parametriv v duzhkah tip povertanogo znachennya cherez simvol dvokrapki dlya funkcij i krapki z komoyu dlya procedur pislya zagolovka sliduye tilo pislya yakogo stavitsya simvol program mine output var i integer procedure print var j integer function next k integer integer begin next k 1 end begin writeln Vsogo j j next j end begin i 1 while i lt 10 do print i end Tilo proceduri yak i programi svoyeyu chergoyu mozhe mistiti opisi procedur i funkcij Takim chinom proceduri i funkciyi mozhut buti vkladeni odin v odnogo yak zavgodno gliboko pri comu tilo programi same verhnye v lancyuzhku Prichomu vmist sekcij opisu zminnih tipiv konstant zovnishnogo tila proceduri funkciyi programi roztashovanih pered opisom proceduri funkciyi dostupni useredini neyi Takozh v bilshosti dialektiv z proceduri mozhna zvertatisya do parametriv zovnishnoyi proceduri Uslid za zagolovkom procedur funkcij zamist tila mozhe pomishatisya klyuchove slovo forward ce robitsya v tomu vipadku yaksho opis proceduri funkciyi roztashovuyetsya v programi pislya yiyi vikliku i pov yazano z pidtrimuvanoyu v Paskali mozhlivistyu kompilyaciyi programi za odin prohid Proceduri vidriznyayutsya vid funkcij tim sho funkciyi povertayut yakes znachennya a proceduri ni Ob yektno oriyentovane programuvannya Dokladnishe Ob yektno oriyentovana mova programuvannya ta Ob yektno oriyentovane programuvannya Ob yektno oriyentovane programuvannya OOP ce tehnologiya stvorennya skladnogo programnogo zabezpechennya yake zasnovane na predstavlenni programi u viglyadi sukupnosti ob yektiv kozhen z yakih ye ekzemplyarom pevnogo klasu a klasi utvoryuyut iyerarhiyu zi spadkoyemstvom vlastivostej Osnovna perevaga OOP ce znachne sproshennya procesiv stvorennya ta modifikaciyi programnih sistem Nabagato legshe manipulyuvati 100 ob yektami kozhen z yakih sam vidpovidaye za svoyu povedinku i obrobku danih pov yazanih z nim nizh tisyachami funkcij rozkidanih po riznih modulyah Osnovni nedoliki v OOP ce deyake znizhennya shvidkodiyi cherez skladnishu organizaciyu programnoyi sistemi a takozh yak pravilo pomitne zbilshennya ob yemu binarnogo kodu osoblivo pri vikoristanni standartnih bibliotek klasiv v nevelikih programah cherez te sho bilshist suchasnih kompilyatoriv i komponuvalnikiv ne zdatni viyaviti i vidaliti ves kod sho dovoditsya na nevzhivani klasi virtualni metodi i inshi elementi OOP Semantika mov programuvannya Dokladnishe Semantika mov programuvannya Isnuye kilka pidhodiv do viznachennya semantiki mov programuvannya Najbilsh shiroko poshireni nastupni tri riznovidi semantik operacijna derivacijna aksiomatichna i denotacijna matematichna dzherelo Pri opisi semantiki v ramkah operacijnogo pidhodu zazvichaj vikonannya konstrukcij movi programuvannya interpretuyetsya za dopomogoyu deyakoyi uyavnoyi abstraktnoyi EOM Derivacijna semantika opisuye naslidki vikonannya konstrukcij movi za dopomogoyu movi logiki i zavdannya pered i postumov Denotacijna semantika operuye ponyattyami tipovimi dlya matematiki mnozhini vidpovidnosti a takozh sudzhennya tverdzhennya ta in Movi programuvannya nizkogo rivnyaDokladnishe Nizkorivneva mova programuvannya Pershi komp yuteri dovodilos programuvati dvijkovimi mashinnimi kodami Prote programuvati takim chinom dovoli trudomistke i vazhke zavdannya Dlya sproshennya cogo zavdannya pochali z yavlyatisya movi programuvannya nizkogo rivnya yaki dozvolyali zadavati mashinni komandi v zrozumilishomu dlya lyudini viglyadi Dlya peretvorennya yih u dvijkovij kod buli stvoreni specialni programi asembleri Priklad mashinnogo kodu i predstavlennya jogo na asembleri Prikladom movi nizkogo rivnya ye mova asemblera Movi nizkogo rivnya oriyentovani na konkretnij tip procesora i vrahovuyut jogo osoblivosti tomu dlya perenesennya programi na asembleri na inshu aparatnu platformu yiyi potribno majzhe cilkom perepisati Pevni vidminnosti ye i v sintaksisi program pid rizni kompilyatori Shopravda centralni procesori dlya komp yuteriv firm AMD ta Intel praktichno sumisni j vidriznyayutsya lishe deyakimi specifichnimi komandami A os specializovani procesori dlya inshih pristroyiv napriklad videokart telefoniv mistyat suttyevi vidminnosti Perevagi Za dopomogoyu mov nizkogo rivnya stvoryuyut efektivni j kompaktni programi oskilki rozrobnik otrimuye dostup do vsih mozhlivostej procesora Vadi Programist sho pracyuye z movami nizkogo rivnya maye buti visokoyi kvalifikaciyi dobre rozumiti budovu dlya yakoyi stvoryuye programu Rezultivna programa ne mozhe buti perenesena na komp yuter abo pristrij z inshim tipom procesora chasto trudnoshi vinikayut i pri perenesenni programi dlya inshoyi operacijnoyi sistemi Znachnij chas rozrobki velikih i skladnih program Movi nizkogo rivnya yak pravilo vikoristovuyut dlya napisannya nevelikih sistemnih program drajveriv pristroyiv moduliv stikiv z nestandartnim obladnannyam programuvannya specializovanih mikroprocesoriv koli najvazhlivishimi vimogami ye kompaktnist shvidkodiya i mozhlivist pryamogo dostupu do aparatnih resursiv Movi programuvannya visokogo rivnyaDokladnishe Mova programuvannya visokogo rivnya Translyatori podilyayutsya na kompilyatori peretvoryuyut tekst programi v mashinnij kod yakij mozhna zberegti i pislya cogo vikoristovuvati uzhe bez kompilyatora prikladom ye vikonuvalni fajli z rozshirennyam exe interpretatori peretvoryuyut chastinu programi v mashinnij kod vikonuyut i pislya cogo perehodyat do nastupnoyi chastini Pri comu shorazu pri vikonanni programi vikoristovuyetsya interpretator Mozhna skazati ye zrozumilishimi lyudini nizh komp yuteru Osoblivosti konkretnih komp yuternih arhitektur v nih ne vrahovuyutsya tomu stvoreni programi legko perenosyatsya z komp yutera na komp yuter Zdebilshogo dostatno prosto perekompilyuvati programu pid pevnu komp yuternu arhitekturnu ta operacijnu sistemu Rozroblyati programi na takih movah znachno prostishe i pomilok dopuskayetsya menshe Znachno skorochuyetsya chas rozrobki programi sho osoblivo vazhlivo pri roboti nad velikimi programnimi proyektami Narazi u seredovishi rozrobnikiv vvazhayetsya sho movi programuvannya yaki mayut pryamij dostup do pam yati ta registriv abo mayut asemblerni vstavki potribno vvazhati movami programuvannya z nizkim rivnem abstrakciyi Tomu bilshist mov yaki vvazhalisya movami visokogo rivnya do 2000 go roku zaraz vzhe takimi ne vvazhayutsya Adresna mova programuvannya Fortran Kobol Algol Pascal PascalABC Java C C Objective C Smalltalk C Delphi Nedolikom mov visokogo rivnya ye bilshij rozmir program u porivnyanni z programami movoyu nizkogo rivnya Sam tekst program movoyu visokogo rivnya menshij prote yaksho vzyati u bajtah to kod pochatkovo pisanij na asembleri bude kompaktnishij Tomu v osnovnomu movi visokogo rivnya vikoristovuyutsya dlya rozrobok programnogo zabezpechennya komp yuteriv i pristroyiv yaki mayut velikij obsyag pam yati A rizni pidvidi asembleru zastosovuyutsya dlya programuvannya inshih pristroyiv de kritichnim ye rozmir programi Pokolinnya mov programuvannyaDokladnishe Pokolinnya mov programuvannya Inkoli v literaturi ta v interneti zgaduyut pro p yat pokolin mov programuvannya shopravda danij podil ye spirnim i superechnim V profesijnij literaturi z programuvannya dovoli ridko zgaduyut pro pokolinnya mov programuvannya a bilshe zoseredzhuyutsya na funkcionalnij klasifikaciyi mov programuvannya Krim togo same vidnesennya pevnih mov do riznih pokolin riznitsya u riznih avtoriv Podil na pokolinnya mov programuvannya pochav poshiryuvatis z poyavoyu visokorivnevih mov programuvannya i do togo ne zastosovuvavsya Visokorivnevi movi programuvannya pochali vvazhatisya tretim pokolinnyam asemblerni movi drugim a mashinnij kod pershim pokolinnyam Suchasni sprobi klasifikaciya mov na chetverte i p yate pokolinnya provodyatsya riznimi avtorami po riznomu po riznih oznakah i riznicya mizh movami tretogo chetvertogo ta p yatogo pokolinnya chasto dovoli nechitka Krim togo bagato kompanij rozrobniki mov programuvannya ta seredovish programuvannya dlya nih vikoristovuyut marketingovij hid progoloshuyuchi pevnu movu movu ta integrovane seredovishe rozrobki dlya neyi p yatim pokolinnyam Div takozhVikicitati mistyat vislovlyuvannya na temu Mova programuvannyaVikishovishe maye multimedijni dani za temoyu Movi programuvannyaKomp yuterna mova Programuvannya Mova modelyuvannya Spisok mov programuvannya Sistema tipizaciyi Standart oformlennya kodu Teoriya mov programuvannyaPrimitki Pratt rozdil I Gabrielli S 27 Sklyar I V Algoritmizaciya ta programuvannya Navchalno metodichnij posibnik ISBN 966 8651 90 1 Spisok mov programuvannya Arhiv originalu za 23 chervnya 2013 Procitovano 18 travnya 2010 angl Aaby Anthony 2004 Arhiv originalu za 8 listopada 2012 Procitovano 11 bereznya 2017 Benjamin C Pierce writes the lambda calculus has seen widespread use in the specification of programming language features in language design and implementation and in the study of type systems 2002 Types and Programming Languages MIT Press s 52 ISBN 0 262 16209 1 Rojas Raul et al 2000 Plankalkul The First High Level Programming Language and its Implementation Institut fur Informatik Freie Universitat Berlin Technical Report B 3 2000 full text 18 zhovtnya 2014 u Wayback Machine Yuschenko Yury 2020 Naukovi zapiski NaUKMA Komp yuterni nauki ukr T 3 s 17 26 doi 10 18523 2617 3808 2020 3 17 26 ISSN 2617 7323 Arhiv originalu za 29 chervnya 2021 Procitovano 29 chervnya 2021 Future Tense 29 kvitnya 2011 Arhiv originalu za 18 veresnya 2012 Procitovano 17 kvitnya 2012 At Mozilla Summit 2010 we launched Rust a new programming language motivated by safety and concurrency for parallel hardware the manycore future which is upon us crystal lang org 19 lipnya 2014 Arhiv originalu za 19 sichnya 2016 Procitovano 10 grudnya 2020 Pratt T Zelkovich M C 42 Michael Lee Scott Programming language pragmatics Edition 2 Morgan Kaufmann 2006 ISBN 0 12 633951 1 p 18 19 Pratt T Zelkovich M 2002 S 186 Pam yat EOM i predstavlennya informaciyi nedostupne posilannya Arhiv originalu za 24 travnya 2009 Procitovano 26 bereznya 2010 Arhiv originalu za 24 bereznya 2010 Procitovano 26 bereznya 2010 Videoprezentaciya na temu Istoriya mov programuvannya angl Arhiv originalu za 10 serpnya 2011 Procitovano 18 travnya 2010 Arhiv originalu za 25 lyutogo 2011 Procitovano 18 travnya 2010 Arhiv originalu za 3 bereznya 2011 Procitovano 18 travnya 2010 LiteraturaPratt T W Zelkovitz M V Programming languages design and implementation 4th ed Prentice Hall 2000 angl Pratt T Zelkovich M Yazyki programmirovaniya razrabotka i realizaciya Spb Piter 2002 688 s ros Gabbrielli Maurizio 2010 Programming languages principles and paradigms London New York Springer ISBN 9781848829145 Concepts of Programming Languages 9th ed Addison Wesley 2009 PosilannyaThe Computer Language Benchmarks 29 travnya 2018 u Wayback Machine porivnyannya mov za shvidkodiyeyu i vikoristanimi resursami Tiobe Index 25 grudnya 2018 u Wayback Machine rejting mov programuvannya Forum programistiv 21 travnya 2012 u Wayback Machine ukrayinomovnij forum programistiv Ce nezavershena stattya pro movi programuvannya Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi