this post was submitted on 05 Oct 2024
107 points (95.0% liked)

Programming

17416 readers
79 users here now

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



founded 1 year ago
MODERATORS
top 50 comments
sorted by: hot top controversial new old
[–] zcd@lemmy.ca 63 points 1 month ago (1 children)
[–] dohpaz42@lemmy.world 58 points 1 month ago (1 children)
<?php
declare(strict_types=1)

😏 😁

πŸƒβ€β™‚οΈπŸ’¨

[–] Kissaki@programming.dev 8 points 1 month ago

πŸƒβ€β™‚οΈπŸ’¨

The dash emoji. Always looks like a fart.

[–] Dhs92@programming.dev 51 points 1 month ago
[–] mox@lemmy.sdf.org 50 points 1 month ago (3 children)

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.

[–] Ephera@lemmy.ml 11 points 1 month ago (18 children)

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.

[–] starman@programming.dev 8 points 1 month ago* (last edited 1 month ago) (1 children)
load more comments (1 replies)
load more comments (17 replies)
load more comments (2 replies)
[–] FizzyOrange@programming.dev 46 points 1 month ago (1 children)

Rust for now, by a wide margin. But I'm following other languages that I think have the potential to surpass it, including Vale (promises way more than it delivers currently), Koka, Hylo, maybe Lobster.

[–] tooLikeTheNope@lemmy.ml 6 points 1 month ago* (last edited 1 month ago) (4 children)
load more comments (4 replies)
[–] germanatlas@lemmy.blahaj.zone 33 points 1 month ago (2 children)

That is a very specific subset

[–] sus@programming.dev 29 points 1 month ago (1 children)

Garbage collection is still allowed, and technically JIT languages are still compiled so it really isn't that restrictive

load more comments (1 replies)
[–] paperplane@lemmy.world 5 points 1 month ago

Not that specific tbh, most newer native languages these days are compiled and memory safe (Rust, Swift, Go, Kotlin Native, etc)

[–] bonus_crab@lemmy.world 28 points 1 month ago (4 children)

C# is good too. If you havent heard of lobster you should look into it.

load more comments (4 replies)
[–] lambdabeta@lemmy.ca 22 points 1 month ago (3 children)

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?

[–] collapse_already@lemmy.ml 5 points 1 month ago

I have done quite a bit of C, C++, Ada, and Pascal development. I recently got into Rust. I am still getting used to Rust, but it feels a bit like someone tried to apply Ada to C++. I like the modern development environment, but I am slower writing code than I would be in Ada or C++. The one feature of Ada that I really like and want other languages to adopt is the Rep spec. I write driver code and being able to easily and explicitly identify which symbol corresponds to which bit is really good.

load more comments (2 replies)
[–] apoisel@discuss.tchncs.de 22 points 1 month ago (1 children)
[–] cyclohexane@lemmy.ml 8 points 1 month ago (10 children)

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.

load more comments (10 replies)
[–] Andromxda@lemmy.dbzer0.com 16 points 1 month ago

Hands down, Rust πŸ¦€

[–] AsudoxDev@programming.dev 15 points 1 month ago
[–] skulbuny@sh.itjust.works 14 points 1 month ago

People don't understand that JIT languages are still compiled, JIT literally describes when it's compiled.

That said, F# and/or OCaml.

[–] BorgDrone@lemmy.one 14 points 1 month ago
[–] hessnake@lemmy.world 14 points 1 month ago

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.

[–] KindaABigDyl@programming.dev 11 points 1 month ago

Rust and Haskell (I think Haskell counts)

[–] UFODivebomb@programming.dev 10 points 1 month ago

Scala 3 native. If the compiler was faster I'd be even happier. Curious to try Ada

[–] xigoi@lemmy.sdf.org 10 points 1 month ago
[–] ICastFist@programming.dev 10 points 1 month ago

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

[–] cafuneandchill@lemmy.world 8 points 1 month ago* (last edited 1 month ago)

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

[–] frankenswine@lemmy.world 7 points 1 month ago

You mean... except Ada?

[–] undefined@links.hackliberty.org 7 points 1 month ago* (last edited 1 month ago) (2 children)

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.

load more comments (2 replies)
[–] MajorHavoc@programming.dev 7 points 1 month ago* (last edited 1 month ago) (1 children)

Python with MyPy.

(Almost any language can meet those criteria, with enough shenanigans.)

[–] arthur@lemmy.zip 5 points 1 month ago (1 children)

But that's not compiled, not to binary at least.

[–] MajorHavoc@programming.dev 8 points 1 month ago

But that's not compiled, not to binary at least.

Well...sort of.

(Everything is weirder than it seems at first glance.)

[–] cinnamon_tea@programming.dev 6 points 1 month ago* (last edited 1 month ago)

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".

[–] bradboimler@lemmy.world 6 points 1 month ago
[–] DavidDoesLemmy@lemmynsfw.com 6 points 1 month ago

Kotlin is nice

[–] yogsototh@programming.dev 5 points 1 month ago* (last edited 1 month ago) (3 children)

purescript if you count β€œcompile to js” as compiled.

Otherwise Haskell

load more comments (3 replies)
[–] pelya@lemmy.world 5 points 1 month ago (1 children)

C++ with -Wall -Werror, and no pointer diddling.

[–] FizzyOrange@programming.dev 17 points 1 month ago (1 children)

Its definitely best to try and avoid raw pointers, but even if you try really hard I found it's not really possible to get a Rust-like experience with no UB.

Even something as simple as std::optional - you can easily forget to check it has a value and then boom, UB.

The C++ committee still have the attitude that programmers are capable of avoiding UB if they simply document it, and therefore they can omit all sanity checks. std::optional could easily have thrown an exception rather than UB but they think programmers are perfect and will never make that mistake. There are similar wild decisions with more recent features like coroutines.

They somehow haven't even learnt the very old lesson "safe by default".

If I wanted memory unsafety I think I would consider Zig instead of C++ at this point.

load more comments (1 replies)
load more comments
view more: next β€Ί