ARM Blocks: ease of use and for loops

Howard Lovatt howard.lovatt at gmail.com
Thu Nov 12 12:27:26 PST 2009


I think the for loop failing on CloseableIterable is backward  
compatible because CloseableIterable currently doesn't exist. The  
reason I said controversially was that it would involve more work.

   -- Howard Lovatt +61 419 971 263

On 12/11/2009, at 1:25 PM, Reinier Zwitserloot  
<reinier at zwitserloot.com> wrote:

> "Controversial" as in: Not even close to backwards compatible? I  
> don't think that's feasible. A separate syntax to indicate that  
> you'd like to iterate-then-close, which warns or errs if you supply  
> a non-closable iterator, seems like a better idea. Lest we overload  
> the try keyword too much, and make code that isn't particularly  
> readable ('try' does not scream: Iterating through something  
> iteratable to me), possibly look into:
>
> try for(T a : b) {
> }
>
> We might as well start using the fact that try requires a block body.
>
> for try(T a : b) {
> }
>
> and:
>
> for(try T a : b) {
> }
>
> or even:
>
> for(T a: try b) {
> }
>
> are all also unambiguous given the current JLS and should be easy to  
> retrofit into the existing grammars of javac and ecj.
>
> --Reinier Zwitserloot
>
>
>
> On Thu, Nov 12, 2009 at 10:55 AM, Howard Lovatt  
> <howard.lovatt at iee.org> wrote:
> Reinier has raised a good point that you start with a  
> CloseableIterable and end up with just an Iterable, this loosing of  
> the Cloaseable type hasn't happened in my code (because I am looking  
> for the problem). I can see that it would happen in other peoples  
> code and also by mistake. I think this problem is solved by using:
>
> try(final String line : iterableFile) {
>    ...
> }
>
> The above try-for-each block will fail at compile time if  
> iterableFile isn't of type CloseableIterable.
>
> Secondly, and more controversially, the for-each loop could fail at  
> compile time if given a CloseableIteratable as opposed to a normal  
> Iterable.
>
> 2009/11/11 Reinier Zwitserloot <reinier at zwitserloot.com>
> The problem is: If you forget to retrofit a filter, or you're just  
> using one written with java6 or below in mind, then there's no  
> obvious sign that your resource is not being closed. No compiler  
> error or warning. Not even a pattern in the code you can detect.  
> You'll notice a month later, when you've released your product to  
> your customers, who are starting to call in with strange errors  
> involving full DB pools and such. The fix is to write up a custom  
> findbugs plugin, or something similar. Given the way findbugs is not  
> even close to universally used, let alone used with custom plugins,  
> that is not at all a satisfactory answer.
>
> That's a very serious problem.
>
> --Reinier Zwitserloot
>
>
>
>
> On Wed, Nov 11, 2009 at 10:30 PM, Neal Gafter <neal at gafter.com> wrote:
> On Wed, Nov 11, 2009 at 1:21 PM, Reinier Zwitserloot <reinier at zwitserloot.com 
> > wrote:
> Unless all existing filters are rewritten to support Closeable, and  
> their close methods do an instanceof check on the contained Iterator  
> and pass on the close call if they are also ClosableIterators, I  
> don't see how that's going to work.
>
> That sounds like a workable approach.
>
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________
>
>
>
> -- 
>  -- Howard.
>
>
> ______________________________________________________________________
> This email has been scanned by the MessageLabs Email Security System.
> For more information please visit http://www.messagelabs.com/email
> ______________________________________________________________________



More information about the coin-dev mailing list