<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alarming Development</title>
	<atom:link href="http://alarmingdevelopment.org/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://alarmingdevelopment.org</link>
	<description>Dispatches from the Programmer Liberation Front</description>
	<lastBuildDate>Tue, 08 Dec 2009 17:37:42 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Incompleteness</title>
		<link>http://alarmingdevelopment.org/?p=351</link>
		<comments>http://alarmingdevelopment.org/?p=351#comments</comments>
		<pubDate>Tue, 08 Dec 2009 17:37:42 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=351</guid>
		<description><![CDATA[Bad news: co-action is incomplete. Simple example:
x=true
y=true
if (x') {y'=false, z'=!z'}
if (y') {x'=false}

There is only one coherent execution order. It results in x&#8217;=false.
But co-action will get stuck in the first conditional because of the cyclic reference to z. To get unstuck would require backtracking to explore alternative execution orders. That is scary.
It seems the only way [...]]]></description>
			<content:encoded><![CDATA[<p>Bad news: co-action is incomplete. <span id="more-351"></span>Simple example:<br />
<code>x=true<br />
y=true<br />
if (x') {y'=false, z'=!z'}<br />
if (y') {x'=false}<br />
</code><br />
There is only one coherent execution order. It results in x&#8217;=false.<br />
But co-action will get stuck in the first conditional because of the cyclic reference to z. To get unstuck would require backtracking to explore alternative execution orders. That is scary.</p>
<p>It seems the only way to make co-action complete is to make coherence deterministic. That is my strong preference anyway. Unfortunately I have also discovered that the &#8220;client/server barriers&#8221; I proposed in the NEPLS talk do not work in all cases. I am thinking about alternatives, but so far they all require making static declarations in the code, which is a burden to the programmer. Perhaps it is better to just live with incompleteness for screwy code like the counterexample, which probably never actually occurs. Either way, it is not as pretty a picture as I was hoping for.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=351</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>NEPLS slides up</title>
		<link>http://alarmingdevelopment.org/?p=348</link>
		<comments>http://alarmingdevelopment.org/?p=348#comments</comments>
		<pubDate>Thu, 03 Dec 2009 01:52:24 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=348</guid>
		<description><![CDATA[Here are the slides from my NEPLS talk. People seemed to enjoy it, and I got a bunch of laughs. Positive comments afterwards. Mitch Wand couldn&#8217;t stay for my talk, but I got a few minutes to talk with him, and he gave me a promising suggestion for the completeness theorem. Overall a good experience, [...]]]></description>
			<content:encoded><![CDATA[<p>Here are the <a href="http://www.coherence-lang.org/NEPLS09.ppt">slides </a>from my NEPLS talk. People seemed to enjoy it, and I got a bunch of laughs. Positive comments afterwards. Mitch Wand couldn&#8217;t stay for my talk, but I got a few minutes to talk with him, and he gave me a promising suggestion for the completeness theorem. Overall a good experience, though as usual I am relieved now that it is over.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=348</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>NEPLS submission</title>
		<link>http://alarmingdevelopment.org/?p=345</link>
		<comments>http://alarmingdevelopment.org/?p=345#comments</comments>
		<pubDate>Mon, 16 Nov 2009 00:36:31 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=345</guid>
		<description><![CDATA[I submitted the following to NEPLS:
Co-action

Co-action is a new form of synchronous reactive programming. From the programmer&#8217;s point of view, all actions take place simultaneously, and all interdependencies between actions are resolved instantaneously. Eliminating execution order avoids many of the complexities and pitfalls of imperative programming. What is novel is that co-action also supports an [...]]]></description>
			<content:encoded><![CDATA[<p>I submitted the following to <a href="http://www.nepls.org/">NEPLS</a>:<span id="more-345"></span></p>
<p><strong>Co-action<br />
</strong></p>
<p>Co-action is a new form of synchronous reactive programming. From the programmer&#8217;s point of view, all actions take place simultaneously, and all interdependencies between actions are resolved instantaneously. Eliminating execution order avoids many of the complexities and pitfalls of imperative programming. What is novel is that co-action also supports an imperative model of state, with a heap of dynamically allocated objects pointing to one another, and assignment through pointer variables. Other forms of declarative programming either eliminate pointers or fall back to explicitly ordering execution. Co-action attempts to combine the best of both declarative and imperative programming.</p>
<p>Declarative languages avoid pointers for good reason: to determine a correct execution order, data flow dependencies must be known, but pointer aliasing makes that undecidable at compile time. Co-action instead finds a correct execution order at run time by monitoring program execution and doing rollbacks to backtrack. The undecidable problem at compile time is converted into a search problem at run time. Co-actions are in a sense the dual of transactions, combining synchronous actions instead of isolating asynchronous actions, and parallelizing instead of serializing.</p>
<p>To better study and communicate these ideas, I have defined a small formal calculus. The correctness criterion of an execution order is <em>coherence</em>: every field is written at most once, and prior to any reads.  The completeness theorem states that if a coherent execution order exists, then the co-action execution algorithm will find it. As of this writing I have been unable to prove completeness, and am seeking advice.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=345</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>OOPSLA report</title>
		<link>http://alarmingdevelopment.org/?p=338</link>
		<comments>http://alarmingdevelopment.org/?p=338#comments</comments>
		<pubDate>Sun, 01 Nov 2009 20:31:38 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=338</guid>
		<description><![CDATA[Back from OOPSLA, with mixed feelings. This was the smallest OOPSLA ever, and there are some big changes coming next year: they are renaming the conference SPLASH (Systems, Programming, Languages, Applications: Software for Humanity). OOPSLA becomes a colocated conference within the SPLASH umbrella, along with Onward and Dynamic Languages. The Onward program was perhaps the [...]]]></description>
			<content:encoded><![CDATA[<p>Back from OOPSLA, with mixed feelings. This was the smallest OOPSLA ever, and there are some big changes coming next year: they are renaming the conference SPLASH (Systems, Programming, Languages, Applications: Software for Humanity). OOPSLA becomes a colocated conference within the SPLASH umbrella, along with Onward and Dynamic Languages. The Onward program was perhaps the best ever this year, with some interesting preliminary work that was more than just metaphors and hand waving. Jonathan Aldrich&#8217;s Plaid language is worth following.<span id="more-338"></span></p>
<p>Barbara Liskov gave her Turing award lecture, talking about how she invented Abstract Data Types thirty years ago. She has not been doing language research for 20 years, and says she is still waiting for someone to invent better language abstractions. She has been repeatedly quoted as saying that current PL research is a dead end, and that Java is good enough. The rumor here is that she is a big reason why no PL researchers have been hired by MIT in over a decade.</p>
<p>William Cook&#8217;s <a href="http://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf">essay </a>was the antidote to Liskov. I found it insightful, shedding new light on what we have thought were settled issues. Highly recommended.</p>
<p>Concurrency and multicore is still quite hot. All these talks had the obligatory motivation slide about how CPU clock speed has stalled and so multicore is the only way forward and we have to figure out how to program these beasts. I don&#8217;t get it. It is a solution looking for a problem. CPU cycles are a limiting factor in only a fraction of software. Server-side software scales across system farms, not cores. Desktop software is rarely CPU bound anymore. CPU cycles are a lot less important than programmer cycles. But people would probably find Coherence more interesting if I pitch it as a multicore solution. It could be, but I have been trying to focus on what is important, not what is popular.</p>
<p>My own talk got mixed reviews. It was generally compared unfavorably to the Flapjax paper (which won the best student paper award) because they both are concerned with the problem of callbacks. Flapjax uses the demonstrated techniques of FRP and has a solid implementation that is actually usable, whereas my talk was only a brief speculation about a fundamentally new approach that is completely unproven. Unfortunately we were scheduled at the same time, but I had a good talk with Leo Meyerovich and Arjun Guha later. They seem like nice guys, and I am hopeful that we can have a productive dialogue in the future (despite the nasty competitiveness that is common in our field). For example, I heard that Phil Wadler ripped Shriram in the Q&#038;A because he didn&#8217;t give sufficient credit to prior FRP work. Why can&#8217;t we just all get along?</p>
<p>Phil Wadler and Guy Steele were both at my talk. I felt that Steele avoided talking to me for the rest of the show, giving me a stone face every time I greeted him. We have talked many times in the past, but I was dead to him. </p>
<p>Luckily there were a couple of people who liked the talk and went out of their way to tell me and to encourage me to keep going. I have invitations to visit two places once I have some progress to discuss. That was my main goal for this conference, so it was a success, even though I feel more than ever that I don&#8217;t belong in Computer Science.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=338</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Onward talk</title>
		<link>http://alarmingdevelopment.org/?p=335</link>
		<comments>http://alarmingdevelopment.org/?p=335#comments</comments>
		<pubDate>Tue, 27 Oct 2009 19:38:43 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=335</guid>
		<description><![CDATA[Here is a video of my Onward talk.
]]></description>
			<content:encoded><![CDATA[<p>Here is a <a href="http://www.coherence-lang.org/Onward09video/Onward09video.html">video </a>of my Onward talk.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=335</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>The Eclipse of Java</title>
		<link>http://alarmingdevelopment.org/?p=330</link>
		<comments>http://alarmingdevelopment.org/?p=330#comments</comments>
		<pubDate>Thu, 01 Oct 2009 15:19:31 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=330</guid>
		<description><![CDATA[Java is the new Cobol. But there has been a burst of language innovation on the JVM, for example Groovy, Scala, and Clojure. These languages can not become mainstream without a first-class IDE like Eclipse. Eclipse may not be that IDE. 
This presentation about the Scala Eclipse plugin is alarming. These JVM languages tightly couple [...]]]></description>
			<content:encoded><![CDATA[<p>Java is the new Cobol. But there has been a burst of language innovation on the JVM, for example Groovy, Scala, and Clojure. These languages can not become mainstream without a first-class IDE like Eclipse. Eclipse may not be that IDE. <span id="more-330"></span></p>
<p>This <a href="http://www.chuusai.com/documents/2009-09/jvmlangsummit-20090916.pdf">presentation </a>about the Scala Eclipse plugin is alarming. These JVM languages tightly couple with Java, and so need to integrate with the Java IDE features. But the Eclipse project has been unwilling to support that. Scala and Groovy have had to resort to binary aspect weaving to monkey-patch Eclipse. Unfortunately it appears that is not sufficient, and the presentation concludes that forking the Eclipse JDT may be the only solution.</p>
<p>Fortunately <a href="http://www.jetbrains.com/idea/">IntelliJ </a>seems to be doing a good job of supporting these new JVM languages. But it is sad to see that Eclipse, which started as a very progressive forward-looking initiative, is now a roadblock to progress.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=330</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Lost in the forest</title>
		<link>http://alarmingdevelopment.org/?p=319</link>
		<comments>http://alarmingdevelopment.org/?p=319#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:52:41 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=319</guid>
		<description><![CDATA[I am lost. The essential idea of coherence is a year old, and I still haven&#8217;t implemented it. I blame the trees. I have been struggling to integrate coherence with the tree-based model of computation in Subtext. It just isn&#8217;t working. In fact it hasn&#8217;t been working for years &#8211; I have struggled with the [...]]]></description>
			<content:encoded><![CDATA[<p>I am lost. The essential idea of coherence is a year old, and I still haven&#8217;t implemented it. I blame the trees. I have been struggling to integrate coherence with the tree-based model of computation in Subtext. It just isn&#8217;t working. In fact it hasn&#8217;t been working for years &#8211; I have struggled with the subtleties of trees in my last 4 papers. And the reviewers seemed to have struggled as well. My conclusion is that these trees are standing in the way of progress, and they have to come down.<span id="more-319"></span></p>
<p>I have been hugging trees because they seemed essential to my long-term agenda. But I realize now that if I defer the more ambitious aspects, I can still achieve some major goals with a more normal language, one that uses syntax for code and objects for data. Such a language is not only a lot simpler to invent, but also a lot more approachable to everyone else. Three realizations make this simplification now seem viable.</p>
<p>Firstly, I have remembered that I can make a syntactic language still appear to be live and example-centric in the IDE. That is what I did back in my original <a href="http://subtextual.org/OOPSLA04.pdf">Example Centric Programming</a> paper. That work was limited to a purely functional subset of Java. But now with coherence I can equally well visualize the execution of imperative code in the IDE.</p>
<p>Secondly, I can construct updatable views out of objects. My last paper talked about virtual trees, which are computed on demand, but can be read and written like normal trees. I can do the same thing with objects by automatically generating getter and setter methods, and by carefully limiting their visibility. Collections have to change substantially. This will not be a plain vanilla object model.</p>
<p>Thirdly, I can do hypothetical imperative computations (progressions in the paper) using <em>object spaces</em>. A space appears to be a copy of the entire heap, except with some specific changes. Spaces nest, which may offer some of the hierarchical goodness of trees, like deep copying.</p>
<p>The road forward looks like this: right now I am working on my talk at OOPSLA this month. I only have a 20 minute slot, so it will not be very deep. As usual I&#8217;ll post a video after the talk. Concurrently, I am working on an informal description of the syntax and semantics of the language to cover roughly the same capabilities as in the paper. I will try to present that in more detail later this fall at NEPLS. Then I need to do a prototype implementation, probably as a REPL without an IDE. </p>
<p>This is a complete 180 from my last <a href="http://alarmingdevelopment.org/?p=270">move</a>. Oh well. Research is confusing and unpredictable, and I&#8217;m not very good at it. I hope I eventually find my way out of the forest.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=319</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Scala is Groovy</title>
		<link>http://alarmingdevelopment.org/?p=304</link>
		<comments>http://alarmingdevelopment.org/?p=304#comments</comments>
		<pubDate>Mon, 06 Jul 2009 18:12:21 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=304</guid>
		<description><![CDATA[Groovy&#8217;s creator endorses Scala. Scala is very promising. When I first read Odersky&#8217;s academic paper several years ago, I was put off by the complexity of the type system. But it becomes more attractive when you look at the everyday programming aspects of the language. It does a very nice job of synthesizing functional and [...]]]></description>
			<content:encoded><![CDATA[<p>Groovy&#8217;s creator <a href="http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html">endorses </a>Scala. Scala is very promising. When I first read Odersky&#8217;s academic paper several years ago, I was put off by the complexity of the type system. But it becomes more attractive when you look at the everyday programming aspects of the language. It does a very nice job of synthesizing functional and OO programming, and eliminating a lot of the boilerplate in Java. I would consider Scala for my own work, except that it depends on Java for UI, which is an epic failure. But for server-side programming Scala is a promising alternative to Java.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=304</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Illustrative Programming</title>
		<link>http://alarmingdevelopment.org/?p=302</link>
		<comments>http://alarmingdevelopment.org/?p=302#comments</comments>
		<pubDate>Tue, 30 Jun 2009 23:55:58 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=302</guid>
		<description><![CDATA[Martin Fowler has a new post in which he coins the term Illustrative Programming for what I have been calling Example Centric Programming. He gives me a nice plug too. Martin is a keen observer of trends in programming, and his terminological inventions have had an enormous influence on the practice of patterns, refactoring, and [...]]]></description>
			<content:encoded><![CDATA[<p>Martin Fowler has a new <a href="http://martinfowler.com/bliki/IllustrativeProgramming.html">post </a>in which he coins the term <em>Illustrative Programming</em> for what I have been calling <a href="http://subtextual.org/OOPSLA04.pdf">Example Centric Programming</a>. He gives me a nice plug too. Martin is a keen observer of trends in programming, and his terminological inventions have had an enormous influence on the practice of patterns, refactoring, and now DSL&#8217;s. I see his latest neologism as an indicator of the increasing relevance of the idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=302</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Wagn</title>
		<link>http://alarmingdevelopment.org/?p=299</link>
		<comments>http://alarmingdevelopment.org/?p=299#comments</comments>
		<pubDate>Mon, 29 Jun 2009 12:53:54 +0000</pubDate>
		<dc:creator>Jonathan Edwards</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://alarmingdevelopment.org/?p=299</guid>
		<description><![CDATA[Check it out. Cross between a Wiki and a database. And a semantic database at that, where all fields/attributes are binary associations. See plus cards and formatting. Very cute. Has an embedded query language, using JSON syntax. Needs an embedded update language.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://wagn.org">Check it out</a>. Cross between a Wiki and a database. And a semantic database at that, where all fields/attributes are binary associations. See <a href="http://wagn.org/wagn/plus_cards">plus cards</a> and <a href="http://wagn.org/wagn/formatting">formatting</a>. Very cute. Has an embedded query language, using JSON syntax. Needs an embedded update language.</p>
]]></content:encoded>
			<wfw:commentRss>http://alarmingdevelopment.org/?feed=rss2&amp;p=299</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
