A software engineer's blog

About this Blog

Welcome to my blog! My name is Nikos and I am an engineer. In this blog I will post algorithms and software related stuff that I find interesting or I had a hard time to find online.

Tuesday, September 6, 2022

A performance comparison between various programming languages


The first programming language I ever write code was Microsoft's QBasic. After QBasic I moved to Visual Basic 6.0 and some Pascal and when I grew up and I had to work my life I wrote in C#, Java, ASP, ASP .NET, ActionScript and later PHP. The last decade I write in Java, PHP, some JavaScript and some C for the Arduino framework on a daily basis.

I also got involved with Python but I soon realized that Python is a horrible programming language. It has horrible syntax and its horrible performance makes you often wonder if it is worth having a computer to do tasks for you. Python also makes me wonder why the programming community stopped using Basic and Pascal after 90s, these 2 languages have an amazing performance similar to C and where much easier to read than Python. Anyway...  #python_is_horrible and at the end of the day we all realize that.

Yesterday I decided to do a performance test for several programming languages. I decided to write a matrix multiplication algorithm in Java and then transfer this algorithm to other programming languages I know. I also uploaded all code to a new GitHub repository (https://github.com/nsiatras/programming-languages-benchmark). 

The matrices of my "matrix multiplication benchmark" are of size 1024x1024 (1.073.741.824 multiplication and addition operations) and I populated them with random values between 0.0 and 1.0. Each experiment is run 5 times and the total time it took to complete is displayed as a result.

The results

LanguageElapsed Time(Seconds)Notes
FreePascal21.0020Free Pascal Compiler (FPC) 3.2.2
Java22.1462GraalVM 22.2 Community Edition
(OpenJDK version 17.0.4)
FreeBasic25.8051FreeBASIC 1.09.0
C28.0330gcc.exe (x86_64-posix-seh-rev0,
Built by MinGW-W64 project) 8.1.0
(No optimization)
C#56.1140.NET Framework 6.0
Python4426.7331Python 3.10.7

I wasn't shocked or even surprised by the results. Ok... I was a bit surprised seen FreePascal in the first row instead of C, but I want to tell you that to compile the C code I used GCC without optimization.

FreePascal is 1.05 times faster than Java, Java is 1.26 times faster than C and Python proves that pencil and paper is way faster to perform calculations.

The reason Java can compete with C, FreePascal, FreeBasic and other compiled language that converts the code directly into machine language is the Java JIT (Just-In-Time) compiler. JIT compiler optimizes performance of programs running on the JVM (Java Virtual Machine) through unique approaches to code analysis and optimization. JIT is like a very talented software engineer optimizing your code.

For C# I have to say I was expecting more. I was expecting to be close to Java or even beat Java but C# was 2.53 slower this time. This has to do with the way .NET framework handles floating point values.

Python is an interpreted language and like any other interpreted languages (PHP!!!) is horribly slow. Interpreting code is many times slower than running the compiled code because the interpreter must analyze each statement in the program each time it is executed and then perform the desired action.

0 comments:

Post a Comment