this post was submitted on 05 Oct 2024
53 points (94.9% liked)

Programming

17128 readers
269 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 [email protected]



founded 1 year ago
MODERATORS
top 50 comments
sorted by: hot top controversial new old
[–] [email protected] 3 points 1 hour ago
[–] [email protected] 2 points 1 hour ago* (last edited 1 hour ago)

Crystal, but only because I’m a full time Ruby on Rails (and sometimes Hanani!) 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.

[–] stormeuh 2 points 1 hour ago

C on Morello (or any other capability machine).

[–] [email protected] 3 points 1 hour ago* (last edited 1 hour 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".

[–] Olap 1 points 1 hour ago
[–] pelya 2 points 2 hours ago (1 children)

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

[–] [email protected] 5 points 1 hour ago

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.

[–] bonus_crab 5 points 4 hours ago (1 children)

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

[–] [email protected] 3 points 1 hour ago (1 children)

C# isn't exactly compiled, at least not into machine language. It is transpiled into byte code that is run on a virtual machine that on turn is an interpreter/JIT-compiler.

Depending on why someone is asking for a compiled language that may or may not be a problem, because to the one writing the code it looks like a compiled language, but to the one running it it looks like an interpreted one.

[–] [email protected] 0 points 1 hour ago

It is compiled into bytecode. A transpiler translates to another programming language with the same level of abstraction. A compiler translates into a level that is nearer to or machine code.

[–] [email protected] 19 points 7 hours ago
[–] [email protected] 20 points 8 hours ago (2 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.

[–] [email protected] 2 points 34 minutes ago

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.

[–] [email protected] 2 points 4 hours ago

The question mine as well be "what is your favorite compiled language?". There is a lot of overlap between the possible answers.

[–] dohpaz42 33 points 10 hours ago
<?php
declare(strict_types=1)

😏 😁

🏃‍♂️💨

[–] [email protected] 6 points 7 hours ago

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

[–] [email protected] 7 points 7 hours ago

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.

[–] [email protected] 33 points 10 hours ago (1 children)
[–] [email protected] 22 points 10 hours ago

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.

[–] [email protected] 23 points 10 hours ago (1 children)

That is a very specific subset

[–] [email protected] 22 points 9 hours ago

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

[–] [email protected] 9 points 8 hours ago (1 children)
[–] [email protected] 4 points 4 hours ago (1 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.

[–] [email protected] 1 points 1 hour ago

I’ve recently been trying to learn OCaml and find it really nice. The major pain points are

  • C-style separate compilation with manually created headers
  • Small standard library
  • No generic print function
  • Hard to use external libraries
[–] [email protected] 5 points 8 hours ago

Rust and Haskell (I think Haskell counts)

[–] [email protected] 7 points 9 hours ago* (last edited 9 hours ago) (1 children)

Python with MyPy.

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

[–] [email protected] 4 points 2 hours ago (1 children)

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

[–] [email protected] 4 points 1 hour ago

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

Well...sort of.

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

[–] [email protected] 6 points 8 hours ago
[–] [email protected] 7 points 9 hours ago

Hands down, Rust 🦀

[–] [email protected] 7 points 9 hours ago
[–] [email protected] 12 points 10 hours ago (2 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?

[–] [email protected] 2 points 3 hours 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.

[–] [email protected] 1 points 8 hours ago

I would use Ada or Spark in a heartbeat if there was an easy-to-use, mature cross-platform GUI library for it.

[–] flubba86 1 points 8 hours ago (1 children)
[–] [email protected] 2 points 4 hours ago (1 children)

I wouldn't consider Julia statically-typed; am I wrong?

[–] flubba86 1 points 4 hours ago

It's actually optionally-typed. But if you're liberal with type annotations you can treat it as statically typed.

[–] frankenswine 5 points 10 hours ago

You mean... except Ada?

[–] [email protected] -2 points 6 hours ago (1 children)
[–] [email protected] 5 points 4 hours ago (1 children)

They specified statically typed languages. Python would be dynamically typed

[–] [email protected] 1 points 1 hour ago (1 children)

Python is dynamically typed by default, but lots of Python is statically typed.

[–] [email protected] 1 points 6 minutes ago

No python is statically typed. You have type hints, which makes the language tolerable but like their name implies it's a hint at the type. You can perfectly legally pass in something completely different that doesn't conform whatsoever.

The primary thing static languages provide is static typing, that being the ability to determine before runtime that all the types are valid. A good example of this is how C++ programs will refuse to compile if you try to invoke a method that doesn't exist on the type. That's because it's statically typed. At compile time you know that the code is wrong. Dynamic languages fundamentally don't work like that. You cannot know until runtime if the method you called or the field you are trying to touch exists or not. Again type hints help a lot with this but that doesn't change how the language actually operates.