Високі і низькі мови програмування

Еволюція мов програмування з точки зору рівня абстракції

В епоху появи перших комп’ютерів (1940-і рр.) засоби створення комп’ютерних програм були досить складні і вимагали тривалої і складної професійної підготовки. Фактично фахівцям доводилося кодувати алгоритми в так званих машинних кодах.

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

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

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

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

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

Великим кроком вперед у підвищенні рівня абстракції мов програмування стало створення мови програмування Сі, розробленого в кінці 1960-х рр. за участю видатного фахівця ой епохи Денніса Рітчі. Програми, написані на Сі, стали більше нагадувати алгебраїчні формули, ніж безликі стовпці машинних кодів. Це дозволило залучити до програмування велика кількість фахівців з інших галузей, зробити його більш демократичним. Розвиваючи ідеї мови Сі, Бйорн Страуструп в 1970-1980-і роки розробив мову C ++ ( “Сі з класами”), який дозволив писати більші і стійкі програми.

Незважаючи на проривний характер мов Сі і C ++, в них залишалося чимало специфіки, освоєння якої вимагало глибокого знання архітектури комп’ютерів. 1990-і рр. стали часом появи і розвитку мови Java, який базувався на синтаксисі C ++, але знімав з програміста відповідальність за такі рутинні операції, як виділення і звільнення пам’яті, спостереження за підтриманням спочатку заданих типів змінних і т.п. Поява Java стало відправною точкою для розвитку високорівневих мов нового покоління, при використанні яких фахівець може більшою мірою зосередитися на предметної області (C #, Go, JavaScript і т.д.).

Мови програмування низького рівня

Низькорівневі мови програмування, звані також мовами програмування низького рівня, представляють собою, як було сказано вище, синтаксичні системи, близькі до того виду, який є програми, написані в машинних кодах. Їх часто називають мовами асемблера (to assemble по-англійськи означає збирати).

Асемблер – мнемонічна (тобто розрахована на зручність запам’ятовування) надбудова над системою машинних кодів того чи іншого комп’ютерного процесора.

Корпораціями випускається безліч процесорів, і архітектури цих чіпів можуть сильно відрізнятися. Найбільш широкого поширення набули процесори фірми Intel x86, які використовуються в персональних комп’ютерах, але є й інші, розраховані на вирішення специфічних завдань (наприклад, в компактних пристроях використовуються процесори ARM). Більш того, для одного і того ж процесора може існувати кілька варіантів асемблера, що розрізняються директивами і макросами (наприклад, для написання програм для різних операційних систем).

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

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

Мови програмування високого рівня

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

Для ЯП високого рівня характерний високий рівень абстракції. Програміст, використовуючи їх, більше розумової енергії може присвятити осмислення предметної області, тобто досягненню мети, для якої він пише програму (онлайн-продажу, електронний довідник, моделювання фізичних систем тощо), а також подбати про зручність користувача, і інших моментах, пов’язаних скоріше з дизайном, маркетингом і т.п., ніж з програмуванням. Про таких технологічних операціях, як виділення і утилізація оперативної пам’яті піклується сама мова в момент компіляції або виконання програми. Наприклад, у багатьох високорівневих мовах (Java, C #, JavaScript) передбачені “збирачі сміття”, автоматично звільняють пам’ять від більше невикористовуваних об’єктів.

Перевагою мов високого рівня є і те, що багато хто з них мають кроссплатформенную: програма, написана, одного разу, буде працювати не тільки на початковій архітектурі, але і будучи перенесеної в інше оточення. Наприклад, програма, розроблена на мові Java в операційній системі Linux може бути запущена без змін в середовищі Microsoft Windows або на iOS.

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

  • C ++
  • С #
  • Go
  • Java
  • JavaScript
  • Python
  • Rust
  • Swift
ПОДІЛИТИСЯ: