Re: Any plans to make resource leaks easier to detect?

2024-03-07 Thread David Alayachew
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 
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 
> 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
>>
>>


Re: Any plans to make resource leaks easier to detect?

2024-03-03 Thread David Alayachew
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 
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
>
>