DEV Community 👩‍💻👨‍💻

gholden
gholden

Posted on

Does size matter?

I've been toying around with some development recently. I like to look at different languages, and I like to make a decision on the language based on what the project I might be building.

As such I was looking at 4 languages. C, C#, Go and Vala.

For this test I wanted to see the size of a simple "Hello, World!" program. This would just publish "Hello, World" out onto the console.

I was curious about the size of the binary file once compiled.

  • C = 8.6Kb
  • Vala = 9.43Kb
  • Go = 1.9Mb
  • C# = 35.6Mb
  • ASM = 920Bytes**

*Edit - none of the above have been optimised with their compilers - so these are default compilation to binary - I am sure they can be squeezed a bit more.

**Edit - After discussion on the size of the C binary, I thought it would be interesting to see what ASM would be... and it's tiny. So a lot of the C stuff is due to the stdio.h and redundant for actually printing text to the console.

Now, this isn't really fair, as C# was never really intended to run as a single binary - it just so happens now you can. But I was staggered at the size difference.

Also, Go is pretty bloaty.

Vala makes sense, as it essentially transpiles to C++ before final compilation.

And C - is super tiny.

So - what does this all mean? Does size really matter? Well that entirely depends on what you're trying to do. Embedded services, or running on a low tech bit of kit, then optimisation and size will matter.

The ease of development also matter. C can be pretty mind mending, having to think about garbage collection, and the finer detail of relatively low level stuff.

Go is a relatively simple language, and can be pretty quick to develop in.

Vala is getting closer to C# as syntax goes and are both competent OOP languages.

I'm not going to say which is best, as there is no winner. I was just curious about the outcome.

Top comments (8)

Collapse
 
moopet profile image
Ben Sinclair

I'm looking at that and thinking 8KB is way too much.

Collapse
 
opensussex profile image
gholden

ok, been playing with GCC and have reduced it down a bit... by using the -s flag. So you're right, it can be reduced. (got it down to 6Kb)

Collapse
 
opensussex profile image
gholden

I'd love to see a way to get it smaller!

Collapse
 
moopet profile image
Ben Sinclair

I just tried it using naive gcc which gave me 17KB and strip got it down to 14KB. I guess that's because of stdio but it's been so long since I wrote any C that I can't remember how it all fits together.

I wasn't particularly talking about C, though. I mean that using BIOS screen printing calls you can do it in a handful of bytes in asm, so I'm thinking that of that 8KB, 7.9KB is junk.

Thread Thread
 
opensussex profile image
gholden

interesting you got 14KB - what os you compiling on?

I guess my next task, is to try it in pure ASM and see what the size is....

Thread Thread
 
moopet profile image
Ben Sinclair

Arch.

Thread Thread
 
opensussex profile image
gholden

I'm on mint - I wouldn't have expected a difference in file size really.

Thread Thread
 
opensussex profile image
gholden

In asm - works out to be 920Bytes.

Timeless DEV post...

How to write a kickass README

Arguably the single most important piece of documentation for any open source project is the README. A good README not only informs people what the project does and who it is for but also how they use and contribute to it.

If you write a README without sufficient explanation of what your project does or how people can use it then it pretty much defeats the purpose of being open source as other developers are less likely to engage with or contribute towards it.