Live data from Hacker News

Ask HN: What should have been the term for RAII?

news.ycombinator.com

11–20 of 62 posts

Re: Ask HN: What should have been the term for RAII?

#11
post #7
post #6

Earlier quoted context omitted.

Are there languages that do SBRM but not RAII?

Rust doesn’t have initializers in the C++ sense. And I mean, even in C++ many classes like shared_ptr or even lock_guard have constructors that don’t acquire the resources yet. When the resource is acquired is an API design concern; the important part is where it’s released.

This sounds like an argument that C++ isn't RAII.

Re: Ask HN: What should have been the term for RAII?

#14
post #11
post #7

Earlier quoted context omitted.

Rust doesn’t have initializers in the C++ sense. And I mean, even in C++ many classes like shared_ptr or even lock_guard have constructors that don’t acquire the resources yet. When the resource is acquired is an API design concern; the important part is where it’s released.

This sounds like an argument that C++ isn't RAII.

C++ _isn't_ RAII. RAII is a design pattern you can apply, leveraging C++ language features, in C++ in certain cases to avoid a certain class of bugs.

Re: Ask HN: What should have been the term for RAII?

#15

Constructor Acquires, Destructor Releases.

I too was going to say this! The earliest mention of this idea (CADR / CADRe) I’ve found is from 2012: https://groups.google.com/a/isocpp.org/g/std-proposals/c/Una...

Unfortunate acronym, you're going to get a bunch of lisp docs...

Re: Ask HN: What should have been the term for RAII?

#16
post #15

Earlier quoted context omitted.

I too was going to say this! The earliest mention of this idea (CADR / CADRe) I’ve found is from 2012: https://groups.google.com/a/isocpp.org/g/std-proposals/c/Una...

Unfortunate acronym, you're going to get a bunch of lisp docs...

It's also pretty pointless; it's just repeating the job description of the constructors and destructor of any object that manages a resource.

Who is that for? Dummies who get it backwards? Oh, look, you're releasing in your destructor and acquiring in the destructor. Did you forget your CADR?

Re: Ask HN: What should have been the term for RAII?

#17
cppreference defines it as:

> Resource Acquisition Is Initialization or RAII, is a C++ programming technique[1][2] which binds the life cycle of a resource that must be acquired before use (allocated heap memory, thread of execution, open socket, open file, locked mutex, disk space, database connection—anything that exists in limited supply) to the lifetime of an object.

I’d crib the name from Rust, this is ownership, where the object owns the resource.

Re: Ask HN: What should have been the term for RAII?

#18
post #15

Earlier quoted context omitted.

I too was going to say this! The earliest mention of this idea (CADR / CADRe) I’ve found is from 2012: https://groups.google.com/a/isocpp.org/g/std-proposals/c/Una...

Unfortunate acronym, you're going to get a bunch of lisp docs...

You are right, I do program in LISP and love the C[AD]+R idea.

I even had my own proposal 5 years ago for improving that!

> That's right, but I would go one step further and have F(irst) and R(est), with obvious composition as follows: (using kruhft's examples from another thread)

    > (ff  x) == (caar  x) == (car (car x))

    > (rrf x) == (cddar x) == (cdr (cdr (car x)))
> I would argue that it's worth sacrificing the 'f' and 'r' symbols for such a common construct.

> …

> Yes, I realize I'm 55 years late to the party.

https://news.ycombinator.com/item?id=13259344

Now we only need to implement both changes at the same time! :-P

Re: Ask HN: What should have been the term for RAII?

#19
post #5
post #4

I’m a Rust programmer but I would call it scope-based or scope-bound resource management, a popular alternative term in the C++ community.

RAII isn't just about automatic ("scope-based") variables. RAII refers to the way the language ties together the construction and allocation of the object.

[deleted]

Re: Ask HN: What should have been the term for RAII?

#20
post #6
post #5

Earlier quoted context omitted.

RAII isn't just about automatic ("scope-based") variables. RAII refers to the way the language ties together the construction and allocation of the object.

Are there languages that do SBRM but not RAII?

Yes. Eg if you look at Java try-with-resources there is an exact scope during which resources live and can be used. At the end of the scope the .close() method will be called.

For C++ and Rust there might not be a well defined scope since objects can be „moved“. Eg a method constructing an object can return it to the caller without the destructor being called.

Post reply on HN