<?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/"
		>
<channel>
	<title>Comments for Whiley</title>
	<atom:link href="http://whiley.org/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://whiley.org</link>
	<description>A Programming Language with Extended Static Checking</description>
	<lastBuildDate>Fri, 20 Jan 2012 22:20:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Brooks Moses</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1987</link>
		<dc:creator>Brooks Moses</dc:creator>
		<pubDate>Fri, 20 Jan 2012 22:20:00 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1987</guid>
		<description>Fortran (95 and later) has a keyword for declaring functions as &quot;pure&quot;, and when one does so, the compiler then can check that the function only does operations without side effects and only calls functions that are likewise declared &quot;pure&quot;.

It also has mechanisms for declaring parameters as &quot;in&quot;, &quot;out&quot;, or &quot;inout&quot;, which makes the compiler&#039;s dataflow analysis rather easier.  (You can mostly do the same thing with C++ references using &quot;const&quot;, but this I think is a bit more direct about the purpose.)

I have not looked in detail, but I believe that the interactions between the &quot;pure&quot; keyword and the object-oriented programming introduced in Fortran 2003 will have been fairly well-thought-out as far as combining objects and pure functions.</description>
		<content:encoded><![CDATA[<p>Fortran (95 and later) has a keyword for declaring functions as &#8220;pure&#8221;, and when one does so, the compiler then can check that the function only does operations without side effects and only calls functions that are likewise declared &#8220;pure&#8221;.</p>
<p>It also has mechanisms for declaring parameters as &#8220;in&#8221;, &#8220;out&#8221;, or &#8220;inout&#8221;, which makes the compiler&#8217;s dataflow analysis rather easier.  (You can mostly do the same thing with C++ references using &#8220;const&#8221;, but this I think is a bit more direct about the purpose.)</p>
<p>I have not looked in detail, but I believe that the interactions between the &#8220;pure&#8221; keyword and the object-oriented programming introduced in Fortran 2003 will have been fairly well-thought-out as far as combining objects and pure functions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Matt</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1982</link>
		<dc:creator>Matt</dc:creator>
		<pubDate>Fri, 20 Jan 2012 10:44:14 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1982</guid>
		<description>Please fix the Eric Meijer link. His name is in fact EriK Meijer. Cheers! :)</description>
		<content:encoded><![CDATA[<p>Please fix the Eric Meijer link. His name is in fact EriK Meijer. Cheers! <img src='http://whiley.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Peter</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1980</link>
		<dc:creator>Peter</dc:creator>
		<pubDate>Fri, 20 Jan 2012 02:54:26 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1980</guid>
		<description>&lt;i&gt;What language?&lt;/i&gt; is one way of looking at the problem. Another way to look at it is from the perspective of &lt;a href=&quot;http://www.zeromq.org/&quot; rel=&quot;nofollow&quot;&gt;ZeroMQ&lt;/a&gt; -- i.e. spread better concurrency by providing a crosscutting library that projects the actor model through all layers of architecture.  It seems to me that what is likely to emerge is a selection of Clojure-like (dynamic-like syntax, but type-hinted and STM-endowed) and Haskell-like languages (purely functional and deeply-typed, but with friendlier FRP) communicating at runtime using a core library that is ZeroMQ-like.  That picture leaves room for a range of friendliness and expressiveness while also enabling a market-competitive dynamic to drive the quality of usable compute services.</description>
		<content:encoded><![CDATA[<p><i>What language?</i> is one way of looking at the problem. Another way to look at it is from the perspective of <a href="http://www.zeromq.org/" rel="nofollow">ZeroMQ</a> &#8212; i.e. spread better concurrency by providing a crosscutting library that projects the actor model through all layers of architecture.  It seems to me that what is likely to emerge is a selection of Clojure-like (dynamic-like syntax, but type-hinted and STM-endowed) and Haskell-like languages (purely functional and deeply-typed, but with friendlier FRP) communicating at runtime using a core library that is ZeroMQ-like.  That picture leaves room for a range of friendliness and expressiveness while also enabling a market-competitive dynamic to drive the quality of usable compute services.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Dave</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1975</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Thu, 19 Jan 2012 20:54:07 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1975</guid>
		<description>Hi v,

Well, yes Java and C# are safer than C in many ways.  But, simon was being quite specific in his meaning of safety and, from that perspective, they are really quite similar.</description>
		<content:encoded><![CDATA[<p>Hi v,</p>
<p>Well, yes Java and C# are safer than C in many ways.  But, simon was being quite specific in his meaning of safety and, from that perspective, they are really quite similar.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Dave</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1974</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Thu, 19 Jan 2012 20:53:13 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1974</guid>
		<description>Hi David,

There are a few things here.  Firstly, objects to not always completely encapsulate the state they access.  Oftentimes, an object is shared amongst many and used as a shared variable.  In some sense, what you have is many small object networks which are collaborating together.  To move one object onto a core you have to figure out which ones from its network are needed as well.  And, the compiler certainly is not capable of doing this for us.</description>
		<content:encoded><![CDATA[<p>Hi David,</p>
<p>There are a few things here.  Firstly, objects to not always completely encapsulate the state they access.  Oftentimes, an object is shared amongst many and used as a shared variable.  In some sense, what you have is many small object networks which are collaborating together.  To move one object onto a core you have to figure out which ones from its network are needed as well.  And, the compiler certainly is not capable of doing this for us.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by David</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1969</link>
		<dc:creator>David</dc:creator>
		<pubDate>Thu, 19 Jan 2012 13:35:55 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1969</guid>
		<description>I don&#039;t really understand why OOP is unsuitable for multi-core programming. Presuming an object is responsible only for its own state, as long as a single object doesn&#039;t have to spread its state across processors, the state should be fully encapsulated, right?

I&#039;ll take your word for it that Java, C#, and co. do share state internally, but surely that&#039;s implementation specific and not a limitation of object orientation per se?</description>
		<content:encoded><![CDATA[<p>I don&#8217;t really understand why OOP is unsuitable for multi-core programming. Presuming an object is responsible only for its own state, as long as a single object doesn&#8217;t have to spread its state across processors, the state should be fully encapsulated, right?</p>
<p>I&#8217;ll take your word for it that Java, C#, and co. do share state internally, but surely that&#8217;s implementation specific and not a limitation of object orientation per se?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by v</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1964</link>
		<dc:creator>v</dc:creator>
		<pubDate>Thu, 19 Jan 2012 08:48:11 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1964</guid>
		<description>Simon is not being very honest when he lumps C in there with C# and Java. Even if they lack the side-effect tracking systems, they are far safer languages for many reasons.

Go is actually diametrically opposed to the Haskell philosophy, I would think: it tries to be as useful as possible and safe only when it serves the first purpose. Personally, that seems like the best way to go in practice. Always good to research superior methods, of course... it just doesn&#039;t seem like the research has generated much use in the last few decades.</description>
		<content:encoded><![CDATA[<p>Simon is not being very honest when he lumps C in there with C# and Java. Even if they lack the side-effect tracking systems, they are far safer languages for many reasons.</p>
<p>Go is actually diametrically opposed to the Haskell philosophy, I would think: it tries to be as useful as possible and safe only when it serves the first purpose. Personally, that seems like the best way to go in practice. Always good to research superior methods, of course&#8230; it just doesn&#8217;t seem like the research has generated much use in the last few decades.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by brad</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1963</link>
		<dc:creator>brad</dc:creator>
		<pubDate>Thu, 19 Jan 2012 08:26:05 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1963</guid>
		<description>Go may deserve a mention here too. it has types, inference, and a very strong concurrency story. it also is very easy to pick up.</description>
		<content:encoded><![CDATA[<p>Go may deserve a mention here too. it has types, inference, and a very strong concurrency story. it also is very easy to pick up.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Brandon</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1960</link>
		<dc:creator>Brandon</dc:creator>
		<pubDate>Thu, 19 Jan 2012 02:58:46 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1960</guid>
		<description>I expected this article to go in a completely different direction.  I don&#039;t disagree, but I see a simultaneous trend in a somewhat opposite direction: easier to use, more powerful dynamic languages compiling to either JavaScript or the JVM.  It&#039;s easy to see if you look at the widespread use of the JVM post-Java, and when you take into consideration proliferation of browser applications and the coming of Netbooks.

I prefer writing powerful, useful projects quickly and with fun tools. Ill leave optimizing the parallelizing compilers to the people who feel like mucking with it.</description>
		<content:encoded><![CDATA[<p>I expected this article to go in a completely different direction.  I don&#8217;t disagree, but I see a simultaneous trend in a somewhat opposite direction: easier to use, more powerful dynamic languages compiling to either JavaScript or the JVM.  It&#8217;s easy to see if you look at the widespread use of the JVM post-Java, and when you take into consideration proliferation of browser applications and the coming of Netbooks.</p>
<p>I prefer writing powerful, useful projects quickly and with fun tools. Ill leave optimizing the parallelizing compilers to the people who feel like mucking with it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Final should be Default for Classes in Java by Aivar</title>
		<link>http://whiley.org/2011/12/06/final-should-be-default-for-classes-in-java/comment-page-1/#comment-1957</link>
		<dc:creator>Aivar</dc:creator>
		<pubDate>Wed, 18 Jan 2012 17:26:57 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3331#comment-1957</guid>
		<description>Open classes cause trouble when clients who inherit make certain assumptions about superclass working model and later superclass provider breaks those assumptions.

It&#039;s not the &quot;open&quot; annotation or leaving out &quot;final&quot; that commits the superclass writer, it&#039;s the documentation which says how the class is working.

If I&#039;m extending a class and there are no guarantees about its working model written in the documentation, then I accept the risk that my assumptions may be broken with next release.</description>
		<content:encoded><![CDATA[<p>Open classes cause trouble when clients who inherit make certain assumptions about superclass working model and later superclass provider breaks those assumptions.</p>
<p>It&#8217;s not the &#8220;open&#8221; annotation or leaving out &#8220;final&#8221; that commits the superclass writer, it&#8217;s the documentation which says how the class is working.</p>
<p>If I&#8217;m extending a class and there are no guarantees about its working model written in the documentation, then I accept the risk that my assumptions may be broken with next release.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Aivar</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1956</link>
		<dc:creator>Aivar</dc:creator>
		<pubDate>Wed, 18 Jan 2012 17:14:10 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1956</guid>
		<description>Maybe my brain is not &quot;natural&quot; anymore, but I think that what&#039;s difficult to parse for computer is usually also difficult to parse for human.

About requiring parens for application -- this overloads the meaning of parens, they&#039;re not only for grouping anymore. I think all kinds of overloading usually complicates matters (but on the other hand, it may be beneficial for expert language users).

Now, if you choose juxtaposition for application, then you need to separate type and name with something (eg. colon). You gain some, you lose some.</description>
		<content:encoded><![CDATA[<p>Maybe my brain is not &#8220;natural&#8221; anymore, but I think that what&#8217;s difficult to parse for computer is usually also difficult to parse for human.</p>
<p>About requiring parens for application &#8212; this overloads the meaning of parens, they&#8217;re not only for grouping anymore. I think all kinds of overloading usually complicates matters (but on the other hand, it may be beneficial for expert language users).</p>
<p>Now, if you choose juxtaposition for application, then you need to separate type and name with something (eg. colon). You gain some, you lose some.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Daniel Burke</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1955</link>
		<dc:creator>Daniel Burke</dc:creator>
		<pubDate>Wed, 18 Jan 2012 16:43:26 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1955</guid>
		<description>Oh dear, s/SPJ-Useless/SPJ-Safe/g</description>
		<content:encoded><![CDATA[<p>Oh dear, s/SPJ-Useless/SPJ-Safe/g</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Daniel Burke</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1954</link>
		<dc:creator>Daniel Burke</dc:creator>
		<pubDate>Wed, 18 Jan 2012 16:39:56 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1954</guid>
		<description>Wow, this article and its links go a long way in crystallising an idea that&#039;s been bouncing around my head for longer than I care to admit.

To make sure I&#039;m on the same page, would I be correct in thinking that, at least compared to C, that OpenCL is an &quot;SPJ-Useless&quot; language?</description>
		<content:encoded><![CDATA[<p>Wow, this article and its links go a long way in crystallising an idea that&#8217;s been bouncing around my head for longer than I care to admit.</p>
<p>To make sure I&#8217;m on the same page, would I be correct in thinking that, at least compared to C, that OpenCL is an &#8220;SPJ-Useless&#8221; language?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by NoXzema</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1951</link>
		<dc:creator>NoXzema</dc:creator>
		<pubDate>Wed, 18 Jan 2012 14:10:45 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1951</guid>
		<description>@alex, what do you base that on?</description>
		<content:encoded><![CDATA[<p>@alex, what do you base that on?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by bjarneh</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1950</link>
		<dc:creator>bjarneh</dc:creator>
		<pubDate>Wed, 18 Jan 2012 10:57:09 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1950</guid>
		<description>rust (http://rust-lang.org) is another clear contender</description>
		<content:encoded><![CDATA[<p>rust (<a href="http://rust-lang.org" rel="nofollow">http://rust-lang.org</a>) is another clear contender</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Michal Wallace</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1947</link>
		<dc:creator>Michal Wallace</dc:creator>
		<pubDate>Wed, 18 Jan 2012 08:44:30 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1947</guid>
		<description>A relatively new language that makes the pure/impure distinction explicit is &lt;a href=&quot;http://www.candlescript.org/&quot; rel=&quot;nofollow&quot;&gt;candle&lt;/a&gt;.

It uses two completely different sub-languages to do the job.</description>
		<content:encoded><![CDATA[<p>A relatively new language that makes the pure/impure distinction explicit is <a href="http://www.candlescript.org/" rel="nofollow">candle</a>.</p>
<p>It uses two completely different sub-languages to do the job.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by alex</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1942</link>
		<dc:creator>alex</dc:creator>
		<pubDate>Wed, 18 Jan 2012 05:53:34 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1942</guid>
		<description>I would say Clojure is a lot closer to being a &quot;mainstream programming language&quot; that &quot;support[s] pure functions&quot; than Haskell or D.</description>
		<content:encoded><![CDATA[<p>I would say Clojure is a lot closer to being a &#8220;mainstream programming language&#8221; that &#8220;support[s] pure functions&#8221; than Haskell or D.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Dave</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1941</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Wed, 18 Jan 2012 03:28:47 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1941</guid>
		<description>&lt;blockquote&gt;anyone comment on the advantages for a compiler for a language that insists on pure functions&lt;/blockquote&gt;

The issue here is whether or not the compiler can still perform key optimisations.  In some cases, static analysis can determine that a piece of code is pure.  But, this is really difficult and most compilers don&#039;t do it (although the JVM presumably does to some extent).  

Const in C++ is interesting because the language spec explicitly states that modifying an object through a const reference results in undefined behaviour.  This does enable the compiler to optimise, even though const is not strictly enforced (see &lt;a href=&quot;http://stackoverflow.com/questions/212237/constants-and-compiler-optimization-in-c&quot; rel=&quot;nofollow&quot;&gt;this&lt;/a&gt;).  However, the downside is that when some does break constness then subtle bugs can arise which are hard to understand because they&#039;re caused by some specific compiler optimisation.</description>
		<content:encoded><![CDATA[<blockquote><p>anyone comment on the advantages for a compiler for a language that insists on pure functions</p></blockquote>
<p>The issue here is whether or not the compiler can still perform key optimisations.  In some cases, static analysis can determine that a piece of code is pure.  But, this is really difficult and most compilers don&#8217;t do it (although the JVM presumably does to some extent).  </p>
<p>Const in C++ is interesting because the language spec explicitly states that modifying an object through a const reference results in undefined behaviour.  This does enable the compiler to optimise, even though const is not strictly enforced (see <a href="http://stackoverflow.com/questions/212237/constants-and-compiler-optimization-in-c" rel="nofollow">this</a>).  However, the downside is that when some does break constness then subtle bugs can arise which are hard to understand because they&#8217;re caused by some specific compiler optimisation.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Wretch</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1940</link>
		<dc:creator>Wretch</dc:creator>
		<pubDate>Wed, 18 Jan 2012 03:11:30 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1940</guid>
		<description>C and C++ *support* pure functions, but don&#039;t insist upon them. C++ has language support for const methods. A lot can be done by programmers working in a functional style, even in these old-fangled languages. Can anyone comment on the advantages for a compiler for a language that insists on pure functions, as opposed to code that merely sticks to them by design?</description>
		<content:encoded><![CDATA[<p>C and C++ *support* pure functions, but don&#8217;t insist upon them. C++ has language support for const methods. A lot can be done by programmers working in a functional style, even in these old-fangled languages. Can anyone comment on the advantages for a compiler for a language that insists on pure functions, as opposed to code that merely sticks to them by design?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Dave</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1938</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Wed, 18 Jan 2012 01:54:42 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1938</guid>
		<description>Hey Edmund,

The search-based nature of Prolog would seem to make it a good candidate for automated parallelisation.  However, I don&#039;t really know enough about Prolog to make an informed opinion.  Perhaps someone else can comment?</description>
		<content:encoded><![CDATA[<p>Hey Edmund,</p>
<p>The search-based nature of Prolog would seem to make it a good candidate for automated parallelisation.  However, I don&#8217;t really know enough about Prolog to make an informed opinion.  Perhaps someone else can comment?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Connecting the Dots on the Future of Programming Languages by Edmund Horner</title>
		<link>http://whiley.org/2012/01/18/connecting-the-dots-on-the-future-of-programming-languages/comment-page-1/#comment-1937</link>
		<dc:creator>Edmund Horner</dc:creator>
		<pubDate>Wed, 18 Jan 2012 01:49:07 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3505#comment-1937</guid>
		<description>How do some of the Prolog-like languages fit in here?  Prolog isn&#039;t purely functional of course, but in practice (in my experience) most of the computational code written in it is.  The major exception is a few common tricks for memoising results.

I imagine that the same techniques useful for parallelising Haskell could be applied to logic languages.  But I am quite ignorant there.</description>
		<content:encoded><![CDATA[<p>How do some of the Prolog-like languages fit in here?  Prolog isn&#8217;t purely functional of course, but in practice (in my experience) most of the computational code written in it is.  The major exception is a few common tricks for memoising results.</p>
<p>I imagine that the same techniques useful for parallelising Haskell could be applied to logic languages.  But I am quite ignorant there.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Dave</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1927</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Mon, 16 Jan 2012 21:05:12 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1927</guid>
		<description>
&lt;blockquote&gt;it is essential for a programming language to be unambiguously precise&lt;/blockquote&gt;



That&#039;s a given, and is not specifically about syntax.  


&lt;blockquote&gt;The precision of a program should be equally obvious to a human reader as it is to the computer.&lt;/blockquote&gt;


No, I definitely disagree on this.  It should be much more obvious to a human than the computer :)  That is, I want to make the compiler work harder for the benefit of the human.



&lt;blockquote&gt;That paper you cite claiming things about “Random syntax” lies&lt;/blockquote&gt;



That statement is far too strong for me.  Certainly, as we discussed in the reading group, there are a few problems with the paper.  My point is only that it represents an attempt to do research in this space.</description>
		<content:encoded><![CDATA[<blockquote><p>it is essential for a programming language to be unambiguously precise</p></blockquote>
<p>That&#8217;s a given, and is not specifically about syntax.  </p>
<blockquote><p>The precision of a program should be equally obvious to a human reader as it is to the computer.</p></blockquote>
<p>No, I definitely disagree on this.  It should be much more obvious to a human than the computer <img src='http://whiley.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   That is, I want to make the compiler work harder for the benefit of the human.</p>
<blockquote><p>That paper you cite claiming things about “Random syntax” lies</p></blockquote>
<p>That statement is far too strong for me.  Certainly, as we discussed in the reading group, there are a few problems with the paper.  My point is only that it represents an attempt to do research in this space.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Art Protin</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1921</link>
		<dc:creator>Art Protin</dc:creator>
		<pubDate>Sun, 15 Jan 2012 22:11:05 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1921</guid>
		<description>I do not accept your wording (and thrust) of your first principle.  As I See it, it is essential for a programming language to be unambiguously precise, although I would see that as the 0th rule, and a rule that must never be compromised.  Factoring that out of your first rule, that leaves it to require clarity to the human about that precision.
    The discussion in the comments about the Haskell example borders on an indictment of Haskell, for the better the language the less room there is for such misunderstandings.  The value of a programming language derives entirely from the production of a corpus of properly functioning programs, and clarity of expression is key to the writing, debugging, and maintaining of programs.  The precision of a program should be equally obvious to a human reader as it is to the computer.

    That paper you cite claiming things about &quot;fandom syntax&quot; lies, for all they have done is encipher the keywords, leaving totally unchanged the syntactic rules for the structure of programs.  Please, never confuse the &quot;syntactic sugar&quot; and lexemes for the real syntax of a language.  (I will argue that the indentation rules of Python are not part of the real syntax.)</description>
		<content:encoded><![CDATA[<p>I do not accept your wording (and thrust) of your first principle.  As I See it, it is essential for a programming language to be unambiguously precise, although I would see that as the 0th rule, and a rule that must never be compromised.  Factoring that out of your first rule, that leaves it to require clarity to the human about that precision.<br />
    The discussion in the comments about the Haskell example borders on an indictment of Haskell, for the better the language the less room there is for such misunderstandings.  The value of a programming language derives entirely from the production of a corpus of properly functioning programs, and clarity of expression is key to the writing, debugging, and maintaining of programs.  The precision of a program should be equally obvious to a human reader as it is to the computer.</p>
<p>    That paper you cite claiming things about &#8220;fandom syntax&#8221; lies, for all they have done is encipher the keywords, leaving totally unchanged the syntactic rules for the structure of programs.  Please, never confuse the &#8220;syntactic sugar&#8221; and lexemes for the real syntax of a language.  (I will argue that the indentation rules of Python are not part of the real syntax.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Dave</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1894</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Wed, 11 Jan 2012 07:18:41 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1894</guid>
		<description>Hi James,

I never got taught greek letters at school (well, other whan pi)!

As for research, well there&#039;s that paper on &lt;a href=&quot;http://www.cs.siue.edu/~astefik/papers/StefikPlateau2011.pdf&quot; rel=&quot;nofollow&quot;&gt;Perl versus Random Syntax&lt;/a&gt;.  

As for Smalltalk, I just follow &lt;a href=&quot;http://en.wikipedia.org/wiki/Smalltalk&quot; rel=&quot;nofollow&quot;&gt;Wikipedia&lt;/a&gt; ... why do they do it that way?</description>
		<content:encoded><![CDATA[<p>Hi James,</p>
<p>I never got taught greek letters at school (well, other whan pi)!</p>
<p>As for research, well there&#8217;s that paper on <a href="http://www.cs.siue.edu/~astefik/papers/StefikPlateau2011.pdf" rel="nofollow">Perl versus Random Syntax</a>.  </p>
<p>As for Smalltalk, I just follow <a href="http://en.wikipedia.org/wiki/Smalltalk" rel="nofollow">Wikipedia</a> &#8230; why do they do it that way?</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by James</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1893</link>
		<dc:creator>James</dc:creator>
		<pubDate>Wed, 11 Jan 2012 06:41:26 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1893</guid>
		<description>We&#039;re taught all kinds of things at school - overbars, different sized parentheses, single Greek 
characters as variable names - many of which aren&#039;t great in programming languages (well other than Fortress). 

Not sure if there&#039;s any research on this (would be relatively easy to check) but I think best practice is probably to parenthesize if there is any room for ambiguity.  That&#039;s why Self, for example, has no operator precedence - if you&#039;ve more than one, parenthesize. 

(and you&#039;re still misspelling Smalltalk)</description>
		<content:encoded><![CDATA[<p>We&#8217;re taught all kinds of things at school &#8211; overbars, different sized parentheses, single Greek<br />
characters as variable names &#8211; many of which aren&#8217;t great in programming languages (well other than Fortress). </p>
<p>Not sure if there&#8217;s any research on this (would be relatively easy to check) but I think best practice is probably to parenthesize if there is any room for ambiguity.  That&#8217;s why Self, for example, has no operator precedence &#8211; if you&#8217;ve more than one, parenthesize. </p>
<p>(and you&#8217;re still misspelling Smalltalk)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Daniel Lyons</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1892</link>
		<dc:creator>Daniel Lyons</dc:creator>
		<pubDate>Wed, 11 Jan 2012 05:55:37 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1892</guid>
		<description>I have found that Haskell and ML&#039;s function call syntax helps make unorthodox usages of higher order functions a bit more intuitive. Particularly in Haskell, where (say) a function such as &lt;code&gt;distance :: Point -&gt; Point -&gt; Length&lt;/code&gt; is probably perceived by the writer as taking two arguments and returning the distance, it&#039;s equally useful in situations such as &lt;code&gt;map (ditsance origin) interestingPoints&lt;/code&gt; where it&#039;s being treated as a function that generates a distance-from-x function for some x, in this case, the origin.

I think it&#039;s good to have generalized principles like you have to guide language development, but every language designer must inevitably come down on the side of personal aesthetics at some point. For example, one of the major syntactic differentiators between Ruby and Python is that Ruby obeys the uniform access principle and Python does not. The argument for this principle is that you don&#039;t want clients of your object to care whether a query is implemented as a property or a function; you should be able to switch implementations in the future without breaking your object&#039;s contract (the origin of this, AFAIK, is Bertrand Meyer&#039;s &lt;i&gt;Object-Oriented Software Construction&lt;/i&gt;). One ramification of this is that in Ruby it is not possible to pass a function by name to another function; you must instead create a closure with a block. Ruby happens to include other syntactic support that makes this easy or automatic, but it&#039;s a contrast to Python, where names always refer to some object and not some computation, and function calls are usually discernable from property access by the presence or absence of parentheses. There are now ways of working around this for the purpose of providing methods that are invoked at property accesses instead of reading properties on objects, but this was a late addition to the language and is about as clean and easy as passing a function by name to another function in Ruby.

The point I&#039;m making is that neither of these answers is &quot;correct&quot; in absolute terms. I could argue that Ruby&#039;s method is concise and informative to humans in the general case, but I could also argue that Python&#039;s decision conforms (saying &#039;foo&#039; when you have a function defined by that name refers to the function, not the result of invoking it). Good languages will certainly fulfill these guidelines, but they will do so only within their self-defined context, and comparison across languages is (in general) fruitless.</description>
		<content:encoded><![CDATA[<p>I have found that Haskell and ML&#8217;s function call syntax helps make unorthodox usages of higher order functions a bit more intuitive. Particularly in Haskell, where (say) a function such as <code>distance :: Point -&gt; Point -&gt; Length</code> is probably perceived by the writer as taking two arguments and returning the distance, it&#8217;s equally useful in situations such as <code>map (ditsance origin) interestingPoints</code> where it&#8217;s being treated as a function that generates a distance-from-x function for some x, in this case, the origin.</p>
<p>I think it&#8217;s good to have generalized principles like you have to guide language development, but every language designer must inevitably come down on the side of personal aesthetics at some point. For example, one of the major syntactic differentiators between Ruby and Python is that Ruby obeys the uniform access principle and Python does not. The argument for this principle is that you don&#8217;t want clients of your object to care whether a query is implemented as a property or a function; you should be able to switch implementations in the future without breaking your object&#8217;s contract (the origin of this, AFAIK, is Bertrand Meyer&#8217;s <i>Object-Oriented Software Construction</i>). One ramification of this is that in Ruby it is not possible to pass a function by name to another function; you must instead create a closure with a block. Ruby happens to include other syntactic support that makes this easy or automatic, but it&#8217;s a contrast to Python, where names always refer to some object and not some computation, and function calls are usually discernable from property access by the presence or absence of parentheses. There are now ways of working around this for the purpose of providing methods that are invoked at property accesses instead of reading properties on objects, but this was a late addition to the language and is about as clean and easy as passing a function by name to another function in Ruby.</p>
<p>The point I&#8217;m making is that neither of these answers is &#8220;correct&#8221; in absolute terms. I could argue that Ruby&#8217;s method is concise and informative to humans in the general case, but I could also argue that Python&#8217;s decision conforms (saying &#8216;foo&#8217; when you have a function defined by that name refers to the function, not the result of invoking it). Good languages will certainly fulfill these guidelines, but they will do so only within their self-defined context, and comparison across languages is (in general) fruitless.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Sebastian</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1891</link>
		<dc:creator>Sebastian</dc:creator>
		<pubDate>Wed, 11 Jan 2012 05:43:04 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1891</guid>
		<description>Currying isn&#039;t about delaying computation, it&#039;s about partially applying funcitons. Regardless, it&#039;s irrelevant to the discussion of syntax.

*Any* operation that is non-associative would require parenthesis to specify order. In this case, either you add a separator between every argument, or parenthesis around every application, or you require people to explicitly group applications when they&#039;re passed as an argument to other functions.

Also, my argument about colons for types isn&#039;t about simplifying it for compilers, but to simplify it for readers of the code, as opposed to writers. I don&#039;t care that the C++ syntax is context-dependent and ambiguous for the sake of the compiler reader, I care because it slows me down when I try to read C++ code. Adding a few carefully chosen symbols to make things easier to parse (by human readers, and compilers) is perfectly sensible.</description>
		<content:encoded><![CDATA[<p>Currying isn&#8217;t about delaying computation, it&#8217;s about partially applying funcitons. Regardless, it&#8217;s irrelevant to the discussion of syntax.</p>
<p>*Any* operation that is non-associative would require parenthesis to specify order. In this case, either you add a separator between every argument, or parenthesis around every application, or you require people to explicitly group applications when they&#8217;re passed as an argument to other functions.</p>
<p>Also, my argument about colons for types isn&#8217;t about simplifying it for compilers, but to simplify it for readers of the code, as opposed to writers. I don&#8217;t care that the C++ syntax is context-dependent and ambiguous for the sake of the compiler reader, I care because it slows me down when I try to read C++ code. Adding a few carefully chosen symbols to make things easier to parse (by human readers, and compilers) is perfectly sensible.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Tim</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1890</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Wed, 11 Jan 2012 05:42:45 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1890</guid>
		<description>And you can do that if you really want.

&lt;code&gt;(f . g) h 1 2&lt;/code&gt;

You just need to compose it first to produce the right function. (Note that you still need parens because application binds tighter than any operator).</description>
		<content:encoded><![CDATA[<p>And you can do that if you really want.</p>
<p><code>(f . g) h 1 2</code></p>
<p>You just need to compose it first to produce the right function. (Note that you still need parens because application binds tighter than any operator).</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Dave</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1889</link>
		<dc:creator>Dave</dc:creator>
		<pubDate>Wed, 11 Jan 2012 05:35:12 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1889</guid>
		<description>Hmmm, I disagree.  Currying is about delaying computation.  That is, taking an argument and not evaluating the function, but producing partially evaluated result.  So, it makes sense to me that in &lt;code&gt;f g h 1 2&lt;/code&gt;, you can &quot;curry&quot; on &lt;code&gt;g&lt;/code&gt; producing a new kind of function which, by coincidence, accepts the same arguments.  

A more general example:

f : T1 -&gt; T2
g : T3 -&gt; T1

then (f g) : T3 -&gt; T2

... it&#039;s function composition!</description>
		<content:encoded><![CDATA[<p>Hmmm, I disagree.  Currying is about delaying computation.  That is, taking an argument and not evaluating the function, but producing partially evaluated result.  So, it makes sense to me that in <code>f g h 1 2</code>, you can &#8220;curry&#8221; on <code>g</code> producing a new kind of function which, by coincidence, accepts the same arguments.  </p>
<p>A more general example:</p>
<p>f : T1 -> T2<br />
g : T3 -> T1</p>
<p>then (f g) : T3 -> T2</p>
<p>&#8230; it&#8217;s function composition!</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Three Rules for Programming Language Syntax? by Sebastian</title>
		<link>http://whiley.org/2012/01/11/three-rules-for-programming-language-syntax/comment-page-1/#comment-1888</link>
		<dc:creator>Sebastian</dc:creator>
		<pubDate>Wed, 11 Jan 2012 05:31:17 +0000</pubDate>
		<guid isPermaLink="false">http://whiley.org/?p=3455#comment-1888</guid>
		<description>It&#039;s not non-uniform, it&#039;s just normal grouping like you&#039;d do in any other mathematics context with non-associative operations (in this case, function application).</description>
		<content:encoded><![CDATA[<p>It&#8217;s not non-uniform, it&#8217;s just normal grouping like you&#8217;d do in any other mathematics context with non-associative operations (in this case, function application).</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.528 seconds -->

