¿Cuáles son las desventajas de Julia en comparación con Python?

Algunos de los principales en los que puedo pensar, basados ​​en mi experiencia con la traducción de varios programas de Python a Julia en intentos (¡eventualmente exitosos!) De aumentar la velocidad:

  1. Las matrices de Julia están indexadas en 1, lo que realmente puede hacerte tropezar a veces cuando estás acostumbrado a Python, C / ++, Java, etc.
  2. Las comprensiones de listas de Julia (actualmente) carecen de la capacidad de usar condicionales, a diferencia de Python. (Nunca te das cuenta de lo bueno que es esto hasta que NO PUEDES hacerlo …). Sin embargo, se puede hacer esto con bucles for y if / else, como se hace normalmente.
  3. Se accede a las matrices de Julia columna-mayor, mientras que a las matrices de Python Numpy se accede por orden de filas. Esto puede afectar algunas decisiones de diseño sobre cómo iterar sobre matrices de manera efectiva en la memoria.
  4. Los diccionarios de Julia tienen un hash diferente a los diccionarios de Python, lo que puede hacerlos más lentos en muchos casos.

Solo para agregar un poco a las respuestas anteriores, mencionaré algunas ventajas que Julia tiene sobre Python.

1 La juventud de Julia significa que ha crecido con el entendimiento de que el apoyo al paralelismo es crítico. Como resultado, Julia está diseñada para el paralelismo desde el primer momento. Esto es evidente en las funciones de Julia base, así como en el tipo de datos DistributedArrays.

2 Julia utiliza un moderno sistema de gestión de paquetes que se extrae directamente de Github directamente desde REPL. Esto hace que la instalación de nuevos paquetes sea lo más fácil posible. Por el contrario, la instalación de paquetes en Python puede variar desde trivialmente simple hasta bastante gravosa y propensa a errores; y esto sin mencionar el cisma Python 2.xy Python 3.x.

3 Como la mayoría estará de acuerdo, la reputación de Julia se debe hasta cierto punto debido a su velocidad bruta. Esto es bien merecido, porque es algo sorprendente que el lenguaje nos brinde la capacidad de escribir código que sea tan expresivo como Python pero que en muchos casos se ejecute a velocidades del mismo orden de magnitud que C o Fortran. Siempre que escribimos Python, se nos recomienda evitar muchos bucles explícitos, en particular bucles anidados. Pero a veces esta es quizás la forma más intuitiva de resolver un problema; y esto es particularmente aplicable dado su interés en el aprendizaje automático. Ser capaz de escribir bucles sin la penalización de rendimiento puede ser bastante liberador.

4 Julia también tiene un excelente soporte para la programación funcional. Este ha sido un punto de discusión en Python, pero los creadores de Julia parecen haber abrazado una serie de principios de programación funcional.

5 No estoy seguro de cuánto debería contar esto, pero como Andrew mencionó, escribir el código de Julia es realmente divertido. El lenguaje es rápido y la sintaxis es fácil. Y desde el primer momento puedes hacer un montón de cosas.

En el análisis final, no es obvio para mí que Julia esté destinada a ser comparada con Python. Julia, cuando es más madura, es muy probable que le dé una oportunidad a algunos lenguajes técnicos informáticos establecidos. Pero Python siempre ha sido más un lenguaje de propósito general. Tenga en cuenta que la versión base de Python (sin NumPy) no tiene una estructura de datos de matriz N- dimensional (supongo que acepta que las listas anidadas son subóptimas). Esto es revelador, creo.

Algunas otras respuestas resaltaron las características de sintaxis que pueden molestarlo cuando viene de Python (matrices indexadas 1).

Una desventaja que todavía veo hoy (27 de agosto de 2016) es un entorno inmaduro. Usted está interesado en el aprendizaje automático, por lo que necesitará la visualización de datos con ajustes gráficos fáciles y bibliotecas potentes. Todavía no he encontrado mi matplotlib en Julia .

Claro que tiene varios paquetes para este propósito, pero encontré que todos ellos son difíciles de comenzar.

Otra característica es la importación de módulos que pueden causar confusión en el espacio de nombres al obtener funciones de varios paquetes. ¿ magicFunc() vino de foo o de bar ? Python le ahorra el problema con el módulo de importación y luego el module. magicFunc ()

Ya sí, pero más claro para leer fragmentos que no escribiste.

Lo último: me gusta trabajar en un entorno dedicado para tareas de ciencia de datos. Claro, el mundo de Julia viene con Juno: Juno, el entorno de desarrollo interactivo, pero modifica algunas configuraciones de Atom y todavía se bloquea mucho. No me malinterpreten, desarrollar un módulo Atom en lugar de un IDE completo fue algo inteligente para entregar rápidamente, pero espero ver el equivalente de Julia de Spyder en el futuro.

Descargo de responsabilidad: me gusta mucho el lenguaje en sí y las ideas detrás de él, incluido el espíritu funcional, y creo que Julia tiene un lugar prometedor tanto en la informática científica como en los paisajes de datos.

Como dijiste, Python tiene muchos paquetes. Ha estado fuera durante 15 años y ha ganado la estabilidad necesaria para el uso empresarial.

Julia es nueva, pero crece a un ritmo rápido. Utiliza tecnología interesante y algunos preferirán su sintaxis. Tienes la oportunidad de contribuir a su crecimiento si quieres. No es tan estable como Python, debido a su rápido crecimiento e innovación: las características de versiones anteriores se pueden depreciar y luego eliminar de futuras versiones.

Dicho esto, Julia ya tiene una cantidad impresionante de paquetes y miles de funciones integradas (parte del objetivo de “baterías incluidas”).

Si solo estás programando para ti, aprende Julia. ¡Es probable que sea mucho más divertido!

En mi propia experiencia, depuración. Python es mucho más fácil de depurar que Julia. Además, la codificación en Python me parece mucho más fácil y, por lo tanto, menos frustrante. Al final, dejé de intentar a Julia. Creo que el origen del problema es que se implementaron demasiadas técnicas de programación sofisticadas en Julia, lo que hace que el lenguaje sea demasiado oscuro para el Joe promedio que usa la programación como herramienta. Python se siente “natural” para trabajar y, si quiero velocidad, simplemente cambio a Cython y reescribo las partes críticas.

EDITAR: errores tipográficos fijos.

No muchos ni ninguno. Python tiene más bibliotecas, mientras que puede reutilizarlas con PyCall.jl (otra biblioteca, pyjulia, que conozco menos, permite llamar en la otra dirección de Python a Julia). Por ejemplo, PyPlot.jl le da acceso a toda la funcionalidad de matplotlib . Plots.jl parece ser la solución preferida, ya que es una API para los muchos paquetes de gráficos compatibles, incluido el primero.

Abordar otras desventajas percibidas:

La indexación basada en 1 es solo la predeterminada (y disponible en base a 0 o arbitraria). Esa elección como una desventaja es muy exagerada, ya que de todos modos es necesaria para la mayoría de las matemáticas. Tampoco es más lento que C / C ++ y no necesita hacer referencia al primer elemento:

para i en A # o:
para i en cada índice (A) ..

Julia 0.6 alpha acaba de salir (0.5 es estable, como en las versiones anteriores, y él y 0.6 han mejorado al menos la velocidad / funcionalidad vectorizada). 0.6 es la última versión anterior a la 1.0 que se espera para 2017.

Julia tiene muchas ventajas, al menos si desea / necesita velocidad o código fácil de mantener (como más potente con macros reales similares a Lisp). Estoy seguro de que Julia puede ser incluso de mayor nivel que Python (no solo para matemáticas) y, por lo tanto, tener un código más corto, que se correlaciona con menos errores (la densidad de errores generalmente depende de las líneas de código).

La mayor desventaja de Julia es que no es Python.

En una nota más seria, Julia como lenguaje no es lo suficientemente madura como para ser comparada con Python. No tengo idea sobre el futuro de Julia, pero sé que su presente no es ahora.

Bueno, no sé nada de Julia, pero sé de Python, ¿no crees que esto es una ventaja? En serio, en la industria, no puedes saber sobre Julia, pero será mejor que seas bueno en python, especialmente en el campo de ml.