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.

  • lilja@lemmy.ml
    link
    fedilink
    arrow-up
    2
    ·
    2 months ago

    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…

  • lambalicious@lemmy.sdf.org
    link
    fedilink
    English
    arrow-up
    2
    ·
    2 months ago

    Languages

    C.

    Frameworks

    C.

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

    • leisesprecher@feddit.orgOP
      link
      fedilink
      arrow-up
      0
      ·
      2 months ago

      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.

      • xmunk@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        ·
        2 months ago

        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.

        • leisesprecher@feddit.orgOP
          link
          fedilink
          arrow-up
          1
          ·
          2 months ago

          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.

  • milis@programming.dev
    link
    fedilink
    arrow-up
    1
    ·
    2 months ago

    Go will be easy enough to get the job done, then you will have plenty of time rewrite it with whatever language you like.

    That’s at least my case. I have a cloud server that hosts a few services for news, weather, LLM client, etc… Most of them, if not all, took me just 2-3 hours to get it up and running, and a couple hours more the following day to fine tune. Now I have a working service and I can move on to rewrite it in (in my case) Rust as a learning opportunity.

  • houseofleft@slrpnk.net
    link
    fedilink
    English
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    2 months ago

    I feel like in a lot of ways, most languages are great candidates for this, for lots of different reasons!

    • Rust: Great choice because it produces a small, very well optimised binary. If you just care about the output binary being small and non-memory intensive, then this is probably a good call.

    Buuuuut, Rust’s compilation can be pretty resource intensive, so if you’re actually developing on limited hardware:

    • C (or curveball option, Hare): produces a small, well optimised binary, with faster compilation. But less framework type things to help you on your way to apis/servers/etc.

    Then there’s the fact that it’s a home server, so always on, meaning you actually have generous resources in some ways, because any available CPU is kinda just there to use so:

    • Python: has a runtime and can be pretty heavy CPU wise, but lots of frameworks, and in all honesty, would wind up being a lot faster to put stuff together in than Rust or C. Probably a great default option until you hit resource issues.

    And then why not go whole hog into the world of experimental languages:

    • Roc: Doesn’t have versions yet, so super new, but should produce a pretty small binary and give you higher level ergonomics than something like Rust or C, especially if you’re into FP.

    And then we’re forgetting about:

    • Haskell: Haskell is the only true programming language, and any time there’s a selection of programming languages, picking the one that isn’t Haskell is the wrong choice. Just ask anyone who programs in Haskell.

    But that doesn’t factor in:

    • Javascript: Sooner or later, everything is just javascript anyway, why even try to resit?

    Plus:

    • Assembly: Can you even trust that it’s well optimised unless you’re writing the assembly yourself?

    Edit: My actual serious answer is that Rust + Rocket would be great fun if you’re interested in learning something new, and you’d get very optimised code. If you just want it to use less memory that java and don’t want to spend too much time learning new things then python is probably fine and very quick to learn. Go is a nice halfway point.