<?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"
	>
<channel>
	<title>Comments on: High Level Languages</title>
	<atom:link href="http://blog.tmorris.net/high-level-languages/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.tmorris.net/high-level-languages/</link>
	<description>The weblog of Tony Morris</description>
	<pubDate>Fri, 05 Dec 2008 08:24:11 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6</generator>
		<item>
		<title>By: Niklas Matthies</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1578</link>
		<dc:creator>Niklas Matthies</dc:creator>
		<pubDate>Sat, 18 Aug 2007 00:27:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1578</guid>
		<description>With regard to C/C++, what Pierce is saying here doesn't really hold. C and C++, despite being "low-level" (no debate about that) just define certain implicit (and certain explicit) conversions between values of certain types. But they don't identify them with each other. For example, while 0 and false implicitly convert into each other, the result of accessing an int variable holding the value 0 through an expression of type pointer-to-bool is undefined. Meaning that C/C++ implementations are allowed to throw a type error, for example. Even if the bit pattern happens to be the same.</description>
		<content:encoded><![CDATA[<p>With regard to C/C++, what Pierce is saying here doesn&#8217;t really hold. C and C++, despite being &#8220;low-level&#8221; (no debate about that) just define certain implicit (and certain explicit) conversions between values of certain types. But they don&#8217;t identify them with each other. For example, while 0 and false implicitly convert into each other, the result of accessing an int variable holding the value 0 through an expression of type pointer-to-bool is undefined. Meaning that C/C++ implementations are allowed to throw a type error, for example. Even if the bit pattern happens to be the same.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John "Z-Bo" Zabroski</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1577</link>
		<dc:creator>John "Z-Bo" Zabroski</dc:creator>
		<pubDate>Thu, 26 Jul 2007 05:19:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1577</guid>
		<description>Think about what I said instead, unless you are smiling because you agree (but I get the sense that we might still be inadvertently talking past each other).

Also, although a fold is not a control structure in the traditional sense, like the categories described by Niklas Wirth, it is a control structure with very precise and unambiguous meaning.  Keep in mind Wirth was describing the minimum amount of control abstraction necessary.

Truly great advances in program architecture seem to occur because people are thinking about data flow, instead of merely data structures and especially instead of merely algorithms.  Consider Wirth's book Algorithms + Data Structures = Programs.  He put the "Algorithms" part first, reflecting an emphasis on algorithms.  Lately, we have reversed the phrase to say Data Structures &#38;#38; Algorithms, because the structure can determine the algorithms you implement.  However, what really makes sense is to model the data flow and go from there.</description>
		<content:encoded><![CDATA[<p>Think about what I said instead, unless you are smiling because you agree (but I get the sense that we might still be inadvertently talking past each other).</p>
<p>Also, although a fold is not a control structure in the traditional sense, like the categories described by Niklas Wirth, it is a control structure with very precise and unambiguous meaning.  Keep in mind Wirth was describing the minimum amount of control abstraction necessary.</p>
<p>Truly great advances in program architecture seem to occur because people are thinking about data flow, instead of merely data structures and especially instead of merely algorithms.  Consider Wirth&#8217;s book Algorithms + Data Structures = Programs.  He put the &#8220;Algorithms&#8221; part first, reflecting an emphasis on algorithms.  Lately, we have reversed the phrase to say Data Structures &#38;#38; Algorithms, because the structure can determine the algorithms you implement.  However, what really makes sense is to model the data flow and go from there.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Porges</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1576</link>
		<dc:creator>Porges</dc:creator>
		<pubDate>Thu, 26 Jul 2007 05:02:19 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1576</guid>
		<description>&#38;gt;I usually associate precise control structures with imperative
&#38;gt;expressiveness. foldl and foldr in Haskell are excellent examples of
&#38;gt;precise control structures.

Wuuuuurht?</description>
		<content:encoded><![CDATA[<p>&#38;gt;I usually associate precise control structures with imperative<br />
&#38;gt;expressiveness. foldl and foldr in Haskell are excellent examples of<br />
&#38;gt;precise control structures.</p>
<p>Wuuuuurht?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1575</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Thu, 26 Jul 2007 04:47:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1575</guid>
		<description>I think it is best to just smile and nod at this point :)</description>
		<content:encoded><![CDATA[<p>I think it is best to just smile and nod at this point <img src='http://blog.tmorris.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John "Z-Bo" Zabroski</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1574</link>
		<dc:creator>John "Z-Bo" Zabroski</dc:creator>
		<pubDate>Thu, 26 Jul 2007 04:02:58 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1574</guid>
		<description>Just to sum this up in case I didn't hit a home run there...

The first rule of programming is 'Figure out what you want to say before you figure out how to say it'.  Talking down to imperative programming by making it a category within functional programming is incorrect. It treats imperative knowledge like it is part of the implementation, when it is more likely an artefact of the design requirements of the software you are building.  Similarly, identifying declarative knowledge belongs in the phase of software development before implementation.

The ability to translate declarative knowledge and imperative knowledge into programmatic statements necessarily falls under control of the language and the skill of the programmer.  Many people feel it's important to make this separation apparent, with the belief that it contributes to quality assurance.

For this reason, pointing me to some Haskell examples does not mean much to me.  I usually (not always) know when I am unnecessarily conflating different control structures in my implementation language, and when I can easily express an imperative thought because there is a convenient mechanism in the language to do so.  At the same time, because I have this knowledge, I can usually (not always) translate the design requirements to any language.</description>
		<content:encoded><![CDATA[<p>Just to sum this up in case I didn&#8217;t hit a home run there&#8230;</p>
<p>The first rule of programming is &#8216;Figure out what you want to say before you figure out how to say it&#8217;.  Talking down to imperative programming by making it a category within functional programming is incorrect. It treats imperative knowledge like it is part of the implementation, when it is more likely an artefact of the design requirements of the software you are building.  Similarly, identifying declarative knowledge belongs in the phase of software development before implementation.</p>
<p>The ability to translate declarative knowledge and imperative knowledge into programmatic statements necessarily falls under control of the language and the skill of the programmer.  Many people feel it&#8217;s important to make this separation apparent, with the belief that it contributes to quality assurance.</p>
<p>For this reason, pointing me to some Haskell examples does not mean much to me.  I usually (not always) know when I am unnecessarily conflating different control structures in my implementation language, and when I can easily express an imperative thought because there is a convenient mechanism in the language to do so.  At the same time, because I have this knowledge, I can usually (not always) translate the design requirements to any language.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John "Z-Bo" Zabroski</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1573</link>
		<dc:creator>John "Z-Bo" Zabroski</dc:creator>
		<pubDate>Thu, 26 Jul 2007 03:41:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1573</guid>
		<description>I don't care what nouns are my friend or foe.  I care about correct arguments.

Note that you said: "Note that all functional programming languages support imperative programming, since imperative programming is just a special type of functional programming."  This is an awkward statement.  If imperative programming is a subset of a functional paradigm, then it is not certain that all functional programming languages support imperative programming.  In other words, you are making an unsupported statement.

However, I think that the issue here is we are inadvertently talking past each other.  If you only wish to say that you can express imperative knowledge in a functional program, then you are correct.  However, procedural languages can do this too.  That is why I huffed at the suggestion imperative programming is "just" a special type of functional programming.  It's more accurate to say that imperative thoughts can be expressed in a functional paradigm... as well as a procedural or even object-oriented paradigm.

Look at it this way: knowing what to believe without ever being able to grok how-to is an incomplete paradigm.  Categorizing a scientific paradigm in such a way to suggest that you can't convey certain knowledge types is an ill-defined paradigm.  Being able to define various kinds of knowledge is just better science.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t care what nouns are my friend or foe.  I care about correct arguments.</p>
<p>Note that you said: &#8220;Note that all functional programming languages support imperative programming, since imperative programming is just a special type of functional programming.&#8221;  This is an awkward statement.  If imperative programming is a subset of a functional paradigm, then it is not certain that all functional programming languages support imperative programming.  In other words, you are making an unsupported statement.</p>
<p>However, I think that the issue here is we are inadvertently talking past each other.  If you only wish to say that you can express imperative knowledge in a functional program, then you are correct.  However, procedural languages can do this too.  That is why I huffed at the suggestion imperative programming is &#8220;just&#8221; a special type of functional programming.  It&#8217;s more accurate to say that imperative thoughts can be expressed in a functional paradigm&#8230; as well as a procedural or even object-oriented paradigm.</p>
<p>Look at it this way: knowing what to believe without ever being able to grok how-to is an incomplete paradigm.  Categorizing a scientific paradigm in such a way to suggest that you can&#8217;t convey certain knowledge types is an ill-defined paradigm.  Being able to define various kinds of knowledge is just better science.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1572</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Wed, 25 Jul 2007 05:38:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1572</guid>
		<description>&#38;gt; Imperative programming is not just a special type of functional programming. This is untrue.

I'd like to correct this statement.

It is indeed true. One possible correction is, "This is not initially obvious to most intuitions".

Next time you use Haskell, put *everything* inside IO and use IORef to emulate in-place updates i.e. imperative programming; the specific type of functional programming. Equational Reasoning is your friend ;)</description>
		<content:encoded><![CDATA[<p>&#38;gt; Imperative programming is not just a special type of functional programming. This is untrue.</p>
<p>I&#8217;d like to correct this statement.</p>
<p>It is indeed true. One possible correction is, &#8220;This is not initially obvious to most intuitions&#8221;.</p>
<p>Next time you use Haskell, put *everything* inside IO and use IORef to emulate in-place updates i.e. imperative programming; the specific type of functional programming. Equational Reasoning is your friend <img src='http://blog.tmorris.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: John "Z-Bo" Zabroski</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1571</link>
		<dc:creator>John "Z-Bo" Zabroski</dc:creator>
		<pubDate>Wed, 25 Jul 2007 04:01:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1571</guid>
		<description>Imperative programming is not just a special type of functional programming.  This is untrue.

First, imperative knowledge generally describes "how to".  This is consistently how it is described in various CS disciplines.

In Expert Systems theory, imperative rules tell the knowledge system "how to" behave.  A related declarative rule would tell the knowledge system what it could believe, but would leave how unspecified.  (Most knowledge systems have rulesets that combine imperative and declarative knowledge, but also might include exclamatory knowledge and interrogative knowledge.)

In Programming Languages theory, imperative statements describe how the program will do something.

Second, a functional program can have a high degree of imperative expressiveness.  I usually associate precise control structures with imperative expressiveness.  foldl and foldr in Haskell are excellent examples of precise control structures.  However, "expressiveness" is such a qualitative term that someone could view imprecise control structures like basic loops as more expressive because they are so adaptable.

Third, declarative expressiveness should be our goal when programming complex systems: Program to an interface, not an implementation.

Fourth, Google has a "Note It" feature on search results.  If you find a PDF that is really good, then "Note It".  You will come to love this feature, because you will never misplace a journal article again.</description>
		<content:encoded><![CDATA[<p>Imperative programming is not just a special type of functional programming.  This is untrue.</p>
<p>First, imperative knowledge generally describes &#8220;how to&#8221;.  This is consistently how it is described in various CS disciplines.</p>
<p>In Expert Systems theory, imperative rules tell the knowledge system &#8220;how to&#8221; behave.  A related declarative rule would tell the knowledge system what it could believe, but would leave how unspecified.  (Most knowledge systems have rulesets that combine imperative and declarative knowledge, but also might include exclamatory knowledge and interrogative knowledge.)</p>
<p>In Programming Languages theory, imperative statements describe how the program will do something.</p>
<p>Second, a functional program can have a high degree of imperative expressiveness.  I usually associate precise control structures with imperative expressiveness.  foldl and foldr in Haskell are excellent examples of precise control structures.  However, &#8220;expressiveness&#8221; is such a qualitative term that someone could view imprecise control structures like basic loops as more expressive because they are so adaptable.</p>
<p>Third, declarative expressiveness should be our goal when programming complex systems: Program to an interface, not an implementation.</p>
<p>Fourth, Google has a &#8220;Note It&#8221; feature on search results.  If you find a PDF that is really good, then &#8220;Note It&#8221;.  You will come to love this feature, because you will never misplace a journal article again.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1570</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Tue, 24 Jul 2007 09:09:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1570</guid>
		<description>Er, correction after a reread.

Yes, I am possibly rephrasing the infamous Blub paradox.

However, Lisp does have a type system, just not a very good one (hence, it is quite low on the Blub spectrum itself). Note that all functional programming languages support imperative programming, since imperative programming is just a special type of functional programming.

I've been searching for the paper that helps support this point, since it was so good, that I forgot the name (and therefore, I am struggling to bring it up in Google). If anyone can point me to it, I'd most appreciate it! It was something about reasoning about imperative programs as referentially transparent functions.</description>
		<content:encoded><![CDATA[<p>Er, correction after a reread.</p>
<p>Yes, I am possibly rephrasing the infamous Blub paradox.</p>
<p>However, Lisp does have a type system, just not a very good one (hence, it is quite low on the Blub spectrum itself). Note that all functional programming languages support imperative programming, since imperative programming is just a special type of functional programming.</p>
<p>I&#8217;ve been searching for the paper that helps support this point, since it was so good, that I forgot the name (and therefore, I am struggling to bring it up in Google). If anyone can point me to it, I&#8217;d most appreciate it! It was something about reasoning about imperative programs as referentially transparent functions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tony Morris</title>
		<link>http://blog.tmorris.net/high-level-languages/#comment-1569</link>
		<dc:creator>Tony Morris</dc:creator>
		<pubDate>Tue, 24 Jul 2007 05:25:18 +0000</pubDate>
		<guid isPermaLink="false">http://blog.tmorris.net/high-level-languages/#comment-1569</guid>
		<description>Lisp has a type system built in, just not a very good one.

Therefore, no.</description>
		<content:encoded><![CDATA[<p>Lisp has a type system built in, just not a very good one.</p>
<p>Therefore, no.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
