¿Cuáles son las ventajas de que Nanjing y Beida Jade Bird compartan a Julia?
Hoy, Beida Jade Bird le presentará brevemente un lenguaje de programación que tiene más ventajas que el lenguaje de programación Python.
Operaciones matemáticas en Julia En términos generales, las operaciones matemáticas en Julia tienen el mismo aspecto que las operaciones matemáticas en otros lenguajes de programación.
Sus números son todos "números reales", por ejemplo, Float64 es un número de coma flotante de 64 bits o similar a un "doble" en lenguaje C.
Vector{Float64} tiene el mismo diseño de memoria que una matriz doble de C y puede interoperar fácilmente con C (de hecho, en cierto sentido, "Julia está construida sobre C "una capa encima"), lo que resulta en mayor rendimiento.
Estabilidad de tipos e introspección de código La estabilidad de tipos significa que un método sólo puede generar un tipo posible.
Por ejemplo: * (::Float64, :Float64) El tipo de salida es float 64.
No importa qué parámetros le des, devolverá un Float64.
Aquí se utiliza el envío múltiple: el operador "*" llama a diferentes métodos según el tipo que ve.
Por ejemplo, cuando ve un flotador, devuelve un flotador.
Julia proporciona una macro de introspección de código para ver en qué está compilado el código.
Así que Julia no es solo un lenguaje de programación ordinario, ¡sino un lenguaje de programación que te permite trabajar con ensamblador! Como muchos otros lenguajes, Julia se compila en LLVM (LLVM es un formato ensamblador portátil).
El envío múltiple permite que el lenguaje envíe llamadas a funciones a funciones escritas de forma estable.
Esta es la idea central de Julia. Ahora tomemos un momento para entender.
Si la función es de tipo estable (es decir, cualquier llamada a función dentro de la función también es de tipo estable), entonces el compilador conocerá los tipos de variables en cada paso y podrá optimizar la función lo suficiente durante la compilación. tiempo para obtener El código es básicamente el mismo que el del lenguaje C o Fortran.
Aquí puede entrar en juego el envío múltiple, lo que significa que "*" puede ser una función de tipo estable: tiene diferentes significados para diferentes entradas.
Sin embargo, si el compilador puede conocer los tipos de A y B antes de llamar a "*", entonces sabe qué método "*" usar y, por lo tanto, sabe cuál es el tipo de salida de c=a*. b es .
De esta manera, puede pasar información de tipo a lo largo del camino, lo que permite una optimización completa.