Порівняння мов програмування за швидкодією

Мови програмування використовуються розробниками для написання певних наборів інструкцій мікропроцесорів, що виконують конкретні завдання. Існує багато видів мов. Движок, створений піонером комп’ютеризації Чарльзом Бэббиджем, став попередником сучасних персональних комп’ютерів або точніше логікою ПК. Для того, щоб розробник правильно підібрав інструкції для написання програми потрібно виконати грамотне порівняння мов програмування. Про це дана стаття!

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

У 1942 році народився мова ENIAC, коли комп’ютерна ідея охопила науковий світ. Це було 30-тонне чудовисько, яке містило більше 20 000 вакуумних трубок і займало 167 квадратних метрів площі. Програмування було таким громіздким. Після виконання розрахунків були потрібні тижні, щоб розшифрувати ENIAC, процесу відновлення даних з жорсткого диска взагалі не існувало. “Шифр” був один, тому виконувати порівняння мов програмування було не потрібно.

У 1945 році доктор Джон фон Нейман, працюючи над його вдосконаленням, виявив, що додавання і збереження коду перетворювача в програмуванні значно скорочує час процесу, так з’явився новий напрямок EDVAC, яке розшифровується як Electronic Discrete Variable Automatic Computer. На відміну від ENIAC, EDVAC використовував двійковий код замість десяткового — серії нулів і одиниць на перфокартах, що подаються на машину. Десятковий код — це перше покоління, двійковий — друге. Тепер у розробників з’явилася формальна підстава для проведення порівняння мов програмування. А також вибір.

Незабаром був розроблений перший елементарний мову програмування. Умовна передача управління Short Code була винайдена в 1949 році. На відміну від машинного коду, Short Code використовував логічні оператори, такі як «if», «then» для визначення команди, які були схожі на логічні твердження математики, наприклад, якщо червоний – «THEN stop» або «IF 0», то помножити на два.

«Компілятор» народився у 1952 році. FORTRAN був першим з мов програмування третього покоління, створений у 1957 році, за яким слідували мови LISP, Algol в 1958 і COBOL в 1959. У мовах програмування третього покоління використовувалися фактичні англійські слова або синтаксис для компіляторів перекладу в двійковий або машинний код. Що було досить зручно. Порівняння мов програмування в цей період виконували на користь Algol або COBOL, в залежності від технічної потужності машини.

Алгол або “шифр” алгоритмів поступилися BNF Pascal в 1968 році. Кожне обчислення могло відбуватися лише з певною послідовністю коду або функції. Наступні мови підвищили ефективність програм кодування, використовуючи об’єктно-орієнтоване програмування, а також методи сценаріїв і синтаксис, створюючи зшиті мови C ++, Perl і Java, Visual Basic Widgets. Тепер вже було декілька “шифрів”. У цей період у розробників з’явилася безліч критеріїв порівняння мов програмування.

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

Є три типи чітко диференційованих мов: машинний, мови низького і високого рівня.

Призначення мов:

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

  • Імператив, Cobol, Pascal, C і Ada.
  • Декларативний, Лисп і Пролог.
  • Об’єктно-орієнтований, Smalltalk та C ++.
  • Проблемно-орієнтований, специфічні мови для управління.
  • Природний мову програмування, нові види, які прагнуть наблизити дизайн і конструювання до мови людей. Зробити його простіше.
  • Інша класифікація високого рівня враховує розвиток комп’ютерів і використовується у вигляді критеріїв порівняння мов програмування:

  • Першого покоління — машинний і Асемблер.
  • Другого покоління — перші мови програмування високого імперативного рівня FORTRAN, COBOL.
  • Третього покоління — це мови програмування високого імперативного рівня, але набагато більше використовуються і актуальні в даний час: ALGOL 8, PL/I, PASCAL, MODULA.
  • Четвертого покоління – в додатках для управління базами даних: NATURAL, SQL.
  • П’ятого покоління — для штучного інтелекту та обробки природних мов: LISP, PROLOG.
  • Критерії порівняння. Принцип

    Порівняння мов веб-програмування ніколи не було простою і об’єктивної завданням. Зазвичай розглядають десять критеріїв оцінки.

    Список критеріїв:

  • Експресивність — простота мови для вираження алгоритмів.
  • Точність визначення — послідовність і відсутність двозначності.
  • Типи і структури даних.
  • Модульність — можливість розробки компонентів самостійно.
  • Засоби введення/виводу — підтримка взаємодії з навколишнім середовищем.
  • Переносимість.
  • Ефективність і продуктивність для порівняння швидкодії мов програмування.
  • Педагогіка — легкість навчання і викладання.
  • Спільність — придатність, використання.
  • Стандартизація.
  • Цей список використовується для порівняння у дуже широкому спектрі від LISP до COBOL через ALGOL і служить відправною точкою отримання результатів.

    Висока експресивність

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

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

    У підсумку, C ++ виразніша, ніж C, для середніх і великих додатків, що і слід було очікувати, так як він був розроблений для охоплення більшої кількості проблем з допомогою «множинних парадигм». Порівняння мов програмування C c Java Delphi.

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

    Аспекти для розробників

    Мова Сі довгий час вважався хорошим прикладом послідовного та однозначного мови, особливо серед сучасників. Творці визнають певні недоліки в позначеннях. Основна проблема полягає у великій кількості аспектів, пропонованих розробнику, серед яких виділяється розмір і типи даних. Наприклад, в компіляторах ПК 1980-х діапазон типів “int” був між – 32768 і 32767, що було чітким відображенням 16-бітних процесорів. В даний час прийнято приймати 32-бітні для цілих чисел, тому діапазон часто варіюється від -2 147 483 648 до 2 147 483 647. Очевидно, що це створює серйозні проблеми з перенесенням мови.

    Ці недоліки, на жаль, повністю успадковані C ++, і на сьогодні у них немає чіткого рішення. Мова Java, був створений з самого початку з метою усунення неоднозначностей і залежностей реалізатора і його допоміжних класів, тому в даний час є кращим з популярних мов.

    Типи і структури даних

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

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

    Зазвичай програміст повинен уникати такого роду реалізацій “з нуля”. Наступний приклад вирішує ту ж проблему, використовуючи бібліотеки Glib.

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

    Модульність та рівні упаковки

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

    Що стосується «рівнів упаковки» компонентів, мова C на практиці надає тільки два рівня: видимі компоненти у файлі коду та глобально видимі компоненти, наприклад, функції та змінні. В C ++ концепції «class» і «namespace» надають два додаткових рівня «упаковки», в той час як в Java еквіваленти відповідають класам і «пакетів». Критерій засоби вводу-виводу визначає можливість послідовного, довільного і індексованого доступу до файлів, яким володіють. Також робиться посилання на доступ до систем баз даних.

    Доступ до систем бази даних

    Оскільки «C» був і залишається одним з найбільш популярних мов, що використовуються для розробки середніх і великих систем, будь-який додаток надає інтерфейс програмування, що дозволяє доступ через мову C. Це практично обґрунтовано для всіх найпопулярніших комерційних і некомерційних баз даних, з якими C має необмежений доступ, хоча і не самий зручний.

    Зі свого боку, програма, написана на C ++, зазвичай має можливість використовувати API мови C. Багато системи баз даних надають покращений об’єктно-орієнтований інтерфейс, доступний на цій мові.

    Творці Java, завдяки попередньому досвіду, стандартизували об’єктно-орієнтований інтерфейс для доступу до будь базі даних портативним способом. Цей API називається Java Database Connectivity, і завдяки великій популярності Java практично всі великі постачальники БД створили реалізації цього інтерфейсу, що сприяє переносимості з точки зору доступу до них, при цьому несумісність і розширення SQL зберігаються.

    У цьому сенсі Java ввів радикальний, хоча і передбачуваний підхід при розробці мови, практично не має функцій, що залежать від виконавця. Досягнута переносимість якісно перевершує те, що можна отримати з допомогою мови C/C ++, і виконується автоматично будь-розробником. Тому якщо необхідна максимальна мобільність при низькій вартості», вибір залишається за Java.

    Порівняння продуктивності мов програмування

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

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

    Всі мови мають бути переведені у певний момент на «машинний мова» для виконуваних програм. Спрощено цей процес називається «компіляцією», і мова c. мова C ++ слідують цій схемі «компіляції» в «машинний мову» процесора. Зокрема, мова C має дуже прості структури даних, які є прямим перекладом на «машинний мову». У багатьох випадках ця простота робить програму продуктивною.

    Спільність та стандартизація

    На практиці C зазвичай використовується для створення базових або основних компонентів, наприклад, ядра багатьох операційних систем, в той час як C ++ і Java мають набагато більш широкий спектр — комерційні програми всіх видів. Java, багато в чому завдяки передбаченню і публічності Sun і різних постачальників «серверів додатків», в даний час широко використовується в контексті веб-серверів, сервлетів та JSP, часто супроводжуються багаторівневою архітектурою.

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

    Частково з цієї причини Sun спочатку виключила використання аналогічного механізму стандартизації Java (мови і бібліотек), але потім поступилася і стежить за цим (Java Community Program.) Крім того, Sun надає вимогливі сертифікаційні тести, щоб розробники могли підтвердити і опублікувати свою прихильність стандартам.

    Еволюція та оновлення

    C та його «бібліотека за стандартом C99 все ще очікує повної реалізації оновлення. GNU GCC включає в себе переважну більшість необхідних функцій та один з найбільш стабільних доступних мов.

    C ++ продовжує свій шлях з новим оновленням C ++ 0x, орієнтованого на розвиток бібліотек, включаючи GUI API.Зі свого боку, Java продовжує в прискореному темпі вносити доповнення і поліпшення в основні бібліотеки, а також в базовий мову, націлені на створення сучасної і дуже функціональною платформи для різних видів додатків.

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

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

    Єдиний сумнівний аспект полягає в тому, що дуже небагато з них стандартизовані так само, як і мова. Зі свого боку, C ++ має більш велику бібліотеку, яка включає в себе «стандартну бібліотеку C», а також знамениту бібліотеку шаблонів STL», що реалізує різні структури даних у загальному вигляді та безліч алгоритмів.

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

    Кращі мови програмування 2018. Інтерактив

    Порівняння продуктивності мов програмування 2018 можна отримати онлайн на сайті Spectrum.ieee. Цей додаток визначає поточну популярність десятків існуючих. Можна відфільтрувати їх, виключивши не потрібні сектори. Рейтинги створюються шляхом порівняння і об’єднання 12 метрик з 10 джерел. В цьому році буде використовуватися на одне джерело менше, оскільки сайт Dice закрив API.

    Набір порівняння за замовчуванням дає поточний рейтинг IEEE Spectrum, але є передвстановлені настройки для тих, хто більше зацікавлений в тому, щоб підібрати щось особливе і створити власний рейтинг. Щоб порівняти з даними за попередній рік, натискають «Додати до порівняння», а потім «Змінити рейтинг», що дасть можливість порівняти дані за 2014-2017 роки. Це додаток було спочатку розроблено у співпраці з IEEE Spectrum журналістом даних Ніком Диакопулусом.

    Аналіз переповнення стека зіставляє дані IEEE Spectrum на найбільш актуальних “шифрах” 2018 року. У таблиці порівняння мов програмування Python займає почесне перше місце. Вивчаючи дані свіжого рейтингу, абсолютно очевидно, що це один з найбільш універсальних, який існує, він може використовуватися в багатьох областях. Багато хто вважає його мовою, який служить практично будь-якої мети.