Чому деякі мови програмування швидше, ніж інші?

Чому деякі мови програмування швидше, ніж інші?

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

Що таке мова програмування?

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


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

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

Вартість автоматизації

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

Наприклад, мови з автоматичним керуванням пам'яттю (зазвичай звані збіркою сміття) можуть працювати повільніше, ніж ті, які не реалізують це. Це тому, що програмі потрібен час, щоб пройти через себе і очистити пам'ять через певні проміжки часу.

Компіляція: ваш пробіг може змінюватися

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

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


Однак одним з недоліків цього є час, необхідний для фактичної компіляції таких програм. Великі, такі як Mozilla Firefox може зайняти близько півгодини або близько того. На щастя, більшість програм у наші дні роблять цей процес заздалегідь, що спрощує їх встановлення і використання.

Оскільки кінцевий результат написаний мовою, зрозумілою комп'ютеру, він, як правило, досить швидкий. Порівняйте це з інтерпретованими мовами, які проходять ще один крок. Сказавши це, не всі скомпільовані мови однакові.

Ефективність компілятора

Щоб перевести будь-який код в щось, зрозуміле комп'ютеру (машинний код), його необхідно запустити за допомогою спеціальної програми, званої компілятором. Одна мова може мати декілька компіляторів для неї. Наприклад, і GCC (GNU Compiler Collection), і Clang можуть використовуватися для компіляції програм. копілювати копіювати написано на C.

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

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

Мова інтерпретації: ще один крок

Як уже було сказано, інтерпретовані мови не компілюються заздалегідь. Замість цього вони перекладаються під час роботи, як правило, окремою програмою, відомою як перекладач. Наприклад, Java-програми запускаються через щось, зване JVM (віртуальна машина Java).

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


Байт-код: легкий компроміс

Через їх дещо повільнішу природу багато інтерпретованих мов фактично використовують деяку форму компіляції, щоб прискорити їх роботу. Перед запуском ці програми перекладаються в байт-код, тип мови, з якою легко працювати перекладачам. Наприклад, Java і Python зробіть це перед запуском, створивши файли CLASS і PYC відповідно.

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

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

Не парься.

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

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


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

Які фактори ви враховуєте при вивченні мови програмування?

Image