[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Auto-closing with loops
- From: "Soni \"They/Them\" L." <fakedme@...>
- Date: Fri, 20 Jul 2018 07:59:45 -0300
On 2018-07-20 07:44 AM, Hisham wrote:
On 19 July 2018 at 21:22, Soni "They/Them" L. <email@example.com> wrote:
Oh, I just realized having a "return" or "break" inside the block/for loop
would cause issues... Hmm... Oh well, at least I tried I guess :/
Yes, that's why people call for an actual feature to support this. It
is not syntactic sugar: implicit immediate release of resources cannot
be implemented in Lua as is.
Note *implicit immediate* together:
You can have implicit release of resources with __gc, but that's not
immediate. (And not being immediate is a problem: I have had
real-world bugs caused by that; files provided by the standard io
library do close() on __gc, but if you rely on that in a loop, your
code works fine for years until you run a loop on a directory with
thousands of files, and then you get a "too many open files" failure.)
You can have immediate release of resources by calling foo:close() by
hand in every possible exit of your function, but that's not implicit.
(And not being implicit is a problem: throw the first stone they who
never forgot to close()/free()/release() a resource is some of their
code paths — that's why languages have garbage collection for memory
management, after all — but memory is not the only kind of resource
managed in a program.)
On the other hand, it's a rather complex feature, unlike most of Lua.
And, handling "return" is actually easy now that I think about it (but
still leaves out "break", which, granted, is easy enough to work around)
- just clear out the table and call close on the stuff after returning
from the function.
Anyway, it was just an idea. Sorry it wasn't good.