Але чи існують технічні обмеження чи мовні функції, які не дозволяють моєму сценарію Python бути таким же швидким, як еквівалентна програма C ++?
Ні. Це лише питання грошей і ресурсів, що виливаються в те, щоб C ++ працював швидко проти грошей і ресурсів, що вкладаються в те, щоб Python швидко пробіг.
Наприклад, коли вийшов Self VM, це була не тільки найшвидша динамічна мова ОО, це був найшвидший період мови ОО. Незважаючи на те, що це неймовірно динамічна мова (наприклад, набагато більше, ніж Python, Ruby, PHP чи JavaScript), вона була швидшою, ніж більшість реалізованих C ++ реалізацій.
Але тоді Sun скасував проект Self (зріла мова загального призначення для розробки великих систем), щоб зосередитись на невеликій мові сценаріїв для анімованих меню у телевізорах (ви, можливо, чули про це, це називається Java), не було більше фінансування. У той же час Intel, IBM, Microsoft, Sun, Metrowerks, HP та ін. витратили величезні гроші та ресурси, роблячи C ++ швидкими. Виробники процесорів додали функції до своїх чіпів, щоб зробити C ++ швидким. Операційні системи були написані або модифіковані для швидкого C ++. Отже, C ++ швидкий.
Я не дуже знайомий з Python, я більше людина Ruby, тому наведу приклад з Ruby: Hash
клас (еквівалентний за функцією та значенням dict
у Python) у реалізації Rubinius Ruby написаний на 100% чистому Ruby; проте він вигідно конкурує, а іноді навіть перевершує Hash
клас у YARV, який написаний оптимізованою рукою C. І порівняно з деякими комерційними системами Lisp або Smalltalk (або згаданим Self VM), компілятор Рубініуса навіть не такий розумний .
Ніщо не властиве Python, що робить його повільним. У сучасних процесорах та операційних системах є особливості, які завдають шкоди Python (наприклад, віртуальна пам’ять, як відомо, страшна за продуктивність збору сміття). Є функції, які допомагають C ++, але не допомагають Python (сучасні процесори намагаються уникати пропусків кешу, оскільки вони такі дорогі. На жаль, уникнути пропусків кешу важко, коли у вас є OO та поліморфізм. Швидше, ви повинні зменшити вартість кешу пропускає. Процесор Azul Vega, який був розроблений для Java, робить це.)
Якщо ви витрачаєте стільки грошей, досліджень та ресурсів на те, щоб зробити Python швидким, як це було зроблено для C ++, і ви витрачаєте стільки грошей, досліджень та ресурсів на те, щоб операційні системи, які змушують програми Python працювати швидко, як це було зроблено для C ++, і ви витрачаєте як багато грошей, досліджень та ресурсів для створення процесорів, які змушують програми Python швидко працювати, як це було зроблено для C ++, тоді, на мою думку, немає сумнівів, що Python міг би досягти порівнянної продуктивності з C ++.
З ECMAScript ми бачили, що може статися, якщо лише один гравець серйозно ставиться до продуктивності. Протягом року ми в основному зробили 10-кратну ефективність роботи для всіх основних постачальників.