I have a small homelab running a few services, some written by myself for small tasks - so the load is basically just me a few times a day.

Now, I’m a Java developer during the day, so I’m relatively productive with it and used some of these apps as learning opportunities (balls to my own wall overengineering to try out a new framework or something).

Problem is, each app uses something like 200mb of memory while doing next to nothing. That seems excessive. Native images dropped that to ~70mb, but that needs a bunch of resources to build.

So my question is, what is you go-to for such cases?

My current candidates are Python/FastAPI, Rust and Elixir, but I’m open for anything at this point - even if it’s just for learning new languages.

26 points

If you want something with a small footprint I would personally go for Rust, but anything that compiles to a static binary is going to be better than something that needs a dedicated runtime.

Python is what I use for small one-time scripts and utility stuff that doesn’t need to run long, but it may be worse than Java…

permalink
report
reply
14 points

Go is quite nice for this, generally low traffic services are less than 100mb used memory if you’re using the standard lib stuff and it’s not a huge jump from the JVM to Go.

permalink
report
reply
1 point
*

@leisesprecher It depends on how much you’re willing to optimise/go low level.

Rust is very fast and doesn’t use much memory. You can use some frameworks like Axum, Rocket (very well documented) and Actix, but they’re all high throughout beasts, so there the possibility of them using a bit of memory, like 40MB.

C++ can be high level and very efficient, using very little space. However, it is very very easy to shoot yourself in the foot, and is going to cost you in debugging time.

+

permalink
report
reply
1 point

@leisesprecher
Python is very straightforward and doesn’t use much memory in general< 60MB. However, it depends greatly on the framework (same as other languages!), but for a simple REST service, FastAPI is a star. It models endpoints as functions. I don’t recommend using it for anything production though. There is also Flask, but I haven’t used it enough.

permalink
report
parent
reply
18 points

Languages

C.

Frameworks

C.

That said, Python and Rust are great for setting up “starting up” / “small task” apps and growing up from there.

permalink
report
reply
9 points

There’s nothing to really grow. It’s mostly just small helpers. Aggregate sensor data, pull data from A and push it to B every hour, a small dashboard, etc.

C is too involved for my case , I want to be productive after all.

Rust is already rather low level, though there are some cool looking frameworks.

permalink
report
parent
reply
5 points

C is an extremely expressive language. There’s a reason it won’t die and, while we all love to shit on it for the memes, you can write perfectly safe software in it.

permalink
report
parent
reply
14 points

Of course, but I’m not productive in it.

If I have to do everything myself, it will take more time to get it done. The trade-off is of course always control/speed vs convenience, but C is definitely too inconvenient for me.

permalink
report
parent
reply
8 points

you can write perfectly safe software in it.

In the same way that you can safely walk through a minefield.

I dunno what you mean about it being an expressive language either. I would say it is relatively low on the expressiveness scale compared to something like Python or OCaml. It’s basically as expensive as Go which is renowned for being unexpressive. Maybe you didn’t mean “expressive”.

permalink
report
parent
reply
3 points

If you’ve so far been able to do this stuff in Java, then presumably all your hardware has an OS and such and you don’t need this, but a colleague has been having a lot of fun with Rust and proper embedded development.

It’s very different from regular development, as you’ve got no OS, no filesystem, no memory allocations, no logging. It can most definitely be a pain.
But the guy always has the biggest grin on his face when he tells that he made a custom implementation of the CAN protocol (TCP is too complex for embedded 🙃) and that he had to integrate an LED to output error information and stuff like that. At the very least, it seems to be a lot less abstract, as you’re working directly with the hardware.

permalink
report
parent
reply
4 points

Scala compiles either to native, js or jvm - obviously the IO / interface options vary between these envs, but the lang is the same. Recently Scala 3.5 incorporates a simple-to-use CLI which makes it easier to compile to native (or just run a small file as a script, or experiment with a repl), native binaries are small and fast, and there are some simple io libraries. Since you can also compile to jvm to interop with java, that might help with transition.

permalink
report
reply
1 point

But that would mean either using Graal/native image or going full Scala, right?

I only used Scala for Gatling, where it’s obviously very java-y.

permalink
report
parent
reply
3 points

Indeed to use scala-native you’d need pure-scala libraries, but the core lib re-implements most java lib, and there are now small simple external libs available for common tasks like file management, database, etc. - for example check out the lihaoyi suite.
I mainly use scala-js (to make this) which was formerly a java app - as it compiles to both js and jvm (cross-project) can gradually convert stuff you already wrote. I’ve tried native for stuff like pre-processing data files.

permalink
report
parent
reply

Programming

!programming@programming.dev

Create post

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person’s post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you’re posting long videos try to add in some form of tldr for those who don’t want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



Community stats

  • 3.4K

    Monthly active users

  • 753

    Posts

  • 5.8K

    Comments