all 18 comments

sorted by: hot top controversial new old
[–] 58 points 1 month ago (14 children)

The whole point of it is to prevent you from doing stupid shit. Yes it's annoying. But you can't handle memory management on your own, no matter how much you think you can.

It's either that or garbage collection. Choose which one you hate less.

  • source
  • hideshow 14 child comments
  • [–] 21 points 1 month ago (8 children)

    Garbage collection doesn't solve the problem either, cause it's too unpredictable and typically doesn't even give you the option to close resources when memory is reclaimed. So just opening SQL connections and forgetting to close them will quickly drain the connection pool.

  • source
  • parent
  • hideshow 8 child comments
  • [–] 9 points 1 month ago (7 children)

    Seems like someone doesn't RAII their connections!

  • source
  • parent
  • hideshow 7 child comments
  • [–] 12 points 1 month ago* (6 children)

    You can't, not in e.g. Java or C#.

    C++ and Rust are the only languages I know of that do this right.

  • source
  • parent
  • hideshow 6 child comments
  • [–] 7 points 1 month ago (2 children)

    It's not impossible, at least in C# I know you can mark objects that need to be RAII with some custom attribute and enforce correct usage patterns with a custom analyzer. You need to write it yourself but it's not impossible that way.

  • source
  • parent
  • hideshow 2 child comments
  • [–] 4 points 1 month ago (1 child)

    Maybe you're thinking of IDisposable with the using keyword. The problem with that is that you have to remember to use it in every call site. Nothing stops a caller from writing var x = new Foo() and walking away.

  • source
  • parent
  • hideshow 1 child comment
  • [–] 1 point 1 month ago (1 child)

    You can do some kind of RAII in python with the with keyword. Only works for local variables though, where it's easy to free resources manually

  • source
  • parent
  • hideshow 1 child comment
  • [–] 1 point 1 month ago* (last edited 1 month ago)

    But if you ever forget the with keyword, you have a leak. With proper RAII the resource acquisition and release is a property of the object's type and impossible to forget. RAII doesn't just mean "resource acquisition is initialization", it also implies "destruction is resource release".

  • source
  • parent
  • [–] 31 points 1 month ago (2 children)

    I don't understand why people hate the borrow checker. Just make sure that you own the value until everything is done using it, or put it into a smart pointer

  • source
  • hideshow 2 child comments
  • [–] 1 point 1 month ago (1 child)

    I basically never have borrow checker issues at all anymore, and smart pointers are basically never necessary. It takes getting used to, but it stops being an obstacle with practice.

  • source
  • parent
  • hideshow 1 child comment
  • [–] 1 point 1 month ago

    Yup. Although I like smart pointers due to their simplicity (unless it really needs performance), as well when dealing with tokio's spawn (eww. Smol and future combinators are way better)

    Although trait bounds are always a bigger issue for me... probably because of my biblically accurate trait bounds

  • source
  • parent