Julia is a high-level, dynamic programming language with high performance. It is a general-purpose programming language used to write any application. Like many programming languages, Julia allows users to bring external modules and their functions into their current working environment to access and use them. The two main ways to do this in Julia are through the
While they both achieve the same goal of importing external modules, there are significant differences in how they work and their impact on code organization and performance. Understanding the differences between
import is important for writing efficient and maintainable code in Julia. In this article, we will explore the differences between
import in Julia, their advantages and disadvantages, and best practices for using them effectively.
using keyword in Julia
In Julia, the
using keyword is used to load all exported names from a module and bind them to the current namespace. In other words, every variable or function declared in the module can be accessed directly in the current environment. The syntax for the
using keyword is:
The above keyword will load all exported names from
ModuleName and make them available in the current environment. For example, if we want to use the
LinearAlgebra module in our code, we can use the
using keyword as follows:
After this keyword, we can use any functions directly from the
LinearAlgebra module without having to prefix the module name. For example, calculating the dot product of variables
y using the
dot function from the
using LinearAlgebra x = [1, 2, 3] y = [4, 5, 6] println(dot(x, y)) # 32
import keyword in Julia
Apart from the
using keyword to import modules in Julia, the
import keyword can also be used. It is used to selectively import specific functions or variables from a module, and it requires the user to specify the module name before the function or variable name when it is used. In other words, a function or variable not explicitly imported cannot be accessed in the current environment. The syntax for the
import keyword is:
import ModuleName: Function1, Function2
The above keyword will only import the specified functions from
ModuleName into the current environment. Following the previous example above, if we want to use the
dot function from the
LinearAlgebra module, we will import it as:
import LinearAlgebra: dot
After this keyword, we can use the
dot function directly in our code as follows:
import LinearAlgebra: dot x = [1, 2, 3] y = [4, 5, 6] println(dot(x, y)) # 32
Benefits and Limitations of each keywords
It has been established that the two keywords are used to load up modules into our code. We will be looking at the benefits and limitations of these keywords.
One advantage of
using is convenience. It can make the code more concise by making all functions and variables from a module available in the current namespace. This can also make the code easier to read and understand. But a downside to this is that using
using to load large modules with many functions and variables can impact performance and memory usage.
Another limitation or disadvantage of
using is the potential for naming conflicts. The
using keyword can cause naming conflicts if multiple modules define functions or variables with the same name.
On the other hand, using
import to import only the necessary functions or variables from a module can help reduce compile times by avoiding the need to compile unnecessary code. But using the
import keyword leads to increased typing and possible overhead and complexity.
In this article, we have seen how to import external modules into our Julia program, the benefits, and limitations of using either of the options.
Ultimately, the decision to use the keyword or the
using keyword depends on the specific needs of the project and the preferences of the developer. The
using keyword may be more suitable for smaller projects where convenience is prioritized, while the
import keyword may be more appropriate for larger projects where clarity, selectivity, and better control over memory usage are important.
Top comments (4)
I think there might be a small mistake at the end - if I copy the code in your last code block and run it in a REPL:
Then, in 1.9, I get:
It seems the correct way is to do
dot(x, y)(without the package name in front) instead.
Thank you so much for the observation. I must have mixed it up when copying the code to my article. Thank you once again!
Nice article. I was a bit confused between those 2 keywords but now I have no more
I'm glad to hear this!