π¦
Programming
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
<?php
declare(strict_types=1)
π π
πββοΈπ¨
πββοΈπ¨
The dash emoji. Always looks like a fart.
Rust
With no context, this could be an honest attempt to learn about different tools, a thinly veiled set-up to promote a specific language, or an attempt to stir up drama. I can't tell which.
It's curious how such specific conditions are embedded into the question with no explanation of why, yet "memory safe" is included among them without specifying what kind of memory safety.
Yeah, arguably the only answer to this question is Rust.
Java/C#/etc. are not fully compiled (you do have a compilation step, but then also an interpretation step). And while Java/C#/etc. are memory-safe in a single-threaded context, they're not in a multi-threaded context.
C# has native compilation capability, thanks to Native AOT
https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/
Arguably modern c++ ( aka if you don't use raw pointers), fits all categories.
That is a very specific subset
Garbage collection is still allowed, and technically JIT languages are still compiled so it really isn't that restrictive
Not that specific tbh, most newer native languages these days are compiled and memory safe (Rust, Swift, Go, Kotlin Native, etc)
As others have said, Haskell and Rust are pretty great. A language that hasnβt been mentioned that I REALLY want to catch on, though, is Unison.
Honorable mention to my main driver lately: Purescript
C# is good too. If you havent heard of lobster you should look into it.
OCaml.
Sad I had to scroll to the end to see this.
Ocaml is brilliant and has the nicest type features. It's almost like Haskell but more approachable imo.
Ada, hands down. Every time I go to learn Rust I'm disappointed by the lack of safety. I get that it's miles ahead of C++, but that's not much. I get that it strikes a much better balance than Ada (it's not too hard to get it to compile) but it still leaves a lot to be desired in terms of safe interfacing. Plus it's memory model is more complicated than it needs to be (though Ada's secondary stack takes some getting used to).
I wonder if any other Ada devs have experience with rust and can make a better comparison?
Hands down, Rust π¦
Rust.
People don't understand that JIT languages are still compiled, JIT literally describes when it's compiled.
That said, F# and/or OCaml.
I started learning Go about 3 months ago and it quickly became one of my favorite languages. It feels like C with a bunch of Python niceties thrown in. And performance isn't super critical in my work so being garbage collected is fine with me.
Swift
Rust and Haskell (I think Haskell counts)
Scala 3 native. If the compiler was faster I'd be even happier. Curious to try Ada
Nim. Small compiler, small executables, easy to understand (except the macros, I still can't get my head around them).
FreePascal. Yeah yeah, Pascal's dead, etc etc, but it being so verbose and strict certainly help programmers (or at least me) keeping things somewhat tidy.
Also shoutout to V
Nim
After months of no practice, I forget quite a lot of stuff about them, regardless of language; therefore, none
EDIT: None of them is memory safe, that is
Crystal, but only because Iβm a full time Ruby on Rails (and sometimes Hanami!) programmer.
Itβs fantastic, and I had an excuse to use it at work when we needed to gather PHP Watchdog logs from a MySQL database and format, output them to STDOUT in a Kubernetes environment. (This was necessary for our log monitoring tools expecting data in a standard way, AKA not connecting to a database. π€¦ββοΈ)
I know there are perhaps better options out there (Go, Rust, etc.) but from a Rubyistβs point of view Crystal gives you that βflowβ from working in a beautiful language but with the performance boost of compiled software.
Java
Python with MyPy.
(Almost any language can meet those criteria, with enough shenanigans.)
You mean... except Ada?
You forgot that beauty - "undefined behavior"!
Memory-safety can guarantee only so much safety! C++ can still blow up in your face, even with all the alleged memory-safety built into C++, thanks to all the UB traps in C and C++.
Rust is the closest language that has no such "gotchas".
Kotlin is nice
purescript if you count βcompile to jsβ as compiled.
Otherwise Haskell