Творець першої мови програмування. Коротка історія розвитку мов програмування. Дивитися що таке "Коротка історія розвитку мов програмування" в інших словниках

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

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

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

вузьконаправлені мови

Через збільшення сфер використання ЕОМз'явилися і інші мови для окремих розробок в нових сферах:

  • економічний напрямок залишалося незайнятим до появи Кобол;
  • Снобол - обробляє алгоритми, пов'язані з текстами;
  • Лісп. Працює на підставі алгоритмів для відпрацювання символів. Активно використовується для формування штучного інтелекту.

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

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

Для навчання дітей в школах був створений лого, Біля витоків стояв Самуель Пайперт. Переваги - простота роботи і велика кількість можливостей.

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

Створення мови C

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

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

Пролог і Ада

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

Тільки в 80-х роках була розроблена мова Ада. Він розширює класичне розуміння і властивості мов того періоду. Ада могла вирішувати завдання в режимі реального часу і моделювати незалежні рішення.

Класифікація

Сьогодні розроблені класифікації мов за рівнем роботи, це розподіл найпоширеніше. Виділяють 3 основних рівня:

  1. Низький.Сюди відносяться різні машинні мови або різновиду з символічним кодування типу ассемблераі автокодом. За основу взято оператори машинних команд, тільки розроблені з прив'язкою до мнемонічному коду. Операндами є вже не точні адреси, а символьне позначення імен. Всі моделі розроблені для окремих різновидів ПК, Вони є машинно-залежними. У подібних мовах відзначається сильна залежність мови від внутрішніх особливостей системи;
  2. Високий.Мови зустрічаються набагато частіше, вони більш зручні у використанні. До них зараховуються: Алгол, С, Пролог, Паскаль, Бейсік, Фортран і інші. Перераховані мови не мають жорсткої залежності від машини, адже вони ґрунтуються на можливостях системи операндів, які подібні до для класових алгоритмів. Недоліками високого рівня є велика ресурсомісткість і повільне виконання;
  3. Надвисокий.Представників мов вкрай мало, тільки APL і Алгол-68. Їх вважають надвисокого рівня через розробку надпотужних операторів.

Відповідно до іншої класифікації мови діляться на:

  • символьні- Пролог, Лісп і Снобол;
  • обчислювальні- Паскаль, С, Алгол, Бейсік, Фортран.

напрямки розвитку

Інформатика в сучасному світі розвивається в 3 ключових напрямках:

  1. процедурнез'явилося в період найактивнішого розвитку комп'ютерів і інших обчислювальних пристроїв, з тим пір широко використовується. У процедурних напрямках присутні виражені опису дій, необхідних до виконання. Для отримання результату завжди проводиться певна процедура, яку складають різні послідовності маніпуляцій. Процедурні мови додатково поділяються на:
    • Структурні.У них використовується один оператор для запису цілісних алгоритмом: циклів, функцію, розгалужень і решти. Найбільш відомі: Паскаль, Ада і С.
    • Операційні.Застосовують кілька різних дій. Серед найвідоміших різновидів: Фокал, Фортран і Бейсик.
  2. Непроцедурного.Мови програмування мають декларативну структуру, поява якої припадає на 70-ті роки. Найактивніше почали розвиватися в 80-х роках після появи проекту формування 5 покоління ЕОМ. Основне завдання - створення можливостей для побудови високоінтелектуальних машин. Вони також поділяються на:
    • Функціональні.Програма виконує обчислення певної функції, яка бере за основу інші відносно прості алгоритми і більш прості завдання. В основі функціонального напряму використовується основний елемент - рекурсія. Вона має на увазі розрахунок значень функції за допомогою задіяння її в інших елементах. У мові відсутні цикли і методика присвоювання значень.
    • Логічні.Програма зовсім не вимагає опис дій, її основу складають співвідношення даних і їх значення. Тільки після розрахунку можна отримувати відповіді на питання. Після перебирання відомих параметрів виводиться відповідь. У програмі відсутній метод або порядок виявлення відповіді, він неявним чином встановлюється мовою. Яскравим представником є ​​Пролог. З напряму повністю усунуто алгоритмічне мислення, тільки статичні відносини між об'єктами, а вся динаміка прихована від розробника і зводиться до перебору даних.
  3. Об'єктно-орієнтовані мови, Всі вони є різновидом високого рівня програмування. Подібні мови не потребують описі чіткої послідовності маніпуляцій для отримання результату завдання, але окремі компоненти процедурного напрямку присутні. Користувачам значно простіше працювати з такими мовами, так як вони мають доступним і багатим інтерфейсом. Кращим прикладом подібного спрямування з візуальним спілкуванням є Object Pascal.

Існують мови для написання сценаріїв, відомими є Rexx, Tcl, Perl і Python, А також мови оболонок систем Unix. У них розробляється індивідуальний стиль написання коду, який відрізняється від відомого принципу системного рівня програмування. Вони не використовуються для створення додатків на нижньому рівні, швидше за для комбінування різних компонентів з різних мов, у тому числі складається набір окремих функцій.

Найактивніше стали розвиватися в міру поширення інтернету, від чого стали широко застосовуватися мови сценаріїв. Для створення сценаріїв найчастіше застосовується Perl, а для Web-частиникористується популярністю JavaScript.

Однією з найбільш революційних ідей, що призвели до створення, була висловлена ​​в 20-х роках 19 століття Ч.Беббіджем думка про попередній запис порядку дій машини -. З цього моменту починається історія мов програмування.

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

При роботі на комп'ютері "Марк-1" Г. Хоппер і її групі довелося зіткнутися з багатьма проблемами. Зокрема, вони придумали підпрограми.

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

В кінці 40-х років, до приходу Г. Хоппер в фірму Джона Моучлі, останній створив систему під назвою "Short Code", яка була примітивною мовою програмування високого рівня. У ній програміст записував решаемую завдання у вигляді математичних формул, а потім, використовуючи спеціальну таблицю, перекладав символ за символом, перетворював ці формули в двухлітерние коди. Надалі спеціальна програма комп'ютера перетворювала ці коди в двійковий машинний код. Система, розроблена Дж. Моучлі, була по суті одним з перших примітивних інтерпретаторів.

Уже в 1951 р Хоппер створила перший в світі компілятор і нею ж був введений сам цей термін. Компілятор Хоппер здійснював функцію об'єднання команд і в ході трансляції виробляв організацію підпрограм, виділення, перетворення команд високого рівня (в той час Псевдокод) в машинні команди.

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

В середині 60-х років співробітники математичного факультету Дартмутського коледжу Томас Курц і Джон Кемені створили спеціалізований мова програмування, який складався з простих слів англійської мови. Нова мова назвали BASIC.

На початку 60-х років всі існуючі мови програмування високого рівня можна було перерахувати по пальцях, проте згодом їх число досягло трьох тисяч. Зрозуміло, переважна частина мов не отримала в історії мов програмування скільки-небудь широкого поширення; в практичній діяльності використовується не більше двох десятків. Розробники орієнтували мови програмування на різні класи задач, в тій чи іншій мірі прив'язували їх до конкретних архітектур ЕОМ, реалізовували особисті смаки і ідеї. У 60-ті роки в історії мов програмування були зроблені спроби подолати цю "різноголосицю" шляхом створення універсальної мови програмування. Першим дітищем цього напрямку став PL / I (Programm Language One), 1967 г. Потім на цю роль претендував АЛГОЛ-68 (1968 р.) Передбачалося, що подібні мови будуть розвиватися і вдосконалюватися і витіснять всі інші. Однак жодна з цих спроб на сьогоднішній день не увінчалася успіхом. Всеосяжність мови приводила до невиправданої, з точки зору програміста, складності конструкцій, неефективності компіляторів.

В кінці 50-х років в історії мов програмування з'явився Алгол (ALGOL, від ALGOrithmic Language - алгоритмічний мову). Алгол призначений для запису, які будуються у вигляді послідовності процедур, які застосовуються для вирішення поставлених завдань.

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

Період з кінця 60-х і до початку 80-х років характеризується в історії мов програмування бурхливим зростанням числа різних мов, які супроводжували, як це не парадоксально, криза програмного забезпечення. Ця криза особливо гостро переживало військове відомство США. У грудні 1975 р Пентагон вирішив навести порядок в хаосі трансляторів і заснує комітет, якому було наказано розробити один універсальна мова. Переміг мову охрестили АДА.

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

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

Принципово інший напрямок в історії мов програмування пов'язане з методологіями (іноді кажуть "парадигмами") непроцедурного програмування. До них можна віднести об'єктно-орієнтоване і декларативне програмування. Об'єктно-орієнтована мова створює оточення у вигляді безлічі незалежних об'єктів. Кожен об'єкт поводиться подібно окремого комп'ютера, Їх можна використовувати для вирішення завдань як "чорні ящики", не вникаючи у внутрішні механізми їх функціонування. З мов об'єктного програмування, популярних серед професіоналів, слід назвати перш за все Сі ++, для більш широкого кола програмістів переважні середовища типу Delphi і Visual Basic.

Дуже важливо знати загальну історію мов програмування і історію розвитку відомих і невідомих мов. У цій статті ви з цим і познайомитеся, але для початку давайте згадаємо "Що таке мова програмування?".

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

50-і роки

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

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

Однак великі проекти розробляти на мові Асемблера було важко. Головна проблема полягала в тому, що програма, написана на Асемблері, прив'язана до архітектури конкретного комп'ютера і не могла бути перенесена на інші машини. При удосконаленні комп'ютера всі програми на Асемблері доводилося переписувати заново.

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

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

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

В середині 50-х років під керівництвом Джона Бекуса для фірми IBM був розроблений алгоритмічний мову програмування високого рівня FORTRAN. Незважаючи на те, що вже існували розробки мов, які виконують перетворення арифметичних виразів в машинний код, створення мови FORTRAN (FORmula TRANslator), що надає можливість запису алгоритму обчислень з використанням умовних операторів і операторів введення / виведення, стало точкою відліку ери мов програмування високого рівня.

Як альтернатива мові FORTRAN, спочатку орієнтованому на архітектуру IBM, під керівництвом Пітера Наура в кінці 50-х років була розроблена мова ALGOL (ALGOrithmic Language). Основною метою, переслідуваної розробниками цієї мови, була незалежність від конкретної архітектури обчислювальної системи.

Крім того, творці мови ALGOL прагнули розробити мову, зручний для опису алгоритмів і застосовує систему позначень, близьку до тієї, що прийнята в математиці. Мови FORTRAN і ALGOL були першими мовами, орієнтованими на програмування обчислень.

60-і роки

В кінці 60-х років під керівництвом Найарда і Дала була розроблена мова Simula-67, який використовує концепцію користувальницьких типів даних. Фактично це перша мова, що застосовує поняття класів.

70-і роки

В середині 70-х років Вірт запропонував мову Pascal, який відразу став широко використовуватися. В цей же час з ініціативи Міністерства оборони США почалася робота зі створення мови високого рівня, що отримав назву Ada - на честь Ади Лавлейс, програмістки і дочки лорда Байрона.

Створення мови почалося з визначення вимог і вироблення специфікацій. Над проектом працювали чотири незалежні групи, але всі вони використовували як основу мову Pascal. На початку 80-х років був розроблений перший промисловий компілятор мови Ada.

Расработка Сі

Універсальна мова програмування був розроблений в середині 70-х років Денисом Рітчі і Кеном Томпсоном. Ця мова став популярним мовою системного програмування і свого часу використовувався для написання ядра операційної системи UNIX.

Стандарт мови С почав розроблятися робочою групоюінституту стандартів ANSI в 1982 році. Міжнародний стандарт мови С прийнятий в 1990 році. Мова С ліг в основу розробки мов програмування і Java.

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

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

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

В даний час переважна частина програм пишеться на мовах Сі та C ++. Інтерфейс будь-якій операційній системи (так званий API - Application Program Interface), тобто набір системних викликів, призначених для розробників прикладних програм, як правило, являє собою набір функцій на мові Сі.

Поряд з алгоритмічними мовамипаралельно розвивалися і мови, які призначаються для обробки ділової інформації, а також мови штучного інтелекту. До перших належить мову COBOL (COmmon Business Oriented Language), а до других - мови LISP (LISt Processing) і Prolog.

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

90-і роки

У 90-х роках з поширенням мережі Інтернет розширилися можливості розподіленої обробки даних, що відбилося і на розвиток мов програмування. З'явилися мови, орієнтовані на створення серверних додатків, такі як, Perl і, мови опису документів - і XML.

Традиційні мови програмування С ++ та Pascal також зазнали змін: під мовою програмування починалося розумітися не тільки функціональність самої мови, а також бібліотеки класів, що надаються середовищем програмування.

Акцент зі специфікації самих мов програмування переносилися на стандартизацію механізмів взаємодії розподілених додатків. З'явилися нові технології - COM і CORBA, специфицирующие взаємодія розподілених об'єктів.

Області застосування мов програмування

В даний час мови програмування застосовуються в самих різних областях людської діяльності, таких як:

  • наукові обчислення (мови C ++, FORTRAN, Java);
  • системне програмування (мови C ++, Java);
  • обробка інформації (мови C ++, COBOL, Java);
  • штучний інтелект (LISP, Prolog);
  • видавнича діяльність (Postscript, TeX);
  • віддалена обробка інформації (Perl, PHP, Java, C ++);
  • опис документів (HTML, XML).

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

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

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

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

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

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

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

Наступним досягненням було використання структур, завдяки яким перейшли до класів. Структури - це складові типи даних, побудовані з використанням інших типів. Наприклад, структура час. У неї входить: години, хвилини, секунди. Програміст міг створити структуру час і працювати з нею, як з окремою структурою. Клас - це структура, яка має свої змінні і функції, які працюють з цими змінними. Це було дуже велике досягнення в області програмування. Тепер програмування можна було розбити на класи і тестувати не всю програму, що складається з 10'000 рядків коду, а розбити програму на 100 класів, і тестувати кожен клас. Це істотно полегшило написання програмного продукту.

Мова асемблера

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

Але навіть робота з асемблером досить складна і вимагає спеціальної підготовки.

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

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

також створювалися функціональні(Аплікативного) мови (Приклад: Lisp - англ. LISt Processing, 1958) і логічнімови (приклад: Prolog - англ. PROgramming in LOGic, 1972).

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

ООП

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

Прикладами об'єктно-орієнтованих мов є Object Pascal, C ++, Java і ін.

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

Приклад запису програми на різних мовах

Мова високого рівня (Delphi)

X: = sin (y * Pi) + 1;

Асемблер x86 (співпроцесор)

Fldpi fmul qword ptr [Y] fsin fld1 fadd p st (1), st (0) fstp qword ptr [X]

Машинний код (шістнадцяткове подання, кожна команда починається з нового рядка)

D9 EB DC 0D D0 97 40 00 D9 FE D9 E8 DE C1 DD 1D 98 97 40 00

Машинний код (двійкове подання)

11011001 11101011 11011100 00001101 11010000 10010111 01000000 00000000 11011001 11111110 11011001 11101000 11011110 11000001 11011101 00011101 10011000 10010111 01000000 00000000

посилання


Wikimedia Foundation. 2010 року.

  • Ай-ай
  • Кабанов, Микола Олександрович

Дивитися що таке "Історія мов програмування" в інших словниках:

    Історія мови програмування Python- Python був задуманий в 1980 х роках, а його створення почалося в грудні 1989 року Гвідо ван Россум в складі центру математики та інформатики в Нідерландах. Мова Python був задуманий як нащадок мови програмування ABC, здатний до обробки ... ... Вікіпедія

    Хронологія мов програмування- Списки мов програмування За категоріями Хронологічний генеалогічний Хронологія мов програмування упорядкований в хронологічному порядку список мов програмування. Зміст ... Вікіпедія

    Порівняння мов програмування- Цю статтю слід вікіфіціровать. Будь ласка, оформіть її згідно з правилами оформлення статей. Умовні позначення ... Вікіпедія

    Коротка історія розвитку мов програмування- У міру розвитку обчислювальної техніки виникали різні методики програмування. На кожному етапі створювався новий підхід, який допомагав програмістам зі зростаючим ускладненням програм. Зміст 1 Початок розвитку 2 Мова асемблера 3 струк ... Вікіпедія

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

    Історія Linux- Ця стаття або розділ потребує переробки. Будь ласка, поліпшите статтю відповідно до правилами написання статей ... Вікіпедія

    Історія вільного програмного забезпечення- Фраза «Вільне програмне забезпечення», або СПО, вказує на продукти, поширювані за умовами ліберальних ліцензій, які надають користувачеві більше можливостей у порівнянні з традиційними ліцензіями на програмне забезпечення ... ... Вікіпедія

Комп'ютери досі погано розуміють природні мови, які використовуються для спілкування між людьми, по крайней мере, ще не навчилися розуміти.

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

Мови програмування можуть бути:

  • простими,
  • складними і
  • незрозумілими (наприклад, графічними).

Історія виникнення мов програмування

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

нульове покоління

  • (Електро),
  • програмуються структурою їх власного пристрою
  • вузькоспеціальні,
  • можливості програмування обмежені.

жакардовий верстат

Прикладом таких машин служить жакардовий ткацький верстат з програмованим пристроєм. Він був зроблений в 1804 році французом Жозефом Марі Жаккар. До речі, в його честь мереживна, декоративна тканина названа жаккардовой або жаккард.

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

Мал. 1. Перфокарти для ткацького верстата Жаккарда

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

машина Беббіджа

Інтернет і Веб

З'явилися спеціалізовані мови:

  • JavaScript.

Багато сайтів написані за допомогою PHP і JavaScript.

Деякі колишні мови з появою Інтернету і Веба знайшли нові ніші і стали веб-орієнтованими:

  • Ruby,
  • Pynton,
  • Java.

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

Будь-яка мова програмування - це штучна мова, який має свій цикл життя. Аналогічно, операційні системи сімейства Windows теж мають свої життєві цикли:.

Життєвий цикл мови програмування:

  • створення,
  • early adoption (початкове використання мови),
  • (Промисловий) успіх,
  • згасання, зміна іншими мовами.

У сучасному світі основна частина програмного забезпечення (софта) пишеться на 10-15 мовах, хоча за весь час, який нам відомо, було створено більше сотень мов програмування. Офіційно якось зареєстровано 300 або 400 мов.

Що є мова програмування

Мова - це

  • синтаксис (правила написання програм),
  • семантика (поведінку елементів, які входять в правила написання і вбудовані в мову),
  • runtime (Виконавча).

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

Синтаксис на прикладі Lisp

Одним з найпростіших мов програмування, які мають формальну граматику, вважається мова списків LISP.

Мал. 10. Програма на LISP

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

  • У Ліспі є вираження: може бути один атом, або список;
  • atom - це число або символ,
  • number - число, тобто, з плюсом чи мінусом цифри, не менше однієї,
  • symbol - це букви, скільки завгодно разів, можна навіть багато разів,
  • list - список, вираження в дужках більше одного разу.

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

Найпростіший інтерпретатор Лиспа займає всього 19 рядків! Жоден інший мову не може собі дозволити собі такої розкоші.

семантика

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

Варіанти подання семантики досить обмежені.

Семантика може бути:

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

Семантика розділяється на дві частини:

  • статичну,
  • динамічну.

статична семантика

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

Динамічна або фронтальна семантика етапу виконання

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

Система типів даних в мовах програмування

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

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

Якщо ж система типів присутня, то можна провести поділ мов програмування на два незалежних один від одного класу, які наведені нижче.

Система типів даних:

  • збірний або нетипізований мову
  • статична або динамічна типізація
  • сувора або слабка типізація

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

Якщо типізація динамічна, то, навпаки, тип об'єктів контекстного мови невідомий до моменту виконання, тобто тип функції або чого завгодно буде невідомий до самого кінця.

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

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

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

Наступна важлива характеристика мови -

Парадигма мови програмування

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

Головні парадигми

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

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

Ще однією важливою частиною мови, яку потрібно враховувати при використанні мови, є Runtime - то, як мова виконується.

Runtime - виконання програми

Програма може виконуватися по-різному:

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

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

представники мов

Мова C

- один з найпопулярніших, один з найважливіших по фізично написаному по ньому коду, практично це «наше все».

Він створений в 1972 році, творці - Денніс Рітчі (Dennis Ritchie) і колеги. Д.Рітчі створив також систему Linux і багато інших корисних речей.

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

До речі, С актуальний досі, використовується для:

  • системного програмування (наприклад, ядро ​​Linux написано на C),
  • number-crunching (так звані числа-дробарки, тобто, для великих обчислень, де важливо швидкодію),
  • програмування мікроконтролерів та вбудованих систем.

З - низькорівневий мову, можна сказати, що це Асемблер з людським обличчям, бо майже будь-яку конструкцію C людина може вручну перетворити в Асемблер і вийдуть досить зрозумілі операції.

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

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

Мал. 11. Приклад простий програми на C.

Java

  • Створено в 1995 році,
  • творці - Джеймс Гослінг (James Gosling) і Sun Microsystems (в цій компанії працював Гослінг).
  • Об'єктно-орієнтована, імперативний (C імперативний, але НЕ об'єктно-орієнтована),
  • строго- і статично-типізований,
  • байт-компільований з віртуальною машиною,
  • немає доступу до пам'яті, автоматичне прибирання сміття (остання працює добре, якщо є третина або чверть вільної пам'яті).

У 90-их роках JAVA отримала велику популярність як мультиплатформенний мову. Один раз написавши віртуальну машину для якоїсь платформи, припустимо для Windows або для Linux або для Mac, можна будь-які програми на JAVA запускати на ній без перекомпіляції. Тому мова була в епоху інтернету, коли було різних платформ(різні версії Windows, Різні Маки). Програми на JAVA працювали швидко і досить добре на різних платформах.

Використовується для:

  • прикладного програмування, в тому числі для веб-програмування,
  • вбудованих систем (якщо С використовується для мікроконтролерів, то JAVA - для мобільних телефонів, Терміналів і т.п.),
  • високонавантажених систем з великою кількістю користувачів (банківські програми, системи управління повітряним рухом і т.п.).

Слід відрізняти специфікації мови Java і різні реалізації JVM:

  • Sun JDK (від компанії Sun, нині це Oracle),
  • IBM JDK (продається за гроші),
  • OpenJDK (абсолютно вільна)
  • і т.п.

Мал. 12. Приклад простий програми на JAVA.

Як видно на рис. 12, доводиться писати багато букв, щоб виконати прості дії. Java часто називають новим Кобола, так як вона містить ті ж негативні властивості, які колись зробили Кобол поганою мовою.

Проте JAVA дуже популярна, зокрема, на ній написана клієнтська частина операційної системи.

Lisp

  • Він дійсно завершує Lis t P rocessor (LisP);
  • створений в 1958 році;
  • творці - Джон Маккарті;
  • чистий функціональний мову, незважаючи на досить дивний синтаксис;
  • строго- і дінаміческі- збірний;
  • як правило, інтерпретується;
  • немає доступу до пам'яті, автоматичне прибирання сміття, яке лягає на інтерпретатор, а не на віртуальну машину.

Використовується для:

  • наукового програмування і досліджень;
  • штучний інтелект - Lisp був створений на самому початку з пошуку з інтелектом. В кінці 1950-х - початку 1960-их в наукових колах було сильне відчуття, що ось-ось буде створено штучний інтелект. Тоді вважалося, що ключовими особливостямиштучного інтелекту буде можливість оперувати природною мовою, текстом, читати, говорити і робити якісь розумні речі. Для обробки смислових даних з тексту був створений Lisp, він дозволяє такі речі робити добре;
  • всього, чого завгодно, але, як правило, використовується не дуже ефективно.

Мова Lisp, розроблений в 1958 році, зазнав масу змін.

У нього є безліч реалізацій і діалектів:

  • CommonLisp (створений в 1970-их) - класична реалізація, яка вважається основною;
  • Scheme (схема) - спрощений діалект, який деякі речі з CommonLisp викидає і дозволяє робити простіше;
  • Clojure - діалект Lisp в плані мови, але працює поверх JAVA-машини, тобто компілюється в байт-код і виповнюється також, як ніби це JAVA-програма.

Мал. 13. Програма на LISP: сортування бульбашкою

Python (Пітон)

  • Названий на честь британського шоу 1970-их років Monty Pynton's Flying Circus (там старі жарти, але смішні)
  • створений в 1991 році
  • творець - голландець Guido van Rossum
  • мультіпарадігменний мову, об'єктно-орієнтована, імперативний, функціональний
  • строго- і динамічно-типізований
  • інтерпретується, байт-компільований з віртуальною машиною (в залежності від реалізації)

Використовується для:

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

Python - специфікація мови. Існує кілька основних реалізацій:

  • CPython - основна (reference)
  • Jython - поверх JVM
  • PyPy - Python in Python ( «Пітон на Python» працює швидше і краще, ніж CPython і Jython)

Мал. 14. Програма на Python: сортування бульбашкою

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

Вибір мови під задачу

Як вибрати мову під задачу, коли Ви знаєте, що Вам потрібно зробити, але не знаєте на чому?

Важлива рада: використовуйте те, на чому Ви вмієте програмувати. Це набагато краще, ніж використовувати те, на чому Ви НЕ вмієте програмувати.

екосистема

Мова, який Ви хочете взяти, не повинен бути «голим» мовою, у нього повинна бути екосистема, яка включає:

  • засоби розробки (зручне IDE)
  • готові бібліотеки і фреймворки
  • інструменти тестування для запуску тест-кейсів: тестові фреймворки і інструменти
  • системи пакетування і розгортання для того, щоб написаний код можна було упакувати, кудись викласти, щоб інші могли легко скористатися. У мови Сі немає такої можливості, а у мов Рубі і Пітон є.
  • ком'юніті. Не треба користуватися мертвими мовами, якими б класними вони не були. Якщо ні в кого спитати, Ви залишитеся в повній безвиході. Вважається, що одні ком'юніті більш дружелюбні, інші - менш. Наприклад, ком'юніті Рубі класне, а ком'юніті Java жахливе - там навіть питати нічого не треба.

Популярність

Складно знайти в команду людей, які пишуть код на рідко використовувану мову, наприклад на Eiffel. З іншого боку, на вакансію мега-популярному мови Javа, в якому поріг входу низький, набіжить багато народу, але буде непросто підібрати людей, які пишуть на ньому дійсно добре.

Чим популярніша мову, тим більше у нього бібліотек, ком'юніті, фреймворків та інших речей, які наростають самі по собі зверху.

швидкість навчання

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

JAVA - мова простий у вивченні і простий за можливостями, а далі все будується не за рахунок мови, а за рахунок інструментів.

С ++ вивчити до кінця неможливо, тому що там є дуже складні речі з кодогенерацію.

нішевість мов

Конкретні мови краще підходять для вирішення певних нішевих завдань.

Приклад 1: веб додаток, яке

  • взаємодіє з базою даних
  • внутрішній сервіс в компанії
  • потрібна швидка розробка, тому що шеф дуже просить.

Для такого завдання, швидше за все, підійде Python або Ruby. Не треба це робити на JAVA

Приклад 2: биллинговая система стільникового оператора

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

У цьому випадку наш вибір - Java, С ++, Erlang - багаті мови з багатим інструментарієм.

Приклад 3: код бортовий ЕОМ для супутника

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

Наш вибір - С і С-подібні мови (і навіть асемблер), тому що дуже мало ресурсів і ці вимоги треба дотримати.

Стаття заснована на відео:

Як правильно вибрати мову програмування - Іван Калінін

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

Сподобалася стаття? Поділіться з друзями!