|
61 | 61 | "Each method shares the same name `add` but has different implementations for the types it handles. This makes the code:\n",
|
62 | 62 | "\n",
|
63 | 63 | "- **Clear and concise**: There is no need to add different code paths through functions based on checking types of arguments.\n",
|
64 |
| - "- **Fast**: Julia compiles a specialised version for each method call at runtime. \n", |
| 64 | + "- **Fast**: Julia compiles a specialised version for each method call as required, using *just-in-time* (JIT) compilation. \n", |
65 | 65 | "- **Extensible**: New implementations of `add` can easily be added for new combinations of types.\n",
|
66 | 66 | "\n",
|
67 | 67 | "Julia is also designed to be **dynamically typed**; you do not need to declare types for variables, as the type is determined at runtime, alongside using automatic memory management (garbage collection), so you don't have to manually allocate or free memory in typical usage. \n",
|
|
70 | 70 | "\n",
|
71 | 71 | "Julia incorporates many features that make it powerful for numerical and scientific computing:\n",
|
72 | 72 | "\n",
|
73 |
| - "- **High Performance**: Thanks to JIT compilation using LLVM, Julia can approach or match the speed of C and Fortran for many tasks, meaning you often don't need to rewrite performance-critical code in another language. Code written in pure Julia is typically fast if written with performance in mind. \n", |
74 |
| - "- **Multiple Dispatch**: Multiple dispatch allows the standard library and packages to define methods optimised for different types (e.g. arrays of floats vs ints) seamlessly. This contributes to performance. It also makes it straightforward to extend the code to support new types as-and-when useful.\n", |
| 73 | + "- **High Performance**: Julia can approach or match the speed of C and Fortran for many tasks, meaning you often don't need to rewrite performance-critical code in another language. Julia features just in time compilation using LLVM and, where possible, specialises function calls according to types that are inferred during compilation. This means that code written in pure Julia is typically fast if written in a way that maximises Julia's type inference capabilities (as well as other performance considerations).\n", |
| 74 | + "- **Multiple Dispatch**: Multiple dispatch allows the standard library and packages to define methods optimised for different types (e.g. arrays of floats vs ints) seamlessly. As well as being at the heart of Julia's performance capabilities, it also makes it straightforward to extend the code to support new types as-and-when useful.\n", |
75 | 75 | "- **Good support for Numerical Computing**: Julia has built-in support for things like arbitrary precision arithmetic, regular expressions, and powerful libraries for linear algebra and random numbers. Julia's package manager makes it easy to add external packages for specialised functionality, such as statistics, plotting, optimisation, etc.\n",
|
76 | 76 | "- **Interactive and Reproducible**: Julia can be used interactively (e.g. via the REPL or Jupyter notebooks) just like Python or R, which is great for exploration. Julia also has the built-in `Pkg` standard library that uses **Project** and **Manifest** files to pin exact dependency versions and ensure your environment can be recreated anywhere.\n",
|
77 | 77 | "- **Learning from older languages**: To some extent, Julia has been able to implement lessons that other languages had to learn the hard way, especially around it's tooling. For example, its package management system is easy to use, it has unit testing support directly in the standard library, and it has a a go-to [documentation generator](https://documenter.juliadocs.org/stable/).\n",
|
|
0 commit comments