Но существуют ли технические ограничения или языковые функции, которые мешают моему скрипту Python работать так же быстро, как эквивалентная программа на C ++?
Нет. Это просто вопрос денег и ресурсов, направленных на то, чтобы заставить C ++ работать быстро, по сравнению с деньгами и ресурсами, которые заставляют Python работать быстро.
Например, когда вышла Self VM, это был не только самый быстрый динамический язык OO, это был самый быстрый период языка OO. Несмотря на то, что он был невероятно динамичным языком (например, гораздо лучше, чем Python, Ruby, PHP или JavaScript), он был быстрее, чем большинство доступных реализаций C ++.
Но затем Sun отменила проект Self (зрелый OO-язык общего назначения для разработки больших систем), чтобы сосредоточиться на небольшом языке сценариев для анимированных меню в телевизионных приставках (вы, возможно, слышали об этом, он называется Java), не было больше финансирования. В то же время Intel, IBM, Microsoft, Sun, Metrowerks, HP и соавт. потратили огромные деньги и ресурсы на быстрое создание C ++. Производители процессоров добавили функции в свои чипы, чтобы сделать C ++ быстрым. Операционные системы были написаны или изменены, чтобы сделать C ++ быстрым. Итак, С ++ работает быстро.
Я не очень хорошо знаком с Python, я скорее специалист по Ruby, поэтому приведу пример из Ruby: Hash
класс (эквивалентный по функции и важности dict
в Python) в реализации Rubinius Ruby написан на 100% чистом Ruby; тем не менее, он конкурирует выгодно, а иногда даже превосходит Hash
класс в YARV, который написан на оптимизированном вручную языке C. И по сравнению с некоторыми из коммерческих систем Lisp или Smalltalk (или вышеупомянутой Self VM), компилятор Rubinius даже не настолько умен ,
В Python нет ничего, что могло бы замедлить работу. В современных процессорах и операционных системах есть функции, которые наносят вред Python (например, известно, что виртуальная память ужасна для производительности сборки мусора). Существуют функции, которые помогают C ++, но не помогают Python (современные процессоры стараются избегать промахов кэша, потому что они очень дороги. К сожалению, избежать промахов кэша сложно, если у вас OO и полиморфизм. Скорее, вы должны снизить стоимость кэша Процессор Azul Vega, который был разработан для Java, делает это.)
Если вы тратите столько же денег, исследований и ресурсов на создание Python быстро, как это было сделано для C ++, и вы тратите столько же денег, исследований и ресурсов на создание операционных систем, которые делают программы Python быстрыми, как это было сделано для C ++, и вы тратите много денег, исследований и ресурсов на создание процессоров, которые делают программы на Python быстрыми, как это было сделано для C ++, тогда я не сомневаюсь, что Python сможет достичь производительности, сопоставимой с C ++.
Мы видели с ECMAScript, что может произойти, если только один игрок серьезно относится к производительности. В течение года мы продемонстрировали 10-кратное увеличение производительности по всем направлениям для всех основных поставщиков.