¿Cuáles son las desventajas de "Python"?
De hecho, estoy muy insatisfecho con todo el sistema Python. Pero usar cualquier idioma es una cuestión de compensaciones. Si hay un idioma que tiene suficientes bibliotecas, ha sido leído, es fácil de usar y tiene un alto rendimiento, lo cambiaré de inmediato sin dudarlo. La fuerza de Python reside en su enorme biblioteca, así como en su muy buena legibilidad y facilidad de uso. Pero en comparación, el rendimiento siempre ha sido un problema. El rendimiento de implementación de Python es aproximadamente cinco veces diferente al de C. Si se trata de un problema informático a gran escala, la diferencia puede ser de unas 10 veces o más. Por supuesto, podemos escribir extensiones en C, pero eso no significa usar Python. También podemos decir que muchas veces no necesitamos una velocidad tan rápida. Esto es un hecho, pero no cambia el hecho de que Python tiene un rendimiento deficiente. Python no solo tiene un rendimiento deficiente, sino que también tiene GIL. Tanto es así que ahora adopto un modo multiproceso para cálculos de alta concurrencia. La eficiencia de la comunicación del modo multiproceso es definitivamente menor que la del subproceso múltiple y es más problemática.
Además, Python también muestra una fuerte tendencia al pragmatismo en su diseño subyacente. Este es un término relativamente diplomático. Una forma más sencilla de decirlo sería confusión y confusión. Utilice un diseño de variable libre en el diseño de cierre en lugar del diseño de entornos en Lisp. la diferencia? Intenta desde lib import * en el cierre externo. Debido a la introducción de un número indefinido de nombres, no se puede procesar la variable libre. Un problema similar es la regla LEGB. Los novatos a menudo tienen que pasar mucho tiempo estudiando por qué este ejemplo está mal: a = 1 def f(): print a a = 2 Déjame ir, este tipo de cosas contraintuitivas y antihumanas. Es todo Sí, me atrevo a decir que es fácil de leer.
También existe la metaprogramación de trampas, que es la peor de las trampas. Si ha utilizado herencia múltiple, probablemente sepa que todo el sistema OO de Python parece una simulación grande, con desorden por todas partes. ¿Cómo resolver la herencia múltiple en C++? Será mejor que no lo uses (en serio, esto es más trampa que Python). ¿Cómo resuelve Java la herencia múltiple? Solo puede heredar la interfaz. De hecho, esta es una forma disfrazada del modo Implementación de interfaz. ¿Cómo solucionarlo en Python? MRO! ¿Por qué agregar __metaclass__ a una clase cambia su naturaleza? ¿Por qué la forma de escribir una clase es así para generar otra clase? Básicamente, no lo recuerdo. De todos modos, se usa en web.py. especular. ¿Por qué necesitamos cambiar el nombre y agregar __ para ocultar el método? ¿Estás haciendo OO o simplemente estás parcheando cosas que parecen OO?
Las expresiones lambda se retrasan. He tenido conversaciones con personas sobre si las lambdas son Turing completas. La conclusión aún está completa, pero requiere la ayuda del combinador Y. ¿Por qué molestarse? Debido al énfasis en la naturaleza rápida de lambda, lambda se ve obligada a estar dentro de una línea (sin una etiqueta final), lo que hace que Python en realidad no tenga funciones anónimas. Es muy difícil escribir una matriz de devolución de llamada.
Hay demasiado azúcar sintáctico. Por supuesto, esto es un sentimiento puramente personal. El azúcar sintáctico es un arma de doble filo cuando se usa bien, puede simplificar la escritura y la lectura, pero demasiado puede introducir fácilmente confusión gramatical y restricciones adicionales.
Además, la naturaleza autoconstructiva del lenguaje resulta confusa. Aunque no todos los lenguajes enfatizan las características de autoconstrucción, en términos generales, C se usa para implementar un kernel, y el kernel implementa algunas operaciones básicas. Luego se implementan operaciones más complejas a partir de operaciones básicas. Los límites de cada capa son relativamente claros. ¿Quién puede decirme cuántas bibliotecas en Python implementa Python puro cuando se trasplanta? ¿Cuál es el nivel de interdependencia de las bibliotecas?
El sandboxing de Python también es un problema. Si el sandbox se hace lo suficientemente bien, puedo usar Python completamente como una plataforma a nivel de cliente. Escriba algo muy simple similar a un navegador en C, descargue el paquete Python de una URL y ejecútelo nuevamente (o simplemente busque actualizaciones). Esto garantiza efectos locales/multiplataforma/seguridad. ¿Ahora? Ninguno está garantizado. Es problemático para mí incluso transferir un paquete de Python a otro dispositivo isomórfico (si los dos no coinciden estrictamente, como las diferencias del sistema y las diferencias de versión del sistema), tanto el desarrollo web como el desarrollo de terminales móviles deben seguir el modelo tradicional.