10 переваг мови С++, яка і досі залишається актуальною
Усім привіт, мене звати Іван. Маю
Це стаття про переваги С++ і чому ця мова ще є актуальною. Ця стаття буде цікава тим, хто вже володіє якоюсь мовою програмування і хотів би зрозуміти, чи варто вчити С++ і які її переваги над іншими мовами, а також тим, хто розуміє С++ і хотів би дізнатися більше.
1. Багатопарадигмова мова
Глобально парадигми програмування можна розділити на дві категорії: імперативна та декларативна. Всі з Вас, хто програмує, певною мірою вже знайомі з імперативною, вона включає ООП.
C++ — мова з декількома парадигмами, які можуть вирішити проблему багатьма різними способами. С++ підтримує наступні парадигми:
- процедурна;
- функціональна;
- об’єктноорієнтована.
Багатопарадигмова мова програмування дозволяє програмістам вибирати конкретний підхід або змішувати частини різних парадигм програмування, надаючи гнучкість для розв’язання різних проблем.
Переваги використання багатомовності включають скорочення часу, витраченого на вивчення нових носіїв для різних мов, і полегшення переходу до різних парадигм.
2. Управління пам’яттю
Тривалість зберігання — це властивість ідентифікатора, що визначає правила створення і знищення об’єкта.
Існують 4 види тривалості зберігання:
- автоматичний;
- статичний;
- поточний;
- динамічний.
Тривалість зберігання тісно пов’язана з тривалістю життя об’єкта. Наприклад, два глобальні об’єкти з властивістю статичної тривалості зберігання мають однаковий час життя — весь час виконання програми. Водночас два об’єкти з динамічною тривалістю зберігання даних будуть мати різні терміни життя. Тривалість їхнього життя залежить від того, коли викликаються відповідні функції динамічного управління пам’яттю.
Багато видів тривалості зберігання дозволяють розв’язувати різні типи задач різними методами, а також додають гнучкості у використанні мови.
3. Нульова абстракція
Принцип нульових накладних витрат — принцип конструкції C++, який стверджує:
Ви не платите за те, що не використовуєте.
Те, що ви використовуєте, настільки ж ефективне, як і те, що ви могли б писати вручну.
В загальному випадку це означає, що C++ не буде додавати функції, які додають будь-які накладні витрати, чи то в часі, чи у просторі, більше ніж програміст міг би ввести без використання функції. Єдиними двома особливостями мови, які не відповідають принципу нульового накладу, є ідентифікація типу виконання та виключення, і тому більшість компіляторів запускають переключення, щоб вимкнути їх.
Приклад нульової абстракції: масиви
4. C++ сумісна з попередніми версіями протягом десятиліть
С++ сумісний з попередніми С++ версіями протягом кількох десятиліть, а реалізація підтримувала бінарну сумісність так довго, або майже так само довго. Жодна інша мова програмування не має цього.
Що робить будь-яку іншу мову так само підхожою для взаємодії з безліччю бібліотек С++, які були написані за всі ці десятиліття.
5. Детерміноване руйнування
Детерміноване руйнування не є синонімом до RAII. Мало мов наблизилися до того, щоб мати такий спосіб життя і безпеку ресурсів. RAII є загальнішим методом управління всіма ресурсами, в той час як garbage collection використовується тільки при роботі з пам’яттю.
Виділення ресурсу (або отримання) здійснюється під час створення об’єкта (зокрема ініціалізації) конструктором, поки ресурси вивільняються на момент знищення деструктором.
Детерміноване знищення об’єктів, можна знайти лише в декількох інших мовах.
Коли виконання залишає функцію або будь-яку іншу область, чи то регулярну, чи то за винятком, всі локальні об’єкти знищуються і виконуються їх деструктори. Не тоді, коли збирач сміття відчуває, що щось потрібно прибрати, а відразу. Детерміноване руйнування гарантує, що ресурс звільняється, як тільки він нікому не потрібен.
6. Перевантаження оператора
Це не є унікальним для C++, але це все ще є особливістю. C++ має дещо, що може бути справді жахливим (не в тих руках!). Такі особливості, як перевантаження операторів: ними можна зловживати, але вони дозволяють містичні/ магічні бібліотеки, такі як boost spirit.
Існують правила для операторів перевантаження і їх потрібно дотримуватися для запобігання таким ситуаціям у своєму коді. Але в правильних руках вони набагато покращують читання коду і ховають якісь речі під капотом для простішого використання.
7. Невизначена поведінка
С++ — це мова програмування, задана через стандарт, який є «абстрактним» у різний ситуаціях.
У стандарті написано:
«Невизначена поведінка виникає, коли програма виконує щось, результат чого не визначено стандартом.»
Щоб імплементація могла робити якісь речі, що виходять за рамки відповідальності за реалізацію, то стандарт ніяк це не забороняє робити, що зазначено у цих «невизначених ситуаціях поведінки». Перевагою є те, що програма буде уникати непотрібної перевірки (наприклад, перевірки масиву за межами), яка буде коштувати часу для виконання програми, як в більшості інших сучасних мов програмування.
Ще, наприклад, вона не вимагає, щоб реалізація забезпечувала доступ до об’єктів у межах цих об’єктів.
Ці «ситуації» є тим, що ми називаємо «невизначеною поведінкою»: їх здійснення не має конкретної відповідальності, і тому стандарт дозволяє «все» і виходить, що мова не обмежена і лімітована в поведінці стандартом. Це частково пояснює, чому С++ все ще дуже успішна у застосунках, які потребують ефективного використання апаратних ресурсів.
8. Можливість використання функції друга
Friend — ключове слово в C++, яке використовується для обміну інформацією про раніше прихований клас. Наприклад, приватні члени класу приховані від всіх інших класів і можуть бути змінені тільки через розсилки або роздачі. Це ключове слово розширює можливості мови, і змінює поняття приховування в ООП для С++, а також додає варіацію способів вирішення проблем.
9. Узагальнене програмування
Загальне програмування є узагальненням програмних компонентів таким чином, щоб їх можна було легко використовувати в найрізноманітніших ситуаціях. У C++, шаблони класів і функцій є особливо ефективними механізмами для спільного програмування, тому що вони роблять узагальнення можливим без втрати ефективності. Генерація всіх типів відбувається на етапі компіляції, і це дає можливість реалізувати TMP.
Template Metaprogramming (TMP) — метод програмування, при якому компілятор використовує шаблони для генерації тимчасового вихідного коду, який він поєднує з рештою вихідного коду і компіляторів. Вихід цих шаблонів може охоплювати константи часу компіляції, структури даних і повні функції, які не займають часу у часі виконання.
10. Мова середнього рівня
Мова середнього рівня, що означає підтримку високого рівня програмування та низького рівня програмування. Вона підтримує використання ядра та драйверів у низькорівневому програмуванні, а також підтримує системні програми мовою програмування високого рівня. С++ сприймається як інструмент кодування середнього рівня, на відміну від інших мов низького і високого рівня. Тому він досить збалансований, щоб дозволити програмістам контролювати ситуацію у процесі розробки та маніпулювати апаратними системами.
Висновок
С++ дає гнучкість у використанні та максимальне управління тим, що використовується. C++ дозволяє познайомитися з низькорівневими концепціями програмування і допомагає зрозуміти, як комп’ютери думають і працюють.
Найкращі коментарі пропустити