Огляд сучасних програмованих мов. Розвиток мов програмування. Розробка операційної системи

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

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

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

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

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

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

Транслятори

Найважливіші елементи, що входять до мов програмування високого рівня, — транслятори. Їхня функція може бути різною. Серед ключових областей застосування трансляторів — «переклад» команд, що формуються мовою програмування високого рівня, в машинний код, зрозумілий конкретному апаратному компоненту ПК, наприклад процесору. Транслятори, що виконують цю функцію, називаються також компіляторами. Є інший різновид відповідних компонентів — інтерпретатори. Вони призначені, у свою чергу, для «переведення» високорівневих команд у ті, що зрозумілі операційній системі чи програмі.

Класифікація високорівневих мов

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

Процедурно-орієнтовані (задіяні як інструмент при обробці інформації на будь-якому етапі обчислень);

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

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

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

Процедурно-орієнтовані мови

До таких можна віднести Фортран. Він вважається першою мовою програмування високого рівня, призначеною для широкого застосування. Характеризується простою структурою. До процедурно-орієнтованих мов також відноситься Бейсік. Вважається одним із найчастіше використовуваних при навчанні програмування. Приклад іншої процедурно-орієнтованої мови – СІ. Спочатку він створювався для ОС UNIX. На його основі згодом була створена мова C++, доповнена інструментами об'єктно-орієнтованого програмування. Ще одна мова, що відноситься до категорії, що розглядається, — Паскаль. Часто також задіюється під час навчання програмування. Можливості цієї мови дозволяють його використовувати як дуже потужний інструмент розробки професійних видів програмного забезпечення.

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

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

Об'єктно-орієнтовані мови

Вивчимо тепер приклади мов програмування високого рівня, які належать до категорії об'єктно-орієнтованих. Серед таких - Visual Basic, Delphi, Visual Fortran, зазначений вище C ++, а також Prolog ++. Фактично всі вони у своїй основі містять процедурно-орієнтовані мови. Однак передбачається суттєве їхнє доповнення візуальними елементами управління з метою подальшого освоєння необхідних алгоритмів розробниками, які звикли до інших інструментів. Так, перша мова програмування високого рівня – Фортран – може бути в оперативні терміни вивчена IT-фахівцями за допомогою можливостей Visual Fortran. Аналогічним методом можна швидко освоїти Бейсік або Пролог.

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

Фортран і Лісп — перша та друга високорівневі мови

Докладніше вивчимо те, як з'явилася перша мова програмування високого рівня — Фортран, а також Лісп, що вважається другою. У 1954 року розробники з компанії IBM, очолювані Джоном Бекусом, створили мову, з якого програмісти отримали можливість істотно полегшити взаємодію Космосу з ПК, яке доти здійснювалося з допомогою машинних команд чи асемблера. Він отримав назву Fortran і незабаром став відомим і в СРСР під русифікованим найменуванням. Фортран став найпопулярнішим інструментом для наукових обчислень.

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

Прикладом досягнення практичних результатів у сфері розвитку концепцій, закладених у Фортран, вважатимуться створення Лисп. Ця мова була розроблена в 1958 році, проте широку популярність вона набула дещо пізніше — в 1960-му. Лісп був розроблений Джоном Маккарті та опублікований в одному з популярних журналів для IT-фахівців. Основне призначення мови - обробка списків. Лісп став популярним серед розробників систем штучного інтелекту. На його основі було створено такі мови, як Planner, Scheme, а також Common Lisp. Також Лісп вплинув на багато сучасних інструментів розробки ПЗ. Структура мов програмування високого рівня, популярних сьогодні, значною мірою базується на алгоритмах Фортран та Лісп.

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

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

Так, сучасні експерти виділяють універсальні високорівневі мови. До них відносяться, зокрема, ті, що були розроблені у 60-ті роки. Ключові їх характеристики:

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

Велика кількість мовних конструкцій та алгоритмів;

Значимість як для свого часу, а й у сучасного етапу розвитку комп'ютерної техніки;

Підтримка у відповідних мовах імперативної методології.

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

Унікальні мови

Деякі ІТ-експерти виділяють у самостійну категорію «унікальні мови». Серед таких: APL, Cobol, Forth, SETL, і навіть CLU. Яка їхня специфіка?

Найважливіший аспект APL — залучення масивів (векторів та матриць) як ключовий структурний тип. Специфіка мови Cobol — орієнтована на комерційну сферу. Так, його доцільно задіяти під час вирішення завдань, пов'язаних зі стандартизованим форматом подання результатів. Мова Forth характеризується використанням постфіксного запису програм, а також залученням стікової нотації. У мові SETL застосовуються сукупності значень як один із ключових типів даних. Мовою програмування високого рівня є CLU. Його основна особливість – задіяння концепції роботи з абстрактними типами даних. Багато IT-фахівців бачать логічною появу нових рішень, що базуються унікальними мовами — таких як, наприклад, Object-Oriented Cobol.

Засоби паралельного програмування

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

співпрограм;

Розгалужень;

Об'єднань;

Паралельних дужок;

Алгоритмів роботи з процесами.

Інша основа для класифікації мов аналізованого типу - методи синхронізації процесів. Відповідні рішення можуть таким чином включати:

Семафори;

монітори;

- «Рандеву»;

Критичні ділянки;

Дистанційний виклик процедур;

Транзакції, що належать до категорії атомарних.

До мов цього типу відносяться Modula-2, BLISS, Concurrent Pascal, DP, Argus.

Сімейство мов C

Вище ми розглянули як приклад мови високорівневого програмування таке рішення, як C. Насправді, воно формує ціле сімейство. Мови, що належать до нього, є приватними конструкціями C. Так, його доповнення різними об'єктно-орієнтованими компонентами спричинило розробку C++. Після суттєвої фільтрації ряду конструкцій C з'явилася мова Java. Можна відзначити, що Java створювався під впливом концепцій проекту Oberon, яким керує Ніклаус Вірт, творець мови Паскаль. Чи відноситься до високорівневих JavaScript? Безумовно, так, незважаючи на вузькість застосування - як інструмент розробки веб-сторінок. Але до мов програмування високого рівня не належать, зокрема, HTML, XML та SGML. Вони класифікуються як інструменти гіпертекстової розмітки.

Сімейство мов Pascal

Мови програмування високого рівня Pascal також утворюють окрему родину. На базі Паскаль був, власне, створений Oberon, що класифікується як мова об'єктно-орієнтованого типу. Ключова особливість Oberon – у можливості забезпечення безпеки типів. Крім Oberon, до мов сімейства Pascal можна віднести Modula-2, і навіть Component Pascal.

Сімейство мов Ada

Основний у відповідній категорії мов - замовлена ​​під потреби Міністерства оборони США Ada. Він був створений наприкінці 70-х – на початку 80-х років. Характеризується великою кількістю функцій, можливостей, універсальністю. Сімейство мов Ada включає такі рішення, як Cedar, Modula 3.

Сімейство мов Simula

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

Назва доповіді

Сучасні мови програмування та їх використання

Автор проекту

Структура проекту

● Схема класифікації мов програмування

● Класифікація мов програмування

● Огляд мов програмування

● Корисні ресурси

Схема класифікації мов програмування

Класифікація мов програмування

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

Розрізняють такі мови процедурного програмування:

 Мова Фортран створена на початку 50-х років 20-го століття для програмування науково-технічних завдань;

 Кобол – створений наприкінці 60-х років 20-го століття для вирішення завдань обробки великих обсягів даних, що зберігаються на різних носіях даних;

 Алгол (1960 рік) – це багатоцільова розширена мова програмування. У ньому вперше запроваджено поняття «блочна структура програми» та «динамічний розподіл пам'яті»;

 У середині 60-х років 20-го століття було створено спеціалізовану мову програмування для початківців – BASIC. Характеризується простотою освоєння та наявністю універсальних засобів для вирішення наукових, технічних та економічних завдань, а також завдань, наприклад, ігрових.

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

 У 1963-1966 рр. було створено багатоцільову універсальну мову PL-1. Ця мова добре пристосована для дослідження та планування обчислювальних процесів, моделювання, вирішення логічних завдань, розробки систем математичного забезпечення.

 Мова Паскаль (PASCAL) (1968-1971гг)- мова процедурного програмування найбільш популярна для ПК, яка і в даний час успішно застосовується. В основу мови Pascal покладено підхід від загального завдання до приватних (простіших і менших за обсягом). До основних принципів, якими володіє Паскаль, можна віднести: а) Структурне програмування, що ґрунтується на використанні підпрограм та незалежних структур даних; б) Програмування «згори-вниз», коли завдання ділиться на прості завдання, що самостійно розв'язуються. Потім вибудовується вирішення вихідного завдання повністю зверху донизу.

 До мов процедурного програмування можна віднести мову АДА (1979 г) Мова названа на честь першої програмістки Ади Лавлейс- дочки Байрона. Його відрізняє модульність конструкцій.

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

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

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

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

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

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

Найбільш сучасними мовами програмування є С++ та Java. З середини 90-х багато об'єктно-орієнтовані мови реалізуються як системи візуального проектування, в яких інтерфейсна частина програмного продукту створюється в діалоговому режимі, практично без написання програмних операторів. До об'єктно-орієнтованих систем візуального проектування відносяться Visual Basic, Delphi, C++ Builder, Visual C++. Мова VBA (Visual Basic for Application) - мова програм Microsoft Office (Excel, Word, Power Point та ін). VBA дотримується основного синтаксису мови та правил програмування мов Basic – діалектів, дозволяє створювати макроси для автоматизації виконання деяких операцій та графічний інтерфейс користувача, інтеграцію між різними програмними продуктами.

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

До них відносяться функціональні та логічні мови програмування. Функціональне програмування- це спосіб складання програм, у яких єдиною дією є виклик функції. У функціональному програмуванні не використовується пам'ять, як місце зберігання даних, а, отже, не використовуються проміжні змінні, оператори присвоювання і цикли. Ключовим поняттям у функціональних мовах є вираз. Програма, написана функціональною мовою, є послідовністю опису функцій і виразів. Вислів обчислюється зведенням складного до простого. Усі вирази записуються як списків. Першою мовою стала мова Лісп (LISP, LIST Processing-обробка списків) створена в 1959р. Ця мова дозволяє обробляти більші обсяги текстової інформації. Логічне програмування-це програмування в термінах логіки. У 1973 році була створена мова штучного інтелекту Пролог (Prologming in Logic). Програма мовою Пролог будується з послідовності фактів і правил, потім формулюється твердження, яке Пролог намагається довести з допомогою правил. Мова сама шукає рішення за допомогою методів пошуку та зіставлення, які в ньому закладені. Логічні програми не відрізняються високою швидкодією, оскільки процес виконання зводиться до побудови прямих і зворотних ланцюжків міркувань різноманітними методами пошуку.

Огляд мов програмування

Асемблер

Мови програмування комп'ютерів поділяються на 2 основні групи:

1) мови низького рівня;

2) мови високого рівня.

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

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

Паскаль

Мова програмування Паскаль була розроблена професором кафедри обчислювальної техніки Швейцарського Федерального інституту технології Ніколасом Віртом у 1968 році як альтернатива існуючим та все більш ускладнюваним мовам програмування, таким, як PL/1, Algol, Fortran. Інтенсивний розвиток Паскаля призвів до появи вже в 1973 році його стандарту у вигляді переглянутого повідомлення, а кількість трансляторів з цієї мови в 1979 році перевищила 80. На початку 80-х Паскаль ще більше зміцнив свої позиції з появою трансляторів MS-Pascal і Turbo -Pascal для ПЕОМ. З цього часу Паскаль стає однією з найважливіших і широко використовуваних мов програмування. Істотно те, що мова давно вийшла за рамки академічного та вузько професійного інтересу та використовується в більшості університетів високорозвинених країн не лише як робочий інструмент користувача. Найважливішою особливістю Паскаля є втілена ідея структурного програмування. Іншою суттєвою особливістю є концепція структури даних як одного з фундаментальних понять.

Основні причини популярності Паскаля полягають у наступному:

Простота мови дозволяє швидко її освоїти та створювати алгоритмічно складні програми

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

Наявність спеціальних методик створення трансляторів з Паскаля спростила їх розробку та сприяла широкому поширенню мови

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

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

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

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

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

Сі - потужний і гнучкий мову. Більшість операційної системи Unix, компілятори та інтерпретатори мов Фортран, Паскаль, Лісп, та Бейсік написані саме за його допомогою.

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

Мова C++ з'явився на початку 80-х. Створений Б'єрном Страуструпом з початковою метою позбавити себе та своїх друзів від програмування на асемблері, Сі чи різних інших мовах високого рівня.

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

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

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

Абстракція, реалізація, успадкування і поліморфізм є необхідними властивостями, якими володіє мова С++, завдяки чому вона не тільки універсальна, як і мова Сі, але і є об'єктною мовою. Фортран Фортран є широко поширеною мовою, особливо серед користувачів, які займаються чисельним моделюванням. Це пояснюється кількома причинами:

Існуванням величезних фондів прикладних програм на Фортрані, накопичених за ці роки, а також наявністю величезної кількості програмістів, які ефективно використовують цю мову;

Наявністю ефективних трансляторів Фортрана на всіх типах ЕОМ, причому версії для різних машин досить стандартизовані та перенесення програм з машини на машину зазвичай не становить великих труднощів;

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

За період сформувалася нова методологія і філософія програмування. З початку 70-х років Фортран зазнав заслуженої критики. У 1977 році було прийнято новий стандарт мови Фортран-77. На створення нового стандарту витрачено багато часу, але зараз вже можна вважати, що його розробка завершена і новий стандарт Фортран-90 почав входити до практики користувачів Фортрана. Тільки на машинах типу IBM PC існує кілька трансляторів, наприклад, Watfor, Lap-Fortran і т. д. Але найбільшого поширення на машинах цього типу набули різні версії транслятор Fortran-77. Випущений 1990 року транслятор MS-Fortran 5.0 практично повністю відповідає стандарту Fortran-90. Більшість великих науково-технічних прикладних програм написано на Фортрані тому, що він має переносимість і стійкість, а також завдяки наявності вбудованих математичних та тригонометричних функцій. Додатковою, невід'ємною частиною будь-якої прикладної програми мовою Фортран є розширена графічна бібліотека, що дозволяє використовувати різні графічні дані та зображення.

Мова створена в основному в 1975 - 1980 роках в результаті грандіозного проекту, зробленого Міністерством Оборони США з метою розробити єдину мову програмування для так званих вбудованих систем (тобто систем управління автоматизованими комплексами, що працюють у реальному часі). Малися на увазі насамперед бортові системи управління військовими об'єктами (кораблями, літаками, танками, ракетами, снарядами тощо). Тому рішення, прийняті авторами Ади, не слід вважати універсальними. Їх треба сприймати у тих особливостей обраної предметної області. Мова Ада виникла в результаті міжнародного конкурсу мовних проектів, що проходить у 1978-1979 роках. Учасники мали задовольнити досить жорстким, детально розробленим під егідою Міністерства Оборони США вимогам. Цікаво, що всі мови, що дійшли останніх турів цього конкурсу, були засновані на Паскалі. У цьому Аду можна попередньо охарактеризувати як Паскаль, розвинений з урахуванням перелічених вище п'яти основних вимог. У цьому автори пішли переважно шляхом розширення Паскаля новими елементами. В результаті вийшла значно складніша мова.

Кобол

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

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

ПЛ/1 розроблений у 1964-1965 роках фірмою IBM. ПЛ/1 належить до універсальних мов, тобто дозволяє вирішувати завдання з різних областей: чисельні розрахунки, текстова обробка, економічні завдання і т. д. За своїми можливостями він перекриває такі мови, як Фортран, Алгол-60 (створений для чисельних розрахунків), Кобол (для економічних завдань), хоча з низки причин витіснити ці мови ПЛ/1 не зміг.

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

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

Модула

Можна вважати, що історія мови Модула починається в 1980 році, коли Ніклаус Вірт, один із видатних фахівців з теорії інформації, відомий більшості фахівців з обчислювальної техніки в основному як творець мови Паскаль, опублікував опис нової мови програмування, названої ним Модула. На відміну від Паскаля, який був за задумом мовою для навчання програмування, Модула з самого початку була мовою для професійних системних програмістів, продовжуючи кращі традиції свого попередника і збагачуючи їх новими ідеями, що відповідають таким вимогам до мов програмування, як структурність, модульність та здатність до розширення. Як і безліч інших мов програмування, Модула зазнавала еволюції, під час якої її первісна назва була перероблена в ім'я Модула-2. Одночасно з розвитком мови Модула для нього створювалися нові компілятори, однак жоден з них не міг змагатися з кращими реалізаціями мов Паскаль і Сі, наприклад, розроблених фірмою Борланд. У цей перехідний для мови Модула період найкращої вважалися реалізації виконані фірмою Logitech, які за своїми характеристиками програвала Турбо Паскалю та Турбо Сі. Лише у 1988 році після появи на американському ринку системи Top Speed, Модула-2 зайняла гідне місце серед процедурних мов, призначених для системного програмування. Зростаючої популярності системи Top Speed ​​сприяло кілька факторів: зручне і, крім того, операційне оточення, що легко змінюється за бажанням користувачів, швидкий компілятор і селективний редактор зв'язків. Але найбільш суттєвим виявилося те, що створювані програми відрізнялися великою швидкодією і займали небагато місця в пам'яті.

Бейсік

Бейсік (Basic – Beginner's All-Purpose Symbolic Instruction Code – “універсальний символічний код інструкцій для початківців”). Прямий нащадок Фортрана і досі найпопулярніша мова програмування для персональних комп'ютерів. З'явився Бейсік у 1963 році (назвати автора було б важко, але основна заслуга у його появі безсумнівно належить американцям Джону Кемені та Томасу Курцю). Як і будь-які переваги, простота Бейсіка оберталася, особливо у ранніх версіях труднощами структурування; крім того, Бейсік не допускав рекурсію – цікавий прийом, що дозволяє складати ефективні та водночас короткі програми.

Розроблено потужні компілятори Бейсика, які забезпечують не лише багату лексику та високу швидкодію, а й можливість структурного програмування. На думку деяких програмістів, найцікавішими версіями є GWBASIC, Turbo-Basic та Quick Basic.

У свій час поява Quick Basic ознаменувала народження другого покоління систем програмування мовою Бейсік. Він надавав можливість модульного та процедурного програмування, створення бібліотек, компіляції готових програм та інше, що вивело його на рівень таких класичних мов програмування, як Сі, Паскаль, Фортран та ін. Більше того, через відсутність офіційного стандарту мови Бейсік, його реалізація як Quick Basic стала фактичним стандартом. Безумовними лідерами серед різних версій Бейсіка були Quick Basic 4.5 та PDS 7.1 фірми Microsoft, що з'явилися наприкінці 80-х.

Лісп

Мова Лісп було запропоновано Дж. Маккарті у роботі 1960 року й орієнтовано розробку програм на вирішення завдань не чисельного характеру. Англійська назва цієї мови – LISP є абревіатурою виразу LISt Processing (обробка списків) та добре підкреслює основну сферу її застосування. Поняття "список" виявилося дуже ємним. У вигляді списків зручно представляти вирази алгебри, графи, елементи кінцевих груп, множини, правила виведення і багато інших складних об'єктів. Списки є найбільш гнучкою формою представлення інформації у пам'яті комп'ютерів. Не дивно тому, що зручна мова, спеціально призначена для обробки списків, швидко завоювала популярність.

Після появи Лиспа різними авторами було запропоновано низку інших алгоритмічних мов орієнтованих рішення завдань у сфері штучного інтелекту, серед яких можна назвати Пленер, Снобол, Рефал, Пролог. Однак це не завадило Ліспу залишитись найбільш популярною мовою для вирішення таких завдань. Протягом майже сорокарічної історії його існування з'явилася низка діалектів цієї мови: Common LISP, Mac LISP, Inter LISP, Standard LISP та ін. програм. Тому програміст, який навчився працювати на одному з них легко зможе освоїти і будь-який інший. Великою перевагою Лиспа є його функціональна спрямованість, тобто програмування ведеться за допомогою функцій. Причому функція розуміється зазвичай, що зіставляє елементам деякого класу відповідні елементи іншого класу. Сам процес зіставлення не надає жодного впливу роботу програми, важливий лише його результат – значення функції. Це дозволяє відносно легко писати та налагоджувати великі програмні комплекси. Ясність програм, чітке розмежування їхніх функцій, відсутність каверзних побічних ефектів за її виконання є обов'язковими вимогами до програмування таких логічно складних завдань, якими є завдання штучного інтелекту. Дисципліна у програмуванні стає особливо важливою, коли над програмою працює не одна людина, а ціла група програмістів.

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

Пролог

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

Object PAL

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

Object PAL може бути використаний як інструмент для створення автономних програм. Можна написати закінчену Windows-програму і запустити її під Paradox.

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

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

Мова Java зародилася як частина проекту створення передового програмного забезпечення (ПЗ) для різних побутових приладів. Реалізація проекту було розпочато мовою С++, але невдовзі виникла низка проблем, найкращим засобом боротьби із якими було зміна самого інструменту - мови програмування. Стало очевидним, що необхідна платформо-незалежна мова програмування, що дозволяє створювати програми, які не доводилося б компілювати окремо для кожної архітектури і можна було б використовувати на різних процесорах під різними операційними системами. Мова Java знадобилася для створення інтерактивних продуктів для мережі Internet. Фактично більшість архітектурних рішень, прийнятих при створенні Java, були продиктовані бажанням надати синтаксис, подібний до Сі і Cі++. У Java використовуються практично ідентичні угоди для оголошення змінних, передачі параметрів, операторів та управління потоком виконанням коду. У Java додані всі добрі риси C++.

Три ключові елементи об'єдналися у технології мови Java

Java надає для широкого використання свої аплети (applets) - невеликі, надійні, динамічні, не залежать від платформи, активні мережеві програми, що вбудовуються в сторінки Web. Аплети Java можуть налаштовуватись і поширюватися споживачам з такою ж легкістю, як будь-які документи HTML.

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

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

Мови програмування для комп'ютерних мереж

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

Perl є інтерпретованою мовою, створеною програмістом Ларі Уоллом для обробки великих текстів і файлів і розшифровується як Practical Extraction and Report Language (мова для практичного вилучення даних та складання звітів). За допомогою Perl ви, наприклад, можете створити скрипт, який відкриває один або кілька файлів, обробляє інформацію та записує результати.

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

З винаходом World Wide Web Perl виявився прекрасним засобом для взаємодії з web-серверами через Common Gateway Interface (CGI) - загальний інтерфейс взаємодії. Команди Perl можуть легко отримати дані з форми HTML або іншого джерела та виконати з ними будь-яку дію.

Мова PHP(1995-1997гг) має засоби доступу до БД і використовується творцями динамічних сайтів у всьому світі.

Мова Tcl/Tk(Кінець 80-х років) складається з потужних команд, призначених для роботи з абстрактними нетипізованими об'єктами і дозволяє створювати програми з графічним інтерфейсом.

Мова VRML(1994г) створено в організацію віртуальних тривимірних інтерфейсів Інтернету.

Мова XML. З 1996 р. йде робота над створенням універсальної мови структури документів. Може стати заміною мови HTML.

Висновок

Корисні ресурси

Відгук про Айзілі.

Де доповідь?

Ранифка.

Re: Де доповідь?
Все буде:-D

Відгук про Шамагулову еліту.

Мішина Олександра.

Відмінна доповідь. Дізнався багато нового про мови програмування.

Морозова Олександра.

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

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

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

Перш ніж приступити до вивчення мов програмування, рекомендую вам вивчити курс .

1. JavaScript

Прототипно-орієнтована сценарна мова програмування. JavaScript спочатку створювався для того, щоб зробити web-сторінки «живими». У браузері вони підключаються безпосередньо до HTML і, як тільки завантажується сторінка - відразу виконуються.

Коли створювалася мова JavaScript, у нього спочатку була інша назва: LiveScript. Але тоді була дуже популярна мова Java, і маркетологи вирішили, що подібна назва зробить нову мову більш популярною.

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

2. Java


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

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

Спочатку мова називалася Oak («Дуб») розроблявся Джеймсом Гослінг для програмування побутових електронних пристроїв. Згодом він був перейменований на Java і став використовуватися для написання клієнтських програм та серверного програмного забезпечення.

3. PHP


Є поширеною мовою загального призначення, що інтерпретується, з відкритим вихідним кодом (скриптова мова). PHP створювався спеціально для ведення web-розробок, і код на ньому може впроваджуватися безпосередньо в HTML-код. Синтаксис мови бере початок з C, Java та Perl, і є легким для вивчення.

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

4. Python

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

5. C#


Об'єктно-орієнтована мова програмування. Розроблений у 1998-2001 роках групою інженерів під керівництвом Андерса Хейлсберга в компанії Microsoft як мова розробки програм для платформи Microsoft .NET Framework. C# відноситься до сім'ї мов з C-подібним синтаксисом, їх синтаксис найбільш близький до C++ і Java.

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

6. З++


Компілювана, статично типізована мова програмування загального призначення. Є однією з найпоширеніших мов у світі. Google Chrome, Mozilla Firefox, Winamp та лінійка продуктів Adobe були розроблені за допомогою C++. Крім того, деякі сучасні ігри та операційні системи були розроблені на С++ через швидкий процесінг та компіляцію.

7. Ruby


Проста і читана мова програмування, орієнтована на розробку веб-додатків. Розроблений Юкіхіро Мацумто у 1995 році. Мова має незалежну від операційної системи реалізацію багатопоточності, сувору динамічну типізацію, збирача сміття.

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

8. CSS


Cascading Style Sheets (каскадні таблиці стилів) - формальна мова опису зовнішнього вигляду документа, написаного з використанням мови розмітки.
Переважно використовується як опис, оформлення зовнішнього вигляду веб-сторінок, написаних за допомогою мов розмітки HTML і XHTML, але може також застосовуватися до будь-яких XML-документів.

9. C


Компільована статично типізована мова програмування загального призначення. Мова Сі була розроблена Деннісом Рітчі в 1972 році в Bell Labs. Він є попередником таких мов програмування як С++, Java, C#, JavaScript та Perl. З цієї причини вивчення цієї мови веде до розуміння та інших мов. Мова З використовується розробки низькорівневих додатків, оскільки вважається найближче до апаратного.

10. Objective-C


Компілюється об'єктно-орієнтована мова програмування, використовувана корпорацією Apple, побудована на основі мови Сі та парадигм Smalltalk. Мова Objective-C є надмножиною мови Сі, тому Сі-код повністю зрозумілий компілятору Objective-C. Мова використовується в першу чергу для Mac OS X (Cocoa) та GNUstep – реалізацій об'єктно-орієнтованого інтерфейсу OpenStep. Також мова використовується для iOS (Cocoa Touch).

11. Shell

Він не так мова, як інтерпретатор команд (командна мова). Його скрипти використовуються для автоматизації оновлення програмного забезпечення. Містить стандартні конструкції для циклів, розгалуження, оголошення функцій. У сімействі операційних систем, сумісних з ОС UNIX, мова SHELL використовується як стандартна мова управління завданнями.

12. R


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

13. Perl


Високорівнева інтерпретована динамічна мова програмування загального призначення. Назва мови є абревіатуру, яка розшифровується як Practical Extraction and Report Language - «практична мова для вилучення даних та складання звітів». Основною особливістю мови вважаються її багаті можливості для роботи з текстом, у тому числі робота з регулярними виразами, вбудована у синтаксис. На даний момент він використовується для виконання широкого спектра завдань, включаючи системне адміністрування, веб-розробку, мережне програмування, ігри, біоінформатику, розробку графічних інтерфейсів.

14. Scala


Мультипарадигмальна мова програмування, спроектована короткою і типобезпечною для простого та швидкого створення компонентного програмного забезпечення, що поєднує можливості функціонального та об'єктно-орієнтованого програмування. Scala – програми багато в чому схожі на Java-програми і можуть вільно взаємодіяти з Java-кодом.

15. Go


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

16. SQL

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

17. Haskell


Стандартна чиста функціональна мова програмування загального призначення. Є однією з найпоширеніших мов програмування за допомогою відкладених обчислень. Відмінна риса мови – серйозне ставлення до типізації. Haskell чудова мова для навчання та для експериментів зі складними функціональними типами даних.

18. Swift


Відкрита мультипарадигмальна компілювана мова програмування загального призначення. Створений компанією Apple в першу чергу для розробників iOS та OS X. Swift працює з фреймворками Cocoa та Cocoa Touch та сумісний з основною кодовою базою Apple, написаною на Objective-C. Swift замислювався як більш легкий для читання і стійкий до помилок програміста мову, ніж попередній Objective-C. Swift запозичив багато з Objective-C, проте він визначається не покажчиками, а типами змінних, які обробляє компілятор. За аналогічним принципом працює багато скриптових мов.

19. Matlab


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

20. Visual Basic


Мова програмування, а також інтегроване середовище розробки програмного забезпечення, яке розробляється корпорацією Microsoft. Мова Visual Basic успадкувала дух, стиль і синтаксис свого предка - мови BASIC, яка має чимало діалектів. У той же час Visual Basic поєднує процедури та елементи об'єктно-орієнтованих і компонентно-орієнтованих мов програмування.

Visual Basic також є добрим засобом швидкої розробки RAD додатків баз даних для операційних систем сімейства Microsoft Windows. Безліч готових компонентів, що поставляються разом із середовищем, покликані допомогти програмісту відразу ж почати розробляти бізнес-логіку програми, не відволікаючи його на написання коду запуску програми.

21. Delphi


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

На сьогоднішній день, поряд з підтримкою розробки 32 і 64-розрядних програм для Windows, реалізована можливість створювати додатки для Apple Mac OS X, а також для Android Android (безпосередньо виконувані на ARM-процесорі).

22. Groovy


Об'єктно-орієнтована мова програмування, розроблена для платформи Java як доповнення до мови Java з можливостями Python, Ruby та Smalltalk. Groovy використовує Java-подібний синтаксис з динамічною компіляцією в JVM байт-код і працює з іншим Java кодом і бібліотеками. Мова може використовуватися в будь-якому Java-проекті або як скриптова мова.

23. Visual Basic .NET


Об'єктно-орієнтована мова програмування, яку можна розглядати як черговий виток еволюції Visual Basic, реалізований на платформі Microsoft .NET. VB.NET не має зворотної сумісності з більш ранньою версією (Visual Basic 6.0). Розвиток проектів старих версій (*.vbp) можливий лише після попередньої конвертації їх у формат VB.NET спеціальним майстром (Migration Wizard); однак, після конвертації потрібне суттєве ручне доопрацювання текстів.

24. D

Мультипарадигмальна компілювана мова програмування створена Уолтером Брайтом з компанії Digital Mars. Спочатку D був задуманий як реінжиніринг мови C++, проте, незважаючи на значний вплив С++, не є його варіантом. Також мова зазнала впливу концепцій з мов програмування Python, Ruby, C#, Java, Eiffel.

25. Assembler


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

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

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

Окрім використання коментарів для одержання паралельної програми, часто йдуть на розширення існуючих мов програмування. Вводяться додаткові оператори та нові елементи опису змінних, що дозволяють користувачеві явно задавати паралельну структуру програми та в деяких випадках керувати виконанням паралельної програми. Так мова High Performance Fortran (HPF), окрім традиційних операторів Фортрану та системи спецкоментарів, містить новий оператор FORALL, введений для опису паралельних циклів програми. Найбільш цікавою рисою HPF є багаторівневе відображення масив - масив-шаблон - віртуальний процесорний масив - фізичні процесори, що дозволяє максимально гнучко відображати дані користувача на реальний комп'ютер.

Іншим прикладом є мова mpC, розроблена в Інституті системного програмування РАН як розширення ANSI С. Основне призначення mpC - створення ефективних паралельних програм для неоднорідних обчислювальних систем. Користувач може задати топологію мережі, розподіл даних та обчислень та необхідні пересилання даних. Надсилання повідомлень організовано з використанням інтерфейсу MPI.

DVM-система призначена для створення переносних та ефективних обчислювальних додатків мовами C-DVM та Fortran-DVM для паралельних комп'ютерів з різною архітектурою. Абревіатура DVM відповідає двом поняттям: Distributed Virtual Memory та Distributed Virtual Machine. Перше відбиває наявність єдиного адресного простору. Друге відображає використання віртуальних машин для двоступінчастої схеми відображення даних та обчислень на реальну паралельну машину. Модель програмування передбачає завдання DVM-вказівок за допомогою спецкоментарів, а значить, один варіант програми для послідовного та паралельного виконання. Підтримуються три групи директив: директиви розподілу даних, директиви розподілу обчислень та специфікації віддалених даних. Компілятор перекладає програму на мову Фортран або Сі, використовуючи для організації міжпроцесорної взаємодії одну з технологій паралельного програмування (MPI, PVM, Router). До системи DVM також входять бібліотека підтримки LIB-DVM, DVM-налагоджувач, провісник виконання DVM-програм, аналізатор продуктивності DVM-програм. Система розроблена в Інституті прикладної математики ім. М.В.Келдиша РАН.



Спеціальні мови програмування

Якщо потрібно точніше відобразити або специфіку архітектури паралельних систем, або властивості якогось класу завдань певної предметної області, використовують спеціальні мови паралельного програмування. Для програмування трансп'ютерних систем було створено мову Occam, для програмування потокових машин було спроектовано мову одноразового присвоєння Sisal. Дуже цікавою та оригінальною розробкою є декларативна мова НОРМА, створена під керівництвом І.Б.Задихайла в Інституті прикладної математики ім. М.В.Келдыша РАН для опису вирішення обчислювальних завдань сіточними методами. Високий рівень абстракції мови дозволяє описувати завдання в нотації, близькій до вихідної постановки проблеми математиком, що автори мови умовно називають програмуванням без програміста. Мова з одноразовим привласненням, не містить традиційних конструкцій мов програмування, що фіксують порядок обчислення і тим самим приховують природний паралелізм алгоритму.

Бібліотеки та інтерфейси, що підтримують взаємодію паралельних процесів

З появою масивно-паралельних комп'ютерів широкого поширення набули бібліотеки та інтерфейси, що підтримують взаємодію паралельних процесів. Типовим представником даного напрямку є інтерфейс Message Passing Interface (MPI), реалізація якого є практично на кожній паралельній платформі, починаючи від векторно-конвеєрних супер-ЕОМ до кластерів та мереж персональних комп'ютерів. Програміст сам явно визначає які паралельні процеси додатки де програми і з якими процесами повинні або обмінюватися даними, або синхронізувати свою роботу. Зазвичай адресні простори паралельних процесів різні. Зокрема, такої ідеології слідують MPI та PVM. В інших технологіях, наприклад Shmem, допускається використання як локальних (private) змінних, так і загальних (shared) змінних, доступних усім процесам програми, і реалізується схема роботи над загальною пам'яттю за допомогою операцій типу Put/Get.

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

Паралельні предметні бібліотеки

Часто практично прикладні програмісти взагалі використовують ніяких явних паралельних конструкцій, звертаючись у критичних за часом рахунки фрагментах до підпрограм і функцій паралельних предметних бібліотек. Весь паралелізм і вся оптимізація заховані у викликах, а користувачеві залишається лише написати зовнішню частину своєї програми та грамотно скористатися стандартними блоками. Прикладами подібних бібліотек є Lapack, ScaLapack, Cray Scientific Library, HP Mathematical Library, PETSc та багато інших.

Деякі паралельні предметні бібліотеки

BLAS та LAPACK - бібліотеки, що реалізують базові операції лінійної алгебри, такі як перемноження матриць, множення матриці на вектор і т.д.

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

FFTW, DFFTPack – швидке перетворення Фур'є.

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

Спеціалізовані пакети та програмні комплекси

І, нарешті, останній напрямок, про який варто сказати, це використання спеціалізованих пакетів і програмних комплексів. Як правило, у цьому випадку користувачеві взагалі не доводиться програмувати. Основне завдання – це правильно вказати всі необхідні вхідні дані та правильно скористатися функціональністю пакета. Так, багато хіміків для виконання квантово-хімічних розрахунків на паралельних комп'ютерах користуються пакетом GAMESS, не замислюючись про те, як реалізовано паралельну обробку даних у самому пакеті.

Для вирішення обчислювальних завдань зараз все активніше використовуються графічні процесори, але досі відкрите питання: як писати ефективні програми під відповідні конфігурації?

15.06.2011 Андрій Адінець

Для вирішення обчислювальних завдань зараз все активніше використовуються графічні процесори, але досі відкрите питання: як писати ефективні програми під відповідні конфігурації? Стандартне рішення – зв'язка CUDA або OpenCL – дозволяє порівняно швидко реалізувати алгоритм, проте створити оптимізовану під конкретну конфігурацію версію за їх допомогою складно. Потрібні інструменти для програмування графічних процесорів вищого рівня, які можуть бути створені, наприклад, за допомогою мов, що розширюються.

Ще три роки тому графічні процесорні пристрої (Graphical Processing Unit, GPU) розглядалися лише як відеокарти для ПК, то зараз ставлення до них змінилося – з'явилися спеціальні серверні моделі GPU, орієнтовані на вирішення обчислювальних завдань, збільшилася продуктивність на обчисленнях із подвійною точністю, виникли системи рекордної продуктивності, що займають вищі рядки в Top500. Як писати ефективні програми під такі машини? Стандартна відповідь – зв'язка CUDA або OpenCL для програмування GPU та MPI на рівні кластера. Ці інструменти доступні, активно підтримуються виробниками обладнання, під них вже написано багато програм, проте є недоліки.

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

Створювати такі інструменти можна різними шляхами: вводити нову мову програмування; додавати директиви до вже існуючої мови, як робиться в моделі PGI Accelerator або CAPS HMPP; скористатися мовами, що розширюються. Розширювані мови- мови програмування, синтаксис та семантика яких не фіксовані, а можуть бути змінені залежно від потреб програміста. У порівнянні з традиційними, мови, що розширюються, мають ряд переваг: у них простіше додавати нові можливості; вони відкриті; вивчення нових моделей програмування на основі таких мов простіше, оскільки потрібно вивчити лише порівняно невеликі за обсягом розширення; за допомогою таких мов легше виконувати тонке налаштування та оптимізацію програм.

Розширювані мови

Для того щоб мова була розширюваною, необхідно щоб у ній були присутні:

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

Виявляється, що мов, які відповідають цим вимогам, порівняно небагато: Lisp, Nemerle, Seed7, xoc і Stratego. При цьому xoc, який призначений для розширення мови Сі, використовує окрему мову Zeta для написання розширень, а Stratego - це мова предметної області створення перетворювачів вихідного коду. Nemerle - мова, що розширюється, використовує середовище. Net.

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

У мові Nemerle для цього використовується конструкція, наприклад, створює дерево, що складається з оголошення змінної i з початковим значенням 0. Квазицитування схоже на створення рядкових об'єктів при рядкових константах. На рис. 1 наведено приклад квазіцитування. Конструкція інтерполяції дозволяє підставляти значення змінних фіксований шаблон всередині квазіцитування. У Nemerle для цього використовуються конструкції $(...), якщо потрібно підставити список, наприклад. Також у мовах, що розширюються, присутні конструкції розбору дерева програми. У мові Nemerle для цього використовується оператор match(...) (...), аналог switch з мови Сі, як гілки якого використовуються конструкції квазіцитування. При цьому інтерполяція трактується як оголошення нових змінних, які у разі успішного зіставлення набувають значення відповідних піддерев. Наприклад, для оператора зіставлення match(e) (| => ... ), якщо e містить дерево, змінну a потрапить, а змінну b .

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

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

Історично першим з'явився механізм макросів у Лиспі, програма в якому представляється як звичайний список і не вимагає спеціальних конструкцій для роботи з деревом програми, тому саме в цій мові програмування, що розширюється, набуло найбільшого поширення. Макроси в Nemerle аналогічні таким у Лиспі. У системі xoc механізм розширень реалізований через розширення граматики та атрибути дерева розбору. Будь-яке розширення обов'язково задає два атрибути: тип синтаксичної конструкції та вираз базовою мовою, в яку вона перетворюється.

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

Як використовувати мови?

Для мови програмування, що розширюється, можна написати конструкції, що дозволяють найбільш зручним способом програмувати графічні процесори, що і було зроблено в рамках проекту NUDA (Nemerle Unified Device Architecture), метою якого є створення розширень мови Nemerle для програмування GPU. Як інтерфейс взаємодії з GPU та цільової мови для представлення програми використовується OpenCL.

Для початку треба реалізувати виконання на GPU підмножини коду мовою Nemerle. При цьому повинні підтримуватись звичні оператори мови, такі як цикли та розгалуження, а також робота з простими типами даних, структурами та масивами. Код GPU виноситься в окремі функції, або в ядра NUDA. Кожне ядро ​​відзначається макросом nukernel, який за кодом ядра генерує код OpenCL і метод-заглушку для виклику ядра на боці хоста. Перед генерацією коду проводиться розкриття всіх макросів, крім макросів циклів і розгалуження. Якщо всередині ядра потрібно викликати функцію, ця функція повинна бути позначена макросом nucode, який для цієї функції згенерує код на мові OpenCL. Виклик ядра здійснюється за допомогою макросу nucall; крім параметрів ядра, йому передається ще й конфігурація грат потоків, з якої воно запускається.

Найчастіше як ядро ​​для GPU використовується тіло циклу, тому хотілося б відразу переносити цикл на GPU. У Nemerle це можна реалізувати – відповідний макрос у NUDA називається nuwork. Як обов'язкові параметри він приймає розмір блоку потоків і на підставі поточного контексту та аналізу коду тіла циклу визначає набір змінних, які необхідно передати ядру як параметри. Тіло ядра формується з тіла циклу, обчислення індексів циклу через глобальний номер потоку, а також умови, що дозволяє коректно виконувати цикл навіть у тому випадку, коли глобальний розмір сітки не поділяється на розмір групи потоків. На місце циклу підставляється виклик макросу nucall, який здійснює виклик згенерованого ядра.

В принципі, можна дозволити використовувати в GPU-програмах звичайні масиви мови Nemerle, але це призводить до високих накладних витрат - масив потрібно копіювати в пам'ять GPU при кожному виклику ядра, а потім копіювати назад. Тому в програмах для GPU використовуються спеціальні типи-масиви з лінивою синхронізацією між GPU та CPU. Це дозволяє, з одного боку, не захаращувати текст програми командами копіювання даних, з другого - уникнути накладних витрат за копіювання даних. Для таких масивів, як і для звичайних масивів Nemerle, використовується управління пам'яттю за допомогою складання сміття. Для виділення пам'яті під такі масиви існує макрос nunew, який треба застосувати до звичайного оператора виділення пам'яті.

На рис. 4 зліва наведено звичайну програму складання масивів, а справа - аналогічну програму, але виконує обчислення на GPU. Отримати GPU-програми із звичайної досить просто - потрібно лише застосувати макроси до циклів та операцій виділення пам'яті, при цьому обсяг коду практично не змінюється. Програма, написана з використанням NUDA, займає менше ніж 20 рядків коду. Аналогічна програма, але чистою мовою Сі та OpenCL займає понад 100 рядків.

Крім макросів, що полегшують роботу з GPU, система розширень NUDA включає також інструкції для перетворення циклів. Анотації, насправді, є особливими макросами. Наприклад, анотація inline застосовується до циклу з фіксованим числом ітерацій та виконує його повну розгортку. Анотація dmine виконує глибоку розгортку циклу. "Глибока розгортка" означає, що створення кількох копій тіла циклу і перемішування виконуються не тільки для перетворюваного циклу, але і для вкладених циклів, якщо вони незалежні.

Ефект

Для чого програмісту потрібно вивчати нову мову і освоювати нові бібліотеки мов, що розширюються? Основна відповідь – продуктивність. Маючи алгоритм із паралельних циклів, що працюють з масивами і записаний мовою Nemerle, достатньо додати кілька анотацій, щоб отримати програму для GPU. При цьому програма буде виконуватися на будь-якому пристрої з підтримкою OpenCL, включаючи графічні nVidia і AMD, а також процесори x86. Щоб досягти того ж за допомогою тільки технологій OpenCL або CUDA, потрібно витратити значно більше ресурсів, які підуть не тільки на написання вихідного коду, але і налагодження взаємодії між хостом і GPU.

Інша причина – продуктивність створеного коду. На CUDA або OpenCL перетворення циклів потрібно виконувати вручну, причому окремо кожної архітектури. Це довгий і загрожує помилками процес, а отриманий в результаті код важко читати і незручний для супроводу. З NUDA цю роботу можна виконувати за допомогою анотацій. Наприклад, для декількох ядер можна оптимізувати операції згортки зображень або множення матриць за допомогою анотацій inline і dmine. Без збільшення розміру вихідного коду вдається досягти підвищення продуктивності в два-п'ять разів. При цьому, якби ті ж перетворення виконувалися вручну, це призвело б до збільшення коду в рази, а іноді і на порядок, не кажучи вже про витрати часу на налагодження і підбір оптимальних параметрів розгортки. Наприклад, універсальна анотована програма з семи рядків у NUDA множення транспонованої матриці на матрицю з подвійною точністю виконується на nVidia Tesla C2050 лише на 40% повільніше за саму швидку в даний момент реалізації (CUBLAS 3.2). Аналогічна програма, написана вручну, зайняла б 70 рядків коду. Звичайно, для стандартних завдань можна один раз вручну написати код, щоб підвищити продуктивність, але для специфічних завдань зниження трудовитрат і підвищення продуктивності буде дуже доречним. Нарешті, підвищення продуктивності відноситься і до створення самих розширень: створювати їх за допомогою мов, що розширюються, простіше, ніж за допомогою традиційних інструментів. Вся система NUDA, незважаючи на свою функціональність, займає лише 12 тис. рядків коду, крім тестів. Це порівняно небагато, наприклад, компілятор мови Nemerle (складання 9025) займає близько 130 тис. рядків.

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

Андрій Адінець([email protected]) – м.н.с. НДВЦ МДУ (Москва).