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

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

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

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

У 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. Тепер вже було кілька "" шифрів "". У цей період у розробників з 'явилося безліч критеріїв порівняння мов програмування.

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

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

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


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

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

  1. Імператив, Cobol, Pascal, C і Ada.
  2. Декларативний, Лісп і Пролог.
  3. Об 'єктно-орієнтований, Smalltalk і C++.
  4. Проблемно-орієнтований, специфічні мови для управління.
  5. Природна мова програмування, нові види, які прагнуть наблизити дизайн і конструювання до мови людей. Зробити його простіше.

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

  1. Першого покоління - машинний і Ассемблер.
  2. Другого покоління - перші мови програмування високого імперативного рівня FORTRAN, COBOL.
  3. Третього покоління - це мови програмування високого імперативного рівня, але набагато більш використовувані і актуальні в даний час: ALGOL 8, PL/I, PASCAL, MODULA.
  4. Четвертого покоління - в додатках для управління базами даних: NATURAL, SQL.
  5. П 'ятого покоління - для штучного інтелекту та обробки природних мов: LISP, PROLOG.

Критерії порівняння. Принцип

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

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

  1. Експресивність - простота мови для вираження алгоритмів.
  2. Точність визначення - послідовність і відсутність двозначності.
  3. Типи і структури даних.
  4. Модульність - можливість розробки компонентів самостійно.
  5. Засоби вводу/виводу - підтримка взаємодії з навколишнім середовищем.
  6. Переносимість.
  7. Ефективність і продуктивність для порівняння швидкодії мов програмування.
  8. Педагогіка - легкість навчання та викладання.
  9. Спільність - застосовність, використання.
  10. Стандартизація.

Цей список використовується для порівняння в дуже широкому спектрі від LISP до COBOL через ALGOL і служить відправною точкою отримання результатів.

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

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

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


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

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

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

Мова Сі довго вважалася гарним прикладом послідовної та однозначної мови, особливо серед сучасників. Творці визнають певні недоліки в позначеннях. Основна проблема полягає у великій кількості аспектів, запропонованих розробнику, серед яких виділяється розмір і типи даних. Наприклад, у компіляторах ПК 1980-х діапазон типів "" int "" був між - 32768 і 32767, що було чітким відображенням 16-бітних процесорів. В даний час прийнято приймати 32-бітні для цілих чисел, тому діапазон часто варіюється від -2147483648 до 2147483647. Очевидно, що це створює серйозні проблеми з переносимістю мови.

Ці недоліки, на жаль, повністю успадковані 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.iee. Ця програма визначає поточну популярність десятків існуючих. Можна відфільтрувати їх, виключивши не потрібні сектори. Рейтинги створюються шляхом порівняння та об 'єднання 12 метрик з 10 джерел. Цього року буде використовуватися на одне джерело менше, оскільки сайт Dice закрив API.

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

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