Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!eternal-september.org!feeder.eternal-september.org!.POSTED!not-for-mail From: Joshua Cranmer Newsgroups: comp.lang.java.programmer Subject: Re: CICE and ARM --> Closure, how? Date: Fri, 07 Oct 2011 17:55:08 -0500 Organization: A noiseless patient Spider Lines: 53 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 7 Oct 2011 22:55:11 +0000 (UTC) Injection-Info: mx04.eternal-september.org; posting-host="WpcHJSul77m+zlbR9GVqkA"; logging-data="21492"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX183i6LHFQnxR64NSn5/N6tjS7TfIdtg3yE=" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20110929 Thunderbird/7.0.1 In-Reply-To: Cancel-Lock: sha1:xV8ON3UgVJ03xVmqhdw2TzDFbrY= Xref: x330-a1.tempe.blueboxinc.net comp.lang.java.programmer:8646 On 10/7/2011 4:04 PM, Jan Burse wrote: > Dear All, > > I am just reading on the Wiki page of Josh Bloch: > > Bloch has proposed the extension of the Java > programming language with two features: Concise > Instance Creation Expressions (CICE) (coproposed > with Bob Lee and Doug Lea) and Automatic > Resource Management (ARM) blocks. The combination > of CICE and ARM formed one of the three early > proposals for adding support for closures to Java. > > By ARM I understand the try-with-resource. Can somebody > explain me how this together with CICE is related to > closure? In a few sentences without looking much at > other proposals. I don't have any clue from the hip. CICE+ARM was Bloch (and other)'s counterproposal to the other two main closure proposals, BGGA (the acronym comes from the authors' names), and FCM (First-Class Methods) (I think--I know a lot less about this than the other two). To call it a closures proposal is a slight misnomer, since it's more like a "we don't want closures, but we can lighten up on necessary syntax today." The ARM part is a response to BGGA's trumpeting of the ability to do `withLock(lock) { }' via closures, by solving the most-requested (and pretty much only requested) new control flow idiom, which is the largest source of BGGA's complexity. CICE, on the other hand, points out that Java already has limited closures: new Thread(new Runnable() { public void run() { System.out.println("Look at me!"); }}); It proposed to "satisfy" demands for closures by reducing the syntax of that expression to just: new Thread(new Runnable() { System.out.println("Look at me!"); }); In other words, CICE+ARM boils down to the following things: 1. Reduce verbosity of anonymous inner classes (which are already a light form of closures) 2. Add the automatic resource management idiom to reduce the desire for creating custom control-flow graphs. It really isn't adding anything new in the realm of closures, it is merely about syntactic sugar to satisfy most common use cases. -- Beware of bugs in the above code; I have only proved it correct, not tried it. -- Donald E. Knuth