<?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:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
		>
<channel>
	<title>Comments on: Dynamic languages are static languages</title>
	<atom:link href="http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/feed/" rel="self" type="application/rss+xml" />
	<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/</link>
	<description>Abstract types are existential types.</description>
	<lastBuildDate>Tue, 29 Jan 2013 15:10:50 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
	<item>
		<title>By: johnwcowan</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-199</link>
		<dc:creator><![CDATA[johnwcowan]]></dc:creator>
		<pubDate>Mon, 28 Mar 2011 04:10:21 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-199</guid>
		<description><![CDATA[&lt;i&gt;From the practical POV, however, languages restricted to a unitype may be easier to use for some tasks (serialization etc.) than languages with limited type composition capabilities like C.&lt;/i&gt;

Just so.  As I said, given the choice between static types without dynamic types and dynamic types without static types, I unhesitatingly affirm my preference for the ape, er, latter.]]></description>
		<content:encoded><![CDATA[<p><i>From the practical POV, however, languages restricted to a unitype may be easier to use for some tasks (serialization etc.) than languages with limited type composition capabilities like C.</i></p>
<p>Just so.  As I said, given the choice between static types without dynamic types and dynamic types without static types, I unhesitatingly affirm my preference for the ape, er, latter.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mihaibalint</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-186</link>
		<dc:creator><![CDATA[mihaibalint]]></dc:creator>
		<pubDate>Sun, 27 Mar 2011 13:15:28 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-186</guid>
		<description><![CDATA[Here is an engineering view on dynamic language popularity: It facilitates that good old favorite reuse technique of the software industry: copy-paste programming. It&#039;s immediate, it lets the boss know that the programmer produced something and &quot;the app&quot; works, right now!

Sure, they could do proper reuse with creating abstractions, interfaces, design, bla, bla, but that requires effort and time which means that &quot;the app&quot; might only work tomorrow, which is not good because we need to ship yesterday. Oh and let&#039;s not forget that good abstractions and interfaces require a better trained/more experienced/talented developer (more expensive, less replaceable, higher risk). So in the short term, it makes perfect business sense to &quot;go dynamic&quot;, and nowadays, nobody plans farther than the next quarterly shareholder meeting.]]></description>
		<content:encoded><![CDATA[<p>Here is an engineering view on dynamic language popularity: It facilitates that good old favorite reuse technique of the software industry: copy-paste programming. It&#8217;s immediate, it lets the boss know that the programmer produced something and &#8220;the app&#8221; works, right now!</p>
<p>Sure, they could do proper reuse with creating abstractions, interfaces, design, bla, bla, but that requires effort and time which means that &#8220;the app&#8221; might only work tomorrow, which is not good because we need to ship yesterday. Oh and let&#8217;s not forget that good abstractions and interfaces require a better trained/more experienced/talented developer (more expensive, less replaceable, higher risk). So in the short term, it makes perfect business sense to &#8220;go dynamic&#8221;, and nowadays, nobody plans farther than the next quarterly shareholder meeting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: pbazant</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-185</link>
		<dc:creator><![CDATA[pbazant]]></dc:creator>
		<pubDate>Sun, 27 Mar 2011 13:03:52 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-185</guid>
		<description><![CDATA[A physicist&#039;s view:
I didn&#039;t realize the fact that dynamic typing is just a very special case of static typing until about three years ago. Of course I had been aware that one can, in principle, implement C++ in Python and vice versa, so the distinction cannot be fundamental, but then I read an article about sum types and realized that the distinction actually doesn&#039;t exist. No rant intended, but I think using C (sum types not possible) or C++ (maybe possible, but not standardized) hinders proper understanding of those issues. From the practical POV, however, languages restricted to a unitype may be easier to use for some tasks (serialization etc.) than languages with limited type composition capabilities like C. Interoperation of richly typed and unityped code is still very problematic today. However, the reason is not fundamental, but historical. IMHO, a properly designed language with rich first class types+type pattern matching+dynamic compilation can achieve the flexibility of dynamic languages and speed of C simultaneously, with all the benefits of a rich type system.]]></description>
		<content:encoded><![CDATA[<p>A physicist&#8217;s view:<br />
I didn&#8217;t realize the fact that dynamic typing is just a very special case of static typing until about three years ago. Of course I had been aware that one can, in principle, implement C++ in Python and vice versa, so the distinction cannot be fundamental, but then I read an article about sum types and realized that the distinction actually doesn&#8217;t exist. No rant intended, but I think using C (sum types not possible) or C++ (maybe possible, but not standardized) hinders proper understanding of those issues. From the practical POV, however, languages restricted to a unitype may be easier to use for some tasks (serialization etc.) than languages with limited type composition capabilities like C. Interoperation of richly typed and unityped code is still very problematic today. However, the reason is not fundamental, but historical. IMHO, a properly designed language with rich first class types+type pattern matching+dynamic compilation can achieve the flexibility of dynamic languages and speed of C simultaneously, with all the benefits of a rich type system.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: mihaibalint</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-184</link>
		<dc:creator><![CDATA[mihaibalint]]></dc:creator>
		<pubDate>Sun, 27 Mar 2011 12:32:37 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-184</guid>
		<description><![CDATA[Quote: 

&quot;Changing the library to accommodate the bug was another possibility, but a truly unpleasant one.&quot; ... bla ... &quot;so we made the new version of the library detect the presence of the buggy class&quot;

So, you went with the unpleasant solution, what&#039;s your point in favor of dynamic languages again? Oh, it&#039;s the Java and C/C++ don&#039;t allow hot-swapping of library methods, well for your particular use-case I think even old Java could hot-swap. In general I don&#039;t see why statically typed languages could not do that.]]></description>
		<content:encoded><![CDATA[<p>Quote: </p>
<p>&#8220;Changing the library to accommodate the bug was another possibility, but a truly unpleasant one.&#8221; &#8230; bla &#8230; &#8220;so we made the new version of the library detect the presence of the buggy class&#8221;</p>
<p>So, you went with the unpleasant solution, what&#8217;s your point in favor of dynamic languages again? Oh, it&#8217;s the Java and C/C++ don&#8217;t allow hot-swapping of library methods, well for your particular use-case I think even old Java could hot-swap. In general I don&#8217;t see why statically typed languages could not do that.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Andreas Rossberg</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-134</link>
		<dc:creator><![CDATA[Andreas Rossberg]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 07:38:31 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-134</guid>
		<description><![CDATA[@Igor:
Testing can prove the presence, not the absence of bugs. (Edgar Dijkstra)

@millstone2:
If I link against a library by someone who chose to ignore those warnings then my own program is broken without me getting any diagnostics.

Re generic proxies: all you need is either a typecase or a type dynamic - both can be supplied without breaking the type system.]]></description>
		<content:encoded><![CDATA[<p>@Igor:<br />
Testing can prove the presence, not the absence of bugs. (Edgar Dijkstra)</p>
<p>@millstone2:<br />
If I link against a library by someone who chose to ignore those warnings then my own program is broken without me getting any diagnostics.</p>
<p>Re generic proxies: all you need is either a typecase or a type dynamic &#8211; both can be supplied without breaking the type system.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Scott Kilpatrick</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-133</link>
		<dc:creator><![CDATA[Scott Kilpatrick]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 07:36:54 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-133</guid>
		<description><![CDATA[&quot;This has real practical implications, e.g. if you change some type in your Haskell code, you have to fix every use of that type before you can test anything. Surely you’ve found that annoying?&quot;

This is one of the reasons I *prefer* static languages and real type systems.]]></description>
		<content:encoded><![CDATA[<p>&#8220;This has real practical implications, e.g. if you change some type in your Haskell code, you have to fix every use of that type before you can test anything. Surely you’ve found that annoying?&#8221;</p>
<p>This is one of the reasons I *prefer* static languages and real type systems.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: millstone2</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-130</link>
		<dc:creator><![CDATA[millstone2]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 04:05:06 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-130</guid>
		<description><![CDATA[Here is an example of how dynamic languages saved the day, where a static language could not.

We ship a library which contains a hash table class used by many client applications.  While testing the next version of the library, we found that it revealed a latent bug in a high-profile client app: two equal objects could have different hash values, leading to data loss.  Bad news!

The client app had already shipped to customers, all of whom would be unhappy if we released the library.  We could try to get those customers to update the app, but it would have been expensive and inevitably some customers would not update in time.  Changing the library to accommodate the bug was another possibility, but a truly unpleasant one.

Fortunately the library and client app were both written in a dynamic language, so we made the new version of the library detect the presence of the buggy class.  If it finds it, it reaches in and outright replaces its hash method with a corrected one.  Problem solved!

Note that this had nothing to do with type checking (though we could have dynamically introduced a type error if we chose, casting doubt on the whole notion of a &quot;provable static type system&quot;).  Instead it&#039;s all about the compiler permitting static information to be wrong.  If the compiler assumed that the object&#039;s hash function at compile time would not change at runtime (say, by inlining it), this fix would have been  much harder.  But dynamic languages made it simple!]]></description>
		<content:encoded><![CDATA[<p>Here is an example of how dynamic languages saved the day, where a static language could not.</p>
<p>We ship a library which contains a hash table class used by many client applications.  While testing the next version of the library, we found that it revealed a latent bug in a high-profile client app: two equal objects could have different hash values, leading to data loss.  Bad news!</p>
<p>The client app had already shipped to customers, all of whom would be unhappy if we released the library.  We could try to get those customers to update the app, but it would have been expensive and inevitably some customers would not update in time.  Changing the library to accommodate the bug was another possibility, but a truly unpleasant one.</p>
<p>Fortunately the library and client app were both written in a dynamic language, so we made the new version of the library detect the presence of the buggy class.  If it finds it, it reaches in and outright replaces its hash method with a corrected one.  Problem solved!</p>
<p>Note that this had nothing to do with type checking (though we could have dynamically introduced a type error if we chose, casting doubt on the whole notion of a &#8220;provable static type system&#8221;).  Instead it&#8217;s all about the compiler permitting static information to be wrong.  If the compiler assumed that the object&#8217;s hash function at compile time would not change at runtime (say, by inlining it), this fix would have been  much harder.  But dynamic languages made it simple!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: millstone2</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-129</link>
		<dc:creator><![CDATA[millstone2]]></dc:creator>
		<pubDate>Thu, 24 Mar 2011 03:00:05 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-129</guid>
		<description><![CDATA[A static type system is unsound only if the compiler accepts type errors without a diagnostic.  Both dynamic and static languages may have sound static type systems.  The key difference is that in a dynamic language, the diagnostic can be a warning, while in a static language, the diagnostic is necessarily a fatal error.

This has real practical implications, e.g. if you change some type in your Haskell code, you have to fix every use of that type before you can test anything.  Surely you&#039;ve found that annoying?  Dynamic languages permit interleaved fixing and testing.

Generic transparent remoting really is not possible to support in a static language.  For example, see how Microsoft went about adding the [TransparentProxy class to C#](http://blogs.msdn.com/b/cbrumme/archive/2003/07/14/51495.aspx), which required significant changes to the compiler and runtime.  In every case where the compiler emits a method call, it has to construct a special stub that considers the possibility that the receiver could be a TransparentProxy.  In short, they were forced to tack on some limited dynamicism to the runtime to support remoting (and note the consequence: compile time types are now permitted to be wrong).

Had C# been a real dynamic language, this remoting could have been implemented entirely in a library, without requiring compiler or runtime modifications.  That&#039;s the strength of dynamic languages.]]></description>
		<content:encoded><![CDATA[<p>A static type system is unsound only if the compiler accepts type errors without a diagnostic.  Both dynamic and static languages may have sound static type systems.  The key difference is that in a dynamic language, the diagnostic can be a warning, while in a static language, the diagnostic is necessarily a fatal error.</p>
<p>This has real practical implications, e.g. if you change some type in your Haskell code, you have to fix every use of that type before you can test anything.  Surely you&#8217;ve found that annoying?  Dynamic languages permit interleaved fixing and testing.</p>
<p>Generic transparent remoting really is not possible to support in a static language.  For example, see how Microsoft went about adding the [TransparentProxy class to C#](<a href="http://blogs.msdn.com/b/cbrumme/archive/2003/07/14/51495.aspx" rel="nofollow">http://blogs.msdn.com/b/cbrumme/archive/2003/07/14/51495.aspx</a>), which required significant changes to the compiler and runtime.  In every case where the compiler emits a method call, it has to construct a special stub that considers the possibility that the receiver could be a TransparentProxy.  In short, they were forced to tack on some limited dynamicism to the runtime to support remoting (and note the consequence: compile time types are now permitted to be wrong).</p>
<p>Had C# been a real dynamic language, this remoting could have been implemented entirely in a library, without requiring compiler or runtime modifications.  That&#8217;s the strength of dynamic languages.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: johnzabroski</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-128</link>
		<dc:creator><![CDATA[johnzabroski]]></dc:creator>
		<pubDate>Wed, 23 Mar 2011 22:59:23 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-128</guid>
		<description><![CDATA[Igor,

Many functional languages support interactive programming trivially, due to the fact that most if not all computation is pure.  That being said, not all functional languages are equal in how long it takes the interactive session to resolve changes or how well they can handle changes without requiring a &quot;reload&quot; command.

Changing behavior at run-time isn&#039;t even that particularly wild of a party trick.  It also might not be the best way to describe what the &quot;dynamic&quot; program is doing; maybe what you are really trying to do is achieve an equilibrium state and abusing dynamic languages to achieve that goal?  If so, why not spell out the goal state and let the runtime figure it out for you?  Don&#039;t you just love systems you can deploy and walk away from and not have to get paged into the office at 3am to fix, because you&#039;ve proved they work?]]></description>
		<content:encoded><![CDATA[<p>Igor,</p>
<p>Many functional languages support interactive programming trivially, due to the fact that most if not all computation is pure.  That being said, not all functional languages are equal in how long it takes the interactive session to resolve changes or how well they can handle changes without requiring a &#8220;reload&#8221; command.</p>
<p>Changing behavior at run-time isn&#8217;t even that particularly wild of a party trick.  It also might not be the best way to describe what the &#8220;dynamic&#8221; program is doing; maybe what you are really trying to do is achieve an equilibrium state and abusing dynamic languages to achieve that goal?  If so, why not spell out the goal state and let the runtime figure it out for you?  Don&#8217;t you just love systems you can deploy and walk away from and not have to get paged into the office at 3am to fix, because you&#8217;ve proved they work?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Igor Stasenko</title>
		<link>http://existentialtype.wordpress.com/2011/03/19/dynamic-languages-are-static-languages/#comment-127</link>
		<dc:creator><![CDATA[Igor Stasenko]]></dc:creator>
		<pubDate>Wed, 23 Mar 2011 22:27:18 +0000</pubDate>
		<guid isPermaLink="false">http://existentialtype.wordpress.com/?p=64#comment-127</guid>
		<description><![CDATA[Ever heard about Test-Driven Development?
Here&#039;s the proof: if your tests are not failing, therefore program works correctly.

And it think that author miss the point. Dynamic languages are called dynamic, not because of absence of static types, but because you can change the program behavior at run time, without need to do full world stop, and run compiler to do some static-type analysis for you.]]></description>
		<content:encoded><![CDATA[<p>Ever heard about Test-Driven Development?<br />
Here&#8217;s the proof: if your tests are not failing, therefore program works correctly.</p>
<p>And it think that author miss the point. Dynamic languages are called dynamic, not because of absence of static types, but because you can change the program behavior at run time, without need to do full world stop, and run compiler to do some static-type analysis for you.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
