<?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"
xmlns:rawvoice="http://www.rawvoice.com/rawvoiceRssModule/"
	>
<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>Wed, 08 Feb 2012 14:16:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>By: יד שניה</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-38207</link>
		<dc:creator>יד שניה</dc:creator>
		<pubDate>Fri, 16 Sep 2011 00:14:20 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-38207</guid>
		<description>I think the important point is that the boundary between
transactions and side-effects is critical in TM - good !</description>
		<content:encoded><![CDATA[<p>I think the important point is that the boundary between<br />
transactions and side-effects is critical in TM &#8211; good !</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 2n3904</title>
		<link>http://enfranchisedmind.com/blog/posts/the-problem-with-stm-your-languages-still-suck/#comment-37785</link>
		<dc:creator>2n3904</dc:creator>
		<pubDate>Fri, 06 Aug 2010 13:29:53 +0000</pubDate>
		<guid isPermaLink="false">http://enfranchisedmind.com/blog/?p=913#comment-37785</guid>
		<description>Peter, Can you explain 
(quote)

private E removeTopItem() {
Node oldHead = head;
head = head.parent;
return oldHead.value;

(/end quote)</description>
		<content:encoded><![CDATA[<p>Peter, Can you explain<br />
(quote)</p>
<p>private E removeTopItem() {<br />
Node oldHead = head;<br />
head = head.parent;<br />
return oldHead.value;</p>
<p>(/end quote)</p>
]]></content:encoded>
	</item>
	<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>
</channel>
</rss>

