Further adding on, here is my final implementation. The folks on Code Review also informed me, in no uncertain terms, that it was a very problematic solution. And I agree with them. However, for all of its flaws, at least it cannot leak due to user's forgetting a TWR.
https://codereview.stackexchange.com/questions/290912/implementation-of-java-util-stream-stream-and-friends-that-reads-lines-from-th But of course, this is a terrible solution to deal with a non-trivial problem -- forgetting TWR is not a compiler error/warning. Is there any chance that we could get better compile time support for detecting resource leaks? On Sun, Mar 3, 2024 at 10:02 PM David Alayachew <davidalayac...@gmail.com> wrote: > And as a side note, I did some pretty in-depth research on the topic, and > stumbled on this post on the lambda mailing list during Java 8's creation. > I am adding it, as it seems to be considering many of the same concerns I > have now. > > > https://mail.openjdk.org/pipermail/lambda-libs-spec-experts/2013-August/002195.html > > On Sun, Mar 3, 2024 at 10:00 PM David Alayachew <davidalayac...@gmail.com> > wrote: > >> >> Hello Amber Dev Team and Core Libs Dev Team, >> >> I am making my own implementation of java.util.stream.Stream that reads >> data from the internet lazily. It's basically >> java.nio.file.Files.lines(...), but the file is on the internet instead. >> Here is a StackOverflow post I made that basically gave birth to idea. Just >> for context. [1] >> >> I used composition -- I held my resource and the stream inside of my >> container data type. However, I also had this container data type implement >> java.util.stream.Stream too. This way, the end user can use this object >> exactly like a Stream. >> >> In my implementation, I delegated all method calls to the underlying >> stream. But, for each terminal operation, I would wrap the delegated calls >> with try-with-resources for my resources, to prevent resource leak upon >> exception. >> >> Now, I know that this is taking an uphill path to a solution. We could >> easily tell the user that they have to close the resources themself. Or we >> could let the user provide their own resources and thus, leave the >> responsibility on their plate. Or we could use the escape-hatch provided by >> stream lol, and tell the user to use try-with-resources on my custom >> stream. As you all intended us to do, I'm sure. >> >> I know the reason might seem poorly justified (StackOverflow told me as >> much -- [1]), but I did this so that none of the users of my stream would >> have to concern themselves doing try-with-resources. Try-with-resources is >> an excellent utility, but I have no way to know if I left a resource >> unclosed because there are no compiler warnings or errors if I do so. >> >> Are there any plans to make it easier to detect potential resource leaks? >> Ideally with a compiler warning or error? >> >> Thank you for your time and help! >> David Alayachew >> >> [1] = https://stackoverflow.com/questions/77959436 >> >>