Pero, ¿existen limitaciones técnicas o características del lenguaje que impiden que mi script Python sea tan rápido como un programa C ++ equivalente?
No. Es solo una cuestión de dinero y recursos invertidos en hacer que C ++ se ejecute rápido versus dinero y recursos invertidos en hacer que Python se ejecute rápido.
Por ejemplo, cuando salió la Self VM, no solo era el lenguaje OO dinámico más rápido, sino también el período de lenguaje OO más rápido. A pesar de ser un lenguaje increíblemente dinámico (mucho más que Python, Ruby, PHP o JavaScript, por ejemplo), fue más rápido que la mayoría de las implementaciones de C ++ que estaban disponibles.
Pero luego Sun canceló el proyecto Self (un lenguaje OO de propósito general maduro para desarrollar sistemas grandes) para enfocarse en un pequeño lenguaje de scripting para menús animados en decodificadores de TV (es posible que haya oído hablar de eso, se llama Java), no hubo Más financiación. Al mismo tiempo, Intel, IBM, Microsoft, Sun, Metrowerks, HP et al. gastó grandes cantidades de dinero y recursos haciendo que C ++ sea rápido. Los fabricantes de CPU agregaron características a sus chips para hacer que C ++ sea rápido. Los sistemas operativos fueron escritos o modificados para hacer que C ++ sea rápido. Entonces, C ++ es rápido.
No estoy terriblemente familiarizado con Python, soy más una persona Ruby, así que daré un ejemplo de Ruby: la Hash
clase (equivalente en función e importancia a dict
Python) en la implementación de Rubinius Ruby está escrita en Ruby 100% puro; Sin embargo, compite favorablemente y, a veces, incluso supera a la Hash
clase en YARV que está escrita en C. optimizada a mano. Y en comparación con algunos de los sistemas comerciales Lisp o Smalltalk (o el mencionado Self VM), el compilador de Rubinius ni siquiera es tan inteligente .
No hay nada inherente en Python que lo haga lento. Hay características en los procesadores y sistemas operativos actuales que perjudican a Python (por ejemplo, se sabe que la memoria virtual es terrible para el rendimiento de la recolección de basura). Hay características que ayudan a C ++ pero no ayudan a Python (las CPU modernas intentan evitar errores de caché, porque son muy caros. Desafortunadamente, evitar errores de caché es difícil cuando tienes OO y polimorfismo. Por el contrario, debes reducir el costo del caché El CPU Azul Vega, que fue diseñado para Java, hace esto.
Si gasta tanto dinero, investigación y recursos para hacer que Python sea rápido, como se hizo para C ++, y gasta tanto dinero, investigación y recursos para hacer que los sistemas operativos que hacen que los programas de Python se ejecuten rápido como lo hizo para C ++ y gaste como mucho dinero, investigación y recursos para hacer CPU que hacen que los programas de Python se ejecuten rápidamente como se hizo con C ++, entonces no tengo dudas de que Python podría alcanzar un rendimiento comparable al de C ++.
Hemos visto con ECMAScript lo que puede suceder si solo un jugador toma en serio el rendimiento. Dentro de un año, tuvimos básicamente un aumento del rendimiento de 10 veces en todos los ámbitos para todos los principales proveedores.