search
top

Julia: A Competitor to Python?

Julia combines python’s convenience with C’s performance. This means it combines the convenience of dynamic languages with the performance of statically linked languages.

 
 
 
 
 

Introduction

Humans talk to computers by giving them specific instructions that automate our world with the help of programming languages. There are many programming languages like Java, C, C++, Scratch, Python, R, Matlab, etc. Python was invented as a language which is simple to use because of which it has become extremely popular and is widely used today.

 

Today, we will discuss one more such language: Julia, which is simple to use, easy to understand, and is very useful for computational science.

 

What is Julia?

 
Julia is a high-level, high-performance and dynamic programming language, developed by Jeff Bezanson, Stefan Karpinski, Viral B. Shah, and Alan Edelman. Launched in 2012, it is a general-purpose language meant to address the shortcomings of other programming languages including Python. It was designed to utilize the strongest aspects of other programming languages, such as speed and openness. It is mainly used for data processing and scientific computing. It has very simple syntax and supports Unicode and scientific notations.

Code 1

In this code snippet we can see that in Julia, we can multiply a number followed by a variable without using *.

Julia is an open-source language that mixes the interactivity and syntax of scripting languages, such as Python, Matlab, and R, with the speed of compiled languages like FORTRAN and C.
Code 2

Code snippet in Julia. Here we can use ‘pi’ or π.

Here, as Julia uses Unicode and scientific notations we cannot use ‘pi’ or any other such mathematical notations like ‘theta’ as a variable.

Code 3

Code snippet in Python 3. Here when we cannot use ‘pi’ directly. We have to define it prior to its use.

It is easy to use and it’s simple syntax makes it an accessible language for programmers from any background.

 

Why Julia?

 
People use C, whenever they need execution speed or performance. But the code development in C is very time consuming, while code development in Python is much faster but the execution speed is slower than C. With Julia, there’s no need to worry about any of those. It provides both, faster code development and good performance.

Julia is a compiled language and is compiled by the LLVM framework. Julia is fast because type-specific code is compiled and run and not because it uses just-in-time (i.e. every statement is run using compiled functions which are either compiled right before they are used, or cached compilations from before.) compiler. While in other compiled languages the code is compiled before execution.

 

Differences from Programming Viewpoint

 
In Julia and Python both, a block of code is defined using indentation.

Julia Python
It is easy to convert code from Python or C into Julia. Converting code from Python to C or vice versa is not that easy.
C functions can be called directly with the help of ccall syntax without any wrappers or special APIs. It provides Cython to use C functions or libraries.Cython converts the code into C and makes equivalent calls to the C APIs.
Requires an “end” keyword to end a block. It does not require any keyword to end a block.

 
Julia also provides the PyCallpackage which can directly call python from the Julia program.

 

Differences in Libraries

 

Julia Python
Package manager: Pkg. Package manager: Pip.
It does not have a huge amount of libraries. It has different libraries for different needs.
Packages aren’t that well maintained. (ex: have to add the entire module CSV, just for reading a CSV file.) Packages are very well maintained.
It can interface with the libraries from C & FORTRAN. Several libraries written in C cannot be used. But some can be used.

 
Julia might have downsides here, but that’s just because it is a new language and I hope soon it will also have a well-maintained library and packages which the user can use with ease.

 

Differences in Parallel Computing

 
Julia and Python, both can run operations in parallel. Both the languages support multi-threading (on an experimental basis in Julia and it’s interfaces may change in future)and multi-core (or distributed) processing.

Julia Python
Does not use this concept of data serialization /deserialization between threads. Data is serialized and deserialized between threads.
Have to use ‘Threads.@threads’ macro to indicate a multi-threaded region. Have to import module named ‘threading’ for multi-threading.
An environment variable: JULIA_NUM_THREADS is used to create threads. Objects of threading.Threads are used of create threads.
To avoid race conditions ‘Threads.Atomic’ is used. To avoid race conditions, GIL(Global Interpreter Lock) is used.

 

Multi-core (or Distributed) Processing

 
Parallel and distributed processing are the principal components in modern applications & thus leveraging multiple cores on our machines (or using multiples machines) can help to speed up the applications or to run them at a large scale. Utilizing the power of these multi-core & multiple CPUs, many computations can be completed in less time than usual. The major factors that affect the performance are the speed of the CPUs & the speed of their access to memory.

Julia provides a module named “Distributed” as a part of the standard library for the implementation of distributed memory parallel computing. While in Python there are different libraries like Celery, Dask, PySpark, Ray, Dispy, Ipyparallel, etc… for distributed processing & they all are used differently with different applications.

Distributed programming in Julia is built on two primitives: remote references and remote calls. A remote reference is an object that can be utilized from any process to refer to an object stored on a specific process. A remote call is a request by one process to call a certain function on certain arguments on another (possibly the same) process.

Remote references come in two flavors: Future and RemoteChannel. A remote call returns a ‘Future’ to its result.Remote calls returns quickly& the process that made the call proceeds to its next operation while the remote call happens elsewhere. You can trust that a remote call will wrap up by calling ‘wait’ on the returned ‘Future’, and you can get the full value of the result using ‘fetch’. While on the other hand, RemoteChannels are re-writable.

An important thing to note is that, once fetched, a ‘Future’ will store its value locally. Further ‘fetch’ calls do not entail a network hop. Once all referencing ‘Future’ have fetched, the remote stored value is deleted.

 

  • Future: A Future is a placeholder for a single computation of unknown termination status and time.
  • RemoteChannel: Create references to remote channels of a specific size and type.
  • Fetch: Wait for a Task to finish, then return its result value. If the task fails with an exception, a ‘TaskFailedException’ is thrown.
  • Wait: Block the current task until some event occurs, depending on the type of the argument.

 

Machine Learning

 
Julia was specially created for machine learning and statistics which uses lots of mathematical formulas. Python was developed in the ’90s as an easy object-oriented language and due to its many libraries, it is used in machine learning. But Julia was made keeping in mind the needs of machine learning. Most linear algebra is quicker and easier to do in Julia, because the syntax of Julia is quite similar for mathematical formulas.

 

Other Basic Differences

 

Julia Python
Has in-built n-dimensional arrays. Have to use numpy for n-dimensional arrays.
Arrays are column wise. Arrays are row wise.
Indexing starts with “1”. Indexing starts with “0”.
Slicing includes the last element. Slicing does not include the last element.
Does not support negative indexing. Supports negative indexing.
Supports operations on scalars. Does not support operations on scalars.
Can have multiple functions with the same name, performing different tasks depending upon arguments & argument types.
Code 4
Can have multiple functions with the same name but only the latest defined function will be called always.
Code 5
Single quotes are used for character (‘x’) & double quotes are used for string (“hey”).
Code 6
Single quotes & double quotes both can be used for character and string.
Code 7

 

Conclusion

 
From the above comparison, you can see that there is a very close relationship between Julia and Python. No language is ever going to be a “perfect language”. Every language has its ups and downs. The one that works best for you should be the perfect language for you. Julia is taking over the IT world because it makes writing code for Machine Learning and Data science easier. In future, Julia may become the language of the future as it is so simple and versatile and may give good competition to Python.

 
It was a good experience exploring Julia. I hope this blog inspires you to learn at least one of the programming languages. You can learn and master either one of them or both and use it to accomplish the task at hand. We all love it when computations are made easy, don’t we?

 
You can learn Julia from these links:

Feel free to explore other options also, like Coursera, Udemy, etc.

 
You can learn Python from these links:

Feel free to explore other options also, like Coursera, Udemy, tutorialspoint, W3Schools, etc…

  • author's avatar

    By: Aishawariya Athawale

    Aishawariya Athawale is a beginner in artificial intelligence and machine learning. She loves to read articles online & keep herself updated with the current trends and technologies.

  • author's avatar

  • author's avatar

    See all this author’s posts

3 Responses to “Julia: A Competitor to Python?”

  1. Hetvi Julasana says:

    Good job Aishawariya 🙂
    Keep it up.

  2. Pankti says:

    Very good explanation. It makes me wanna try Julia but for now Python is my favorite Language. Keep up the good work 👍

  3. Eric Shah says:

    Very well elucidated with comparisons.Keep it up!!!

Leave a Reply

Your email address will not be published. Required fields are marked *

top