Мова програмування

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Зображення «Вавилонської вежі» з обкладинки книги Джін Семміт «Мови програмування» (1969 р.), яка містила огляд мов програмування того часу

Мо́ва програмува́ння (англ. Programming language) — це штучна мова, створена для передачі команд машинам, зокрема комп'ютерам. Мови програмування використовуються для створення програм, котрі контролюють поведінку машин, та запису алгоритмів.

Більш строге визначення: мова програмування — це система позначень для опису алгоритмів та структур даних[1], певна штучна формальна система, засобами якої можна виражати алгоритми[2]. Мову програмування визначає набір лексичних, синтаксичних і семантичних правил, що задають зовнішній вигляд програми і дії, які виконує виконавець (комп'ютер) під її управлінням.[Джерело?]

З часу створення перших програмованих машин було створено понад дві з половиною тисячі мов програмування.[3] Щороку їх кількість поповнюється новими. Деякими мовами вміє користуватись тільки невелике число їх власних розробників, інші стають відомі мільйонам людей. Професійні програмісти зазвичай застосовують в своїй роботі декілька мов програмування.

Історія[ред.ред. код]

Власне перші мови програмування з'явилися задовго до появи перших комп'ютерів. Ще в 19-му столітті існували "програмовані" ткацькі верстати та піаніно-програвачі, спосіб програмування нагадує так звані предметно-орієнтовані мови програмування. На початку 20-го століття починають використовуватись перфокарти, та механічна обробка даних. В 1930 -1940 рр. виникає лямбда-числення та машина Тюринга, які застосовували математичну абстракцію для опису алгоритмів. Лямбда-числення згодом здійснило вплив на проектування мов програмування.[4]

В 1940 роках створюються перші електричні, двійкові комп'ютери. Вважається, що першу мову програмування високого рівня — Планкалькюль (нім. Plankalkül) розробив німець Конрад Цузе в період 1943 - 1945 років, але в той час вона не була реалізована і не одержала уваги. Реалізацією мови зайнялися і здійснили лише в 1998-2000 роках[5].

У кінці 40-их — початку 50-их застосовувалися інтерпретовані системи кодування, коли певні команди мови програмування кодувалися числами, які вже інтерпретувалися машинним кодом. Ці системи називалися «автоматичним програмуванням» і були простішими для програмування, ніж машинні коди, але могли мати значно меншу (до 50 разів) швидкодію, через що часто надавали перевагу машинним кодам. До таких систем належали — Short Code для BINAC (1949) і UNIVAC I (1952), Speedcoding для IBM 701, розроблена Джоном Бекусом у 1954.

Першою широковживаною компільованою мовою став розроблений групою Джона Бекуса Фортран, анонсований у 1954 році і випущений у 1957 для IBM 704. Основним призначенням Фортрану були швидкі наукові обчислення, оголошувалося, що швидкодія згенерованого компілятором коду майже не відрізнятиметься від написаного вручну машинного коду. Уже у квітні 1958 близько половини програм для IBM 704 були написані на Фортрані. Випущений у 1958 році Фортран II дозволяв незалежну компіляцію підпрограм, що дозволило створювати більші програми, оскільки низька надійність IBM 704 не дозволяла скомпілювати без збоїв велику програму (понад 300—400 рядків) одразу. Розроблений у 19601962 роках Фортран IV був однією з найпоширеніших мов того часу і лишався стандартною версією Фортрану до появи у 1978 році Фортрану 77.

У 1958 році у MIT розробили LISP — першу функційну мову, яка понад чверть століття домінувала у програмуванні задач штучного інтелекту.

У кінці 1950-их почали розроблятися різні мови програмування. У 1958 році декілька значних груп комп'ютерних користувачів у США, включаючи SHARE — групу науковців-користувачів IBM і USE (UNIVAC Scientific Exchange, група науковців-користувачів UNIVAC) запропонували ACM заснувати робочу групу зі створення універсальної мови програмування. Також ще у 1955 році німецьке Товариство прикладної математики і механіки (GAMM) заснувало комітет зі створення універсальної мови програмування. У кінці травня 1958 року було проведено зустріч у Цюриху між ACM і GAMM, на матеріалах якої у грудні опубліковано "ALGOL 58 Report". На його основі було створено 3 значні реалізації — MAD (1961), NELIAC (1963), JOVIAL (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-их у наукових і бізнес задачах, також її підмножини (PL/C, PL/CS) використовувалися для навчання програмуванню.

На початку 1960-их було створено перші мови із динамічною типізацією — APL і SNOBOL.

SIMULA 67 була першою об'єктно-орієнтованою мовою програмування.

У 1965 році Ніклаус Вірт і Тоні Гоар запронували комітету з розвитку мови ALGOL свою версію, яку згодом назвали ALGOL-W і застосовували для навчання в деяких університетах. Пропозиція була відхилена через незначну кількість змін на користь значно складнішого ALGOL 68. У ALGOL 68 з'явилися визначення структур данних і динамічні масиви. ALGOL 68 став першою мовою із формальною специфікацією, яка однак була складною для розуміння.

У 1971 році Вірт опублікував опис мови Pascal, яка у 70-их стала загальновживаною для навчання студентів.

У 1972 році Деніс Річі розробив у Bell Labs мову C. Тоді ж у Марселі створено інтерпретатор мови Пролог - першої і найвідомішої мови логічного програмування. Алан Кей у Xerox PARC розробив першу широко вживану об'єктно-орієнтовану мову — Smalltalk.

у 1973 Робін Мілнер в Единбурзькому університеті створив ML.

У 1975 році в Массачусетському технологічному інституті описано спрощений діалект мови Лісп — Scheme.

У 1976 випущено мову для статистичного програмування S, на базі якої в 1993 році створено R.

У 1977 році випущено Bourne shell.

У 1975 Міністерство оборони США утворило міжнародну групу для створення нової мови програмування для власних потреб, конкурс у 1979 виграла мова Ада.

У 1981 випущено dBASE II.

У 1984 році з метою об'єднання різних діалектів Ліспу створено Common Lisp. Випущено MATLAB

У 1985 році Б'ярн Страуструп опублікував реалізацію мови C++. Тоді ж випущено AWK.

У 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, NetscapeJavaScript, тоді ж створено PHP і Ruby.

У 1996 році створено OCaml.

У 2001 році створено C#.

У 2002 році створено F#. У 2003 році створено Scala.

Елементи[ред.ред. код]

Синтаксис[ред.ред. код]

Синтаксис мови програмування визначає те, як буде виглядати програма на цій мові, зокрема, як пишуться оператори, оголошення і інші мовні конструкції[6]. Наприклад, оголошення масиву V з десяти цілочислових елементів в мові С буде виглядати так:

 int V[10];

На мові Pascal:

V: array[0..9] of integer;

Типи даних[ред.ред. код]

Область зберігання даних в апаратній частині комп'ютера (пам'ять, регістри і зовнішні запам'ятовуючі пристрої) зазвичай мають доволі просту структуру в вигляді послідовності бітів, згрупованих в байти або слова. Проте в віртуальному комп'ютері, як правило, організовано складнішим чином — в різні моменти виконання програми використовуються такі форми зберігання даних, як стеки, масиви, числа, символьні рядки та інші. Один або декілька однотипних елементів даних, об'єднаних в одне ціле в віртуальному комп'ютері в певний момент виконання програми, прийнято називати об'єктом даних. При виконанні програми існує багато об'єктів даних різних типів. Тип даних — це деякий клас об'єктів даних разом з набором операцій для створення і роботи з ним[7]. В кожній мові програмування є певний набір вбудованих примітивних типів даних. Додатково в мові можуть бути передбачені засоби, що дозволяють програмісту визначати нові типи даних.

Класифікація мов програмування[ред.ред. код]

Мови класифікують за такими критеріями[Джерело?]:

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

Імперативні мови базуються на ідеї змінної, значення якої змінюється присвоєнням. Вони називаються імперативними (лат. imperative - наказовий), оскільки складаються із послідовностей команд, які звичайно містять присвоєння змінних <назва_змінної> = <вираз>, де вираз може посилатися на значення змінних присвоєних попередніми командами.

Способи реалізації мов[ред.ред. код]

Мови програмування можуть бути реалізовані як компільовані та інтерпретовані.

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

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

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

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

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

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

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

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

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

Об'єктно-орієнтоване програмування[ред.ред. код]

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

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

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

Семантика мов програмування[ред.ред. код]

Докладніше у статті Семантика мов програмування

Існує кілька підходів до визначення семантики мов програмування.

Найбільш широко поширені наступні три різновиди семантик: операційна, дериваційна (аксіоматична) і денотаційна (математична)[Джерело?].

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

Мови програмування низького рівня[ред.ред. код]

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

Приклад машинного коду і представлення його на асемблері[10]

Транслятори поділяються на:

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

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

Переваги[ред.ред. код]

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

Недоліки[ред.ред. код]

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

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

  • Асемблер — мова низького рівня, що широко застосовується і досі.

Мови програмування високого рівня[ред.ред. код]

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

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

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

П'ять поколінь мов програмування[ред.ред. код]

Інколи розрізняють п'ять поколінь мов програмування[11][12] [13] [14], щоправда даний поділ є спірним:

Перше покоління[ред.ред. код]

Початок 1950-х років — мови перших комп'ютерів. Використовувалася машинна мова. Код подавався напряму у комп'ютер за принципом «одна інструкція — один рядок» Основна відмінна риса: орієнтування на конкретний тип комп’ютера (мікропроцесорної системи). Не існувала ні середовищ розробки, ні компіляторів.

Друге покоління[ред.ред. код]

Кінець 1950-х — початок 1960-х р.р. Розроблено символьний асемблер, в якому з'явилося поняття змінної. Це перша повноцінна мова програмування.

Основна відмінна риса: орієнтування на абстрактний комп'ютер з такою ж системою команд.

Третє покоління[ред.ред. код]

1960-ті — мови програмування високого рівня. Їхні характеристики:

  • відносна простота;
  • незалежність від конкретного комп'ютера;
  • можливість використання потужних синтаксичних конструкцій.

Простота мов дає змогу писати невеликі програми і людям, які не є професійними програмістами.

Основна відмінна риса мови третього покоління: орієнтування на алгоритм (алгоритмічні мови).

Приклади: Fortran, COBOL, ALGOL.

Всього у світі існує близько 200 популярних мов програмування третього рівня.

Четверте покоління[ред.ред. код]

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

Часто відносять: SQL, SGML (HTML, XML), Prolog, та багато інших вузькоспеціалізованих декларативних мов. Щоправда ряд мов, які відносять до четвертого покоління, не є мовами програмування як такими. Наприклад SQL є мовою запитів до баз даних, HTML є мовою розмітки гіпертексту, і не є повноцінними мовами програмування, скоріше вони виступають своєрідними спеціалізованими доповненнями до мов програмування. Теж саме стосується XML.

Основна відмінна риса мови четвертого покоління: наближення до людської мови (декларативні мови).

Деякі мови мають риси одночасно і третього і четвертого поколінь.

П'яте покоління[ред.ред. код]

П'ятого покоління мов програмування поки що не існує.

Виробники пропроієтарних програмних продуктів часто намагаються приписати своїм продуктам якісь маркетингові особливості, і деколи вказують що їхній продукт — це «мова п'ятого покоління». Насправді, всі ці продукти — це просто середовища для прискореного створення продуктів (Rapid Application Development — RAD), і використовують мови третього та четвертого поколінь.

Мова п'ятого покоління витіснить чи суттєво потіснить мови третього (напр. Java) і четвертого покоління (напр. SQL) за рахунок значно збільшеної продуктивності праці програміста — в 10-1000 разів. За прогнозами, 5GL буде оперувати мета-мета-даними.

Наразі існує єдина мова, яка працює з мета-мета-даними, — це мова команд менеджерів пакетів чи менеджерів залежностей, таких як apt, yum, smart, maven, cpan та інші. Вони оперують над метаданими про метадані про дані у пакетах. Використання apt-get, yum та smart дійсно надзвичайно підвищило продуктивність системних адміністраторів — приблизно в 1000-у разів. Використання менеджерів залежностей, таких як maven, cpan, rakudo, pim, easy_install, дійсно значно підвищило продуктивність програмістів, приблизно в 10 разів. Проте, ці мови є мовами командного рядка і не є мовами програмування.


Див. також[ред.ред. код]

Література[ред.ред. код]

  • 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 9781848829145. 
  • Robert W. Sebesta: Concepts of Programming Languages, 9th ed., Addison Wesley 2009.

Ресурси інтернету[ред.ред. код]

Посилання[ред.ред. код]

  1. (Пратт, розділ І)
  2. (Gabrielli, С. 27)
  3. «Список мов програмування». Архів оригіналу за 2013-06-23.  (англ.)
  4. 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." Pierce, Benjamin C. (2002). Types and Programming Languages. MIT Press. с. 52. ISBN 0-262-16209-1. 
  5. 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)
  6. Пратт Т., Зелкович М.- C. 42
  7. Пратт Т., Зелкович М. 2002- С.186
  8. Пам'ять ЕОМ і представлення інформації
  9. Трансляция кода
  10. Підготовка і відладка програм
  11. Відеопрезентація на тему "Історія мов програмування" (англ.)
  12. Сергей Бобровский. Пятое поколение - языки программирования или прикладные системы?//PC Week Live
  13. Язык программирования
  14. Соколов В.В. Эволюция языков программирования


Комп'ютер Це незавершена стаття про комп'ютери.
Ви можете допомогти проекту, виправивши або дописавши її.