<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	>
<channel>
	<title>Comments on: The problem with STM: your languages still suck</title>
	<atom:link href="http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/feed/" rel="self" type="application/rss+xml" />
	<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/</link>
	<description>programming, politics, &#38; other religious issues</description>
	<lastBuildDate>Thu, 11 Mar 2010 20:50:13 +0000</lastBuildDate>
	
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Kragen Javier Sitaker</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-36210</link>
		<dc:creator>Kragen Javier Sitaker</dc:creator>
		<pubDate>Tue, 30 Jun 2009 04:27:33 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-36210</guid>
		<description>You write:

&quot;Kragen: Transactional backing store is a completely different issue. SQL databases have been transactional since forever (to first approximation)....The transactional store is generally only accessed through some discreet interface (SQL or some special library API), making accessing the transactional store in a non-transactional way much more difficult.&quot;

That&#039;s why I mentioned ZODB, GemStone, and ObjectStore, for which the transactional store is not accessed through a separate interface; persistent objects act more or less exactly like ordinary non-persistent objects. (I think this is the case for CICS too, which is why I mentioned it, but I don&#039;t have deep enough knowledge of CICS.) I can&#039;t tell if you didn&#039;t read my comment very carefully or if you just didn&#039;t know about these systems.</description>
		<content:encoded><![CDATA[<p>You write:</p>
<p>&#8220;Kragen: Transactional backing store is a completely different issue. SQL databases have been transactional since forever (to first approximation)&#8230;.The transactional store is generally only accessed through some discreet interface (SQL or some special library API), making accessing the transactional store in a non-transactional way much more difficult.&#8221;</p>
<p>That&#8217;s why I mentioned ZODB, GemStone, and ObjectStore, for which the transactional store is not accessed through a separate interface; persistent objects act more or less exactly like ordinary non-persistent objects. (I think this is the case for CICS too, which is why I mentioned it, but I don&#8217;t have deep enough knowledge of CICS.) I can&#8217;t tell if you didn&#8217;t read my comment very carefully or if you just didn&#8217;t know about these systems.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Helltime for May 1 &#171; I Built His Cage</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-34617</link>
		<dc:creator>Helltime for May 1 &#171; I Built His Cage</dc:creator>
		<pubDate>Fri, 01 May 2009 22:02:30 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-34617</guid>
		<description>[...] about software transactional memory. Enfranchised Mind&#8217;s Eric Hurt partially explains why: the languages aren&#8217;t there yet. I&#8217;m reminded of some of the opinions I have read lately on how Smalltalk never got the [...]</description>
		<content:encoded><![CDATA[<p>[...] about software transactional memory. Enfranchised Mind&#8217;s Eric Hurt partially explains why: the languages aren&#8217;t there yet. I&#8217;m reminded of some of the opinions I have read lately on how Smalltalk never got the [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peter Veentjer</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-34573</link>
		<dc:creator>Peter Veentjer</dc:creator>
		<pubDate>Wed, 29 Apr 2009 23:08:50 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-34573</guid>
		<description>This is an example of a STM Stack:

public class Stack{

    private Node head;

    public void push(E item) {
        if (item == null) throw new NullPointerException();
        head = new Node(item, head);
    }

    public E peek() {
        if (head == null)
            return null;

        return removeTopItem();
    }

    public E pop() {
        if (head == null)
            retry();

        return removeTopItem();
    }

    private E removeTopItem() {
        Node oldHead = head;
        head = head.parent;
        return oldHead.value;
    }

    public int size() {
        return head == null ? 0 : head.size();
    }

    public boolean isEmpty() {
        return size() == 0;
    }

    public static class Node {
        final E value;
        final Node parent;
        final int size;

        Node(E value, Node prev) {
            this.value = value;
            this.parent = prev;
            this.size = parent == null ? 1 : prev.size+1;
        }

        int size() {
            return size;
        }
    }
}

As you can see, the language doesn&#039;t need to suck if you use an STM.

You can check http://code.google.com/p/multiverse/ if the layout of the example is f*cked up.</description>
		<content:encoded><![CDATA[<p>This is an example of a STM Stack:</p>
<p>public class Stack{</p>
<p>    private Node head;</p>
<p>    public void push(E item) {<br />
        if (item == null) throw new NullPointerException();<br />
        head = new Node(item, head);<br />
    }</p>
<p>    public E peek() {<br />
        if (head == null)<br />
            return null;</p>
<p>        return removeTopItem();<br />
    }</p>
<p>    public E pop() {<br />
        if (head == null)<br />
            retry();</p>
<p>        return removeTopItem();<br />
    }</p>
<p>    private E removeTopItem() {<br />
        Node oldHead = head;<br />
        head = head.parent;<br />
        return oldHead.value;<br />
    }</p>
<p>    public int size() {<br />
        return head == null ? 0 : head.size();<br />
    }</p>
<p>    public boolean isEmpty() {<br />
        return size() == 0;<br />
    }</p>
<p>    public static class Node {<br />
        final E value;<br />
        final Node parent;<br />
        final int size;</p>
<p>        Node(E value, Node prev) {<br />
            this.value = value;<br />
            this.parent = prev;<br />
            this.size = parent == null ? 1 : prev.size+1;<br />
        }</p>
<p>        int size() {<br />
            return size;<br />
        }<br />
    }<br />
}</p>
<p>As you can see, the language doesn&#8217;t need to suck if you use an STM.</p>
<p>You can check <a href="http://code.google.com/p/multiverse/" rel="nofollow">http://code.google.com/p/multiverse/</a> if the layout of the example is f*cked up.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Meikel Brandmeyer</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-34559</link>
		<dc:creator>Meikel Brandmeyer</dc:creator>
		<pubDate>Wed, 29 Apr 2009 06:05:32 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-34559</guid>
		<description>Since Micheal Hendricks mentioned Clojure and the launch_missiles...

Write your launch-missiles using io!:

(defn launch-missiles
  &quot;Launch attack on remote targets with everything we have.&quot;
  []
  (io!
    (doseq [missile (all-silos)]
      (fire missile))))

Now whenever you try to launch the missiles inside a transaction,
Clojure will tell you. Safety switch: &quot;ON&quot;.</description>
		<content:encoded><![CDATA[<p>Since Micheal Hendricks mentioned Clojure and the launch_missiles&#8230;</p>
<p>Write your launch-missiles using io!:</p>
<p>(defn launch-missiles<br />
  &#8220;Launch attack on remote targets with everything we have.&#8221;<br />
  []<br />
  (io!<br />
    (doseq [missile (all-silos)]<br />
      (fire missile))))</p>
<p>Now whenever you try to launch the missiles inside a transaction,<br />
Clojure will tell you. Safety switch: &#8220;ON&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Bill Weiss</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-34558</link>
		<dc:creator>Bill Weiss</dc:creator>
		<pubDate>Wed, 29 Apr 2009 05:53:48 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-34558</guid>
		<description>Well, it&#039;s costing you real comments.  I left one that I put some thought into, and it&#039;s gone now.  It&#039;s due (as far as I can tell) to a technical failure on their part, not my posts looking particularly &quot;spammy&quot;.</description>
		<content:encoded><![CDATA[<p>Well, it&#8217;s costing you real comments.  I left one that I put some thought into, and it&#8217;s gone now.  It&#8217;s due (as far as I can tell) to a technical failure on their part, not my posts looking particularly &#8220;spammy&#8221;.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
