Julia 1.11 Documentation
Welcome to the documentation for Julia 1.11.
Por favor, lee el release notes para ver qué ha cambiado desde la última versión.
The documentation is also available in PDF format: julia-1.11.4.pdf.
Important Links
A continuación se muestra una lista no exhaustiva de enlaces que serán útiles a medida que aprendas y uses el lenguaje de programación Julia.
- Julia Homepage
- Download Julia
- Discussion forum
- Julia YouTube
- Find Julia Packages
- Learning Resources
- Read and write blogs on Julia
Introduction
La computación científica ha requerido tradicionalmente el más alto rendimiento, sin embargo, los expertos en el dominio se han trasladado en gran medida a lenguajes dinámicos más lentos para su trabajo diario. Creemos que hay muchas buenas razones para preferir lenguajes dinámicos para estas aplicaciones, y no esperamos que su uso disminuya. Afortunadamente, el diseño moderno de lenguajes y las técnicas de compilación hacen posible eliminar en gran medida la compensación de rendimiento y proporcionar un único entorno lo suficientemente productivo para la creación de prototipos y lo suficientemente eficiente para implementar aplicaciones intensivas en rendimiento. El lenguaje de programación Julia cumple con este papel: es un lenguaje dinámico flexible, apropiado para la computación científica y numérica, con un rendimiento comparable al de los lenguajes estáticamente tipados tradicionales.
Debido a que el compilador de Julia es diferente de los intérpretes utilizados para lenguajes como Python o R, es posible que al principio encuentres que el rendimiento de Julia es poco intuitivo. Si encuentras que algo es lento, te recomendamos encarecidamente que leas la sección Performance Tips antes de intentar cualquier otra cosa. Una vez que entiendas cómo funciona Julia, es fácil escribir código que sea casi tan rápido como C.
Julia Compared to Other Languages
Julia cuenta con tipado opcional, despacho múltiple y un buen rendimiento, logrado mediante inferencia de tipos y just-in-time (JIT) compilation (y optional ahead-of-time compilation), implementado usando LLVM. Es un lenguaje multiparadigma, que combina características de programación imperativa, funcional y orientada a objetos. Julia proporciona facilidad y expresividad para la computación numérica de alto nivel, de la misma manera que lenguajes como R, MATLAB y Python, pero también soporta programación general. Para lograr esto, Julia se basa en la herencia de lenguajes de programación matemática, pero también toma mucho de lenguajes dinámicos populares, incluyendo Lisp, Perl, Python, Lua, y Ruby.
Las desviaciones más significativas de Julia con respecto a los lenguajes dinámicos típicos son:
- El lenguaje base impone muy poco; Julia Base y la biblioteca estándar están escritas en Julia misma, incluyendo operaciones primitivas como la aritmética entera.
- Un lenguaje rico de tipos para construir y describir objetos, que también se puede utilizar opcionalmente para hacer declaraciones de tipos.
- La capacidad de definir el comportamiento de la función a través de muchas combinaciones de tipos de argumentos mediante multiple dispatch
- Generación automática de código eficiente y especializado para diferentes tipos de argumentos
- Buen rendimiento, acercándose al de lenguajes compilados estáticamente como C.
Aunque a veces se habla de lenguajes dinámicos como si fueran "sin tipo", definitivamente no lo son. Cada objeto, ya sea primitivo o definido por el usuario, tiene un tipo. Sin embargo, la falta de declaraciones de tipo en la mayoría de los lenguajes dinámicos significa que no se puede instruir al compilador sobre los tipos de valores, y a menudo no se puede hablar explícitamente sobre tipos en absoluto. En los lenguajes estáticos, por otro lado, aunque se puede – y generalmente se debe – anotar tipos para el compilador, los tipos existen solo en tiempo de compilación y no se pueden manipular o expresar en tiempo de ejecución. En Julia, los tipos son en sí mismos objetos en tiempo de ejecución, y también se pueden usar para transmitir información al compilador.
What Makes Julia, Julia?
Mientras que el programador casual no necesita usar explícitamente tipos o despacho múltiple, estos son las características unificadoras centrales de Julia: las funciones se definen en diferentes combinaciones de tipos de argumentos y se aplican despachando a la definición más específica que coincida. Este modelo es adecuado para la programación matemática, donde es antinatural que el primer argumento "posea" una operación como en el despacho orientado a objetos tradicional. Los operadores son solo funciones con notación especial; para extender la adición a nuevos tipos de datos definidos por el usuario, defines nuevos métodos para la función +
. El código existente se aplica sin problemas a los nuevos tipos de datos.
En parte debido a la inferencia de tipos en tiempo de ejecución (aumentada por anotaciones de tipo opcionales), y en parte por un fuerte enfoque en el rendimiento desde el inicio del proyecto, la eficiencia computacional de Julia supera a la de otros lenguajes dinámicos e incluso rivaliza con la de lenguajes compilados estáticamente. Para problemas numéricos a gran escala, la velocidad siempre ha sido, sigue siendo y probablemente siempre será crucial: la cantidad de datos que se procesan ha mantenido fácilmente el ritmo con la Ley de Moore en las últimas décadas.
Advantages of Julia
Julia tiene como objetivo crear una combinación sin precedentes de facilidad de uso, potencia y eficiencia en un solo lenguaje. Además de lo anterior, algunas ventajas de Julia sobre sistemas comparables incluyen:
- Libre y de código abierto (MIT licensed)
- Los tipos definidos por el usuario son tan rápidos y compactos como los incorporados.
- No es necesario vectorizar el código para mejorar el rendimiento; el código devectorizado es rápido.
- Diseñado para el paralelismo y la computación distribuida
- Hilos "verdes" ligeros (coroutines)
- Sistema de tipos discreto pero poderoso
- Conversiones y promociones elegantes y extensibles para tipos numéricos y otros tipos
- Soporte eficiente para Unicode, incluyendo pero no limitado a UTF-8
- Llama a funciones C directamente (sin envolturas ni APIs especiales necesarias)
- Capacidades potentes similares a un shell para gestionar otros procesos
- Macros y otras facilidades de metaprogramación al estilo Lisp