<?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 on: Drexler Blogs!</title>
	<atom:link href="http://www.overcomingbias.com/2008/12/drexler-blogs.html/feed" rel="self" type="application/rss+xml" />
	<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html</link>
	<description>Overcoming Bias is economist Robin Hanson’s blog, on honesty, signaling, disagreement, forecasting, and the far future.</description>
	<lastBuildDate>Sat, 11 Feb 2012 22:21:13 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<item>
		<title>By: Noumenon</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391178</link>
		<dc:creator>Noumenon</dc:creator>
		<pubDate>Sun, 07 Dec 2008 18:17:29 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391178</guid>
		<description>Did Robin post earlier that he was going to cut back on blogging so that it&#039;s not a surprise to anybody?
</description>
		<content:encoded><![CDATA[<p>Did Robin post earlier that he was going to cut back on blogging so that it&#8217;s not a surprise to anybody?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Tyler</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391177</link>
		<dc:creator>Tim Tyler</dc:creator>
		<pubDate>Sat, 06 Dec 2008 13:21:48 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391177</guid>
		<description>Re: You lose some of the value of strong static typing when you make it optional.

Static typing sucks for most things - languages at that level should be prototype-based - but there are some cases where it is useful.  Therefore, it should be optional - provided the syntactic cost is not too great.  IMO, the syntactic cost is negligible - if you treat type safety as just another sort of contract.
</description>
		<content:encoded><![CDATA[<p>Re: You lose some of the value of strong static typing when you make it optional.</p>
<p>Static typing sucks for most things &#8211; languages at that level should be prototype-based &#8211; but there are some cases where it is useful.  Therefore, it should be optional &#8211; provided the syntactic cost is not too great.  IMO, the syntactic cost is negligible &#8211; if you treat type safety as just another sort of contract.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Douglas Knight</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391176</link>
		<dc:creator>Douglas Knight</dc:creator>
		<pubDate>Sat, 06 Dec 2008 03:16:36 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391176</guid>
		<description>A lot of people are saying that incremental progress gets made (especially in Haskell), but others on this thread seem to deny that incremental progress is possible. I really like Barry Kelly&#039;s beginning about crypto, but his last two paragraphs seemed basically wrong. Yes, there aren&#039;t mathematically-oriented people writing business code, so we need tools for other people, but there is incremental progress for more usable tools.

Phil Goetz, just because a lot of people went down the same wrong road doesn&#039;t mean there aren&#039;t other routes. It&#039;s a sign that it&#039;s premature to design languages for provable correctness, but progress is being made on fragments, like type safety.
</description>
		<content:encoded><![CDATA[<p>A lot of people are saying that incremental progress gets made (especially in Haskell), but others on this thread seem to deny that incremental progress is possible. I really like Barry Kelly&#8217;s beginning about crypto, but his last two paragraphs seemed basically wrong. Yes, there aren&#8217;t mathematically-oriented people writing business code, so we need tools for other people, but there is incremental progress for more usable tools.</p>
<p>Phil Goetz, just because a lot of people went down the same wrong road doesn&#8217;t mean there aren&#8217;t other routes. It&#8217;s a sign that it&#8217;s premature to design languages for provable correctness, but progress is being made on fragments, like type safety.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Grant</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391175</link>
		<dc:creator>Grant</dc:creator>
		<pubDate>Sat, 06 Dec 2008 02:23:52 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391175</guid>
		<description>Unit testing has improved the quality of software immensely. Test-driven development (or behavior-driven development, which is really only slightly different) consists of writing tests (or specifications that are automatically tested) before the actual tested code is written.

IMO, the big improvements are coming with more microlanguages on VMs. Programming languages (like Java) become popular for some good reasons, then get locked in due to network effects. Its hard to displace them, and its hard to improve upon them significantly without breaking backwards compatibility. But nowadays with the JVM and CLR, you have multiple languages running in the same VM, and many can talk to each other. Think Java&#039;s type system sucks? You can code in Scala and still call your old Java code, use Java deployment systems (Tomcat, Glassfish), and all that. Like dynamic languages? Then you can code in JRuby, Groovy or Jython and talk to your old Java code too. Lock-in is no longer as big of a hurdle as it was.

As some other people have mentioned, functional languages seem to be becoming more popular. I&#039;d really like to see Scala and F# take off, but I wouldn&#039;t bet that they will.

On the subject of formal proofs, I pretty much agree with Doug S.
</description>
		<content:encoded><![CDATA[<p>Unit testing has improved the quality of software immensely. Test-driven development (or behavior-driven development, which is really only slightly different) consists of writing tests (or specifications that are automatically tested) before the actual tested code is written.</p>
<p>IMO, the big improvements are coming with more microlanguages on VMs. Programming languages (like Java) become popular for some good reasons, then get locked in due to network effects. Its hard to displace them, and its hard to improve upon them significantly without breaking backwards compatibility. But nowadays with the JVM and CLR, you have multiple languages running in the same VM, and many can talk to each other. Think Java&#8217;s type system sucks? You can code in Scala and still call your old Java code, use Java deployment systems (Tomcat, Glassfish), and all that. Like dynamic languages? Then you can code in JRuby, Groovy or Jython and talk to your old Java code too. Lock-in is no longer as big of a hurdle as it was.</p>
<p>As some other people have mentioned, functional languages seem to be becoming more popular. I&#8217;d really like to see Scala and F# take off, but I wouldn&#8217;t bet that they will.</p>
<p>On the subject of formal proofs, I pretty much agree with Doug S.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: a soulless automaton</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391174</link>
		<dc:creator>a soulless automaton</dc:creator>
		<pubDate>Sat, 06 Dec 2008 01:30:45 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391174</guid>
		<description>Tim Tyler: That&#039;s how a lot of programmers feel, but you lose some of the value of strong static typing when you make it optional. Note that for the purpose of this post any language where you can force invalid conversions (such as C or Java) doesn&#039;t really count as &quot;strong static typing&quot;.

Dynamic languages have their place, and I&#039;ve written plenty of Python. Java is just horrible, because the type system is strong enough to get in your way but doesn&#039;t protect you from doing fishy stuff like casting things to and from Object.

In a language that strictly requires strong, static typing across the board you have more guarantees about the behavior of code you aren&#039;t familiar with, compilers can produce faster code, and the code is made more tractable to static analysis. Ideally, errors such as possible null references and invalid type casts should be caught at compile time, not runtime. The main issue is to make the type system simultaneously as strong as possible and as unobtrusive as possible.

Peanut Gallery: I agree completely. In my previous post feel free to translate mention of &quot;high-level abstractions, strong type safety, and absolute referential transparency&quot; as &quot;I think Haskell is pretty nifty&quot;. It may be worth noting that Microsoft has hired a lot of Haskell guys and C# has moved in that direction with lambdas, some limited type inference, lazy sequences, &amp;c. So that&#039;s at least one mainstream, &quot;respectable&quot; language taking direction from Haskell...
</description>
		<content:encoded><![CDATA[<p>Tim Tyler: That&#8217;s how a lot of programmers feel, but you lose some of the value of strong static typing when you make it optional. Note that for the purpose of this post any language where you can force invalid conversions (such as C or Java) doesn&#8217;t really count as &#8220;strong static typing&#8221;.</p>
<p>Dynamic languages have their place, and I&#8217;ve written plenty of Python. Java is just horrible, because the type system is strong enough to get in your way but doesn&#8217;t protect you from doing fishy stuff like casting things to and from Object.</p>
<p>In a language that strictly requires strong, static typing across the board you have more guarantees about the behavior of code you aren&#8217;t familiar with, compilers can produce faster code, and the code is made more tractable to static analysis. Ideally, errors such as possible null references and invalid type casts should be caught at compile time, not runtime. The main issue is to make the type system simultaneously as strong as possible and as unobtrusive as possible.</p>
<p>Peanut Gallery: I agree completely. In my previous post feel free to translate mention of &#8220;high-level abstractions, strong type safety, and absolute referential transparency&#8221; as &#8220;I think Haskell is pretty nifty&#8221;. It may be worth noting that Microsoft has hired a lot of Haskell guys and C# has moved in that direction with lambdas, some limited type inference, lazy sequences, &#038;c. So that&#8217;s at least one mainstream, &#8220;respectable&#8221; language taking direction from Haskell&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Doug S.</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391173</link>
		<dc:creator>Doug S.</dc:creator>
		<pubDate>Fri, 05 Dec 2008 19:06:21 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391173</guid>
		<description>Programming is the art of figuring out what you want so precisely that even a machine could do it.

As others have pointed out, once you know enough that you can tell the difference between a correct program and an incorrect program, you&#039;ve already constrained your design enough that actually writing the code becomes trivial by comparison. If you have a specification that&#039;s precise enough to use formal methods on, the hard work has already been done.
</description>
		<content:encoded><![CDATA[<p>Programming is the art of figuring out what you want so precisely that even a machine could do it.</p>
<p>As others have pointed out, once you know enough that you can tell the difference between a correct program and an incorrect program, you&#8217;ve already constrained your design enough that actually writing the code becomes trivial by comparison. If you have a specification that&#8217;s precise enough to use formal methods on, the hard work has already been done.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim Tyler</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391172</link>
		<dc:creator>Tim Tyler</dc:creator>
		<pubDate>Fri, 05 Dec 2008 18:09:14 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391172</guid>
		<description>&lt;BLOCKQUOTE&gt;&lt;EM&gt;The irony, of course, is that current trends in programming languages are often moving away from strong/static/safe type systems, towards weaker type systems in languages such as Python.&lt;/EM&gt;&lt;/BLOCKQUOTE&gt;

Off topic - but: languages should not force programmers to use one or the other paradigm: static typing is just dynamic typing with a contract imposed on the types.
</description>
		<content:encoded><![CDATA[<blockquote><p><em>The irony, of course, is that current trends in programming languages are often moving away from strong/static/safe type systems, towards weaker type systems in languages such as Python.</em></p></blockquote>
<p>Off topic &#8211; but: languages should not force programmers to use one or the other paradigm: static typing is just dynamic typing with a contract imposed on the types.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Peanut Gallery</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391171</link>
		<dc:creator>Peanut Gallery</dc:creator>
		<pubDate>Fri, 05 Dec 2008 17:35:42 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391171</guid>
		<description>soulless,

In the research community, there is still lots of work and progress going on with regard to type systems, and much of that work will definitely make its way into production languages eventually. The advantages are too great to ignore, and a dynamically typed language can never be as safe or as fast as a statically typed language. I think the future of programming languages lies in making languages with improved type systems derived from things like Hindley-Milner (Haskell, ML) as easy to use as languages with type systems like Python.

For example, Philip Wadler and Robby Findler are working on being able to rigorously and safely combine typed and untyped sections of code in a single program, which would give you the advantages of a good type system (type safety, security, performance, etc.) and still allow you to use untyped code when that is needed. Additionally, languages like Haskell that provide a static type system with type inference (which infers types for you rather than requiring you to specify them yourself as in Java...) provide many of the advantages of a dynamically typed language like Python while still being type-safe, more secure, and faster. (See 38:17 and on in &lt;a href=&quot;http://video.google.com/videoplay?docid=-4167170843018186532&amp;hl=en&quot; rel=&quot;nofollow&quot;&gt;Faith, Evolution, and Programming Languages&lt;/a&gt; for information about the work on &quot;evolutionary types&quot;.)

In the long term, I think we&#039;ll see stronger and richer type systems than anything that exists today, but with better inference and much better tool support. The main reason that dynamic languages are so popular at present is because of their ease of use and convenience, which translates into productivity and happy programmers. Better inference on the part of the type system combined with good IDE support could make a statically typed language almost as convenient while still providing huge advantages in terms of reliability, security, and performance.
</description>
		<content:encoded><![CDATA[<p>soulless,</p>
<p>In the research community, there is still lots of work and progress going on with regard to type systems, and much of that work will definitely make its way into production languages eventually. The advantages are too great to ignore, and a dynamically typed language can never be as safe or as fast as a statically typed language. I think the future of programming languages lies in making languages with improved type systems derived from things like Hindley-Milner (Haskell, ML) as easy to use as languages with type systems like Python.</p>
<p>For example, Philip Wadler and Robby Findler are working on being able to rigorously and safely combine typed and untyped sections of code in a single program, which would give you the advantages of a good type system (type safety, security, performance, etc.) and still allow you to use untyped code when that is needed. Additionally, languages like Haskell that provide a static type system with type inference (which infers types for you rather than requiring you to specify them yourself as in Java&#8230;) provide many of the advantages of a dynamically typed language like Python while still being type-safe, more secure, and faster. (See 38:17 and on in <a href="http://video.google.com/videoplay?docid=-4167170843018186532&#038;hl=en" rel="nofollow">Faith, Evolution, and Programming Languages</a> for information about the work on &#8220;evolutionary types&#8221;.)</p>
<p>In the long term, I think we&#8217;ll see stronger and richer type systems than anything that exists today, but with better inference and much better tool support. The main reason that dynamic languages are so popular at present is because of their ease of use and convenience, which translates into productivity and happy programmers. Better inference on the part of the type system combined with good IDE support could make a statically typed language almost as convenient while still providing huge advantages in terms of reliability, security, and performance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: a soulless automaton</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391170</link>
		<dc:creator>a soulless automaton</dc:creator>
		<pubDate>Fri, 05 Dec 2008 16:04:30 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391170</guid>
		<description>anon raises a good point. The irony, of course, is that current trends in programming languages are often moving away from strong/static/safe type systems, towards weaker type systems in languages such as Python.

Another factor that can make programs dramatically easier to formally reason about is maintaining referential transparency, but most current languages pay little attention to this issue.

A language and environment supporting high-level abstractions, strong type safety, and absolute referential transparency would allow for a lot more formal verification than languages like Java, which do mediocre to poorly on all three...
</description>
		<content:encoded><![CDATA[<p>anon raises a good point. The irony, of course, is that current trends in programming languages are often moving away from strong/static/safe type systems, towards weaker type systems in languages such as Python.</p>
<p>Another factor that can make programs dramatically easier to formally reason about is maintaining referential transparency, but most current languages pay little attention to this issue.</p>
<p>A language and environment supporting high-level abstractions, strong type safety, and absolute referential transparency would allow for a lot more formal verification than languages like Java, which do mediocre to poorly on all three&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: anon</title>
		<link>http://www.overcomingbias.com/2008/12/drexler-blogs.html#comment-391169</link>
		<dc:creator>anon</dc:creator>
		<pubDate>Fri, 05 Dec 2008 15:10:57 +0000</pubDate>
		<guid isPermaLink="false">http://prod.ob.trike.com.au/2008/12/drexler-blogs.html#comment-391169</guid>
		<description>loqi is completely correct.  Formal software verification is in widespread use already, under the name of &quot;type safety&quot;: most type systems in common use can only prevent certain limited classes of implementation errors, but others are sophisticated enough to encode a formal specification and verify that its implementation is correct.

There is even a well-known correspondence between strongly typed algorithms and constructive formal proofs:  correctly implementing a formal spec is equivalent to providing a constructive proof of the corresponding theorem.
</description>
		<content:encoded><![CDATA[<p>loqi is completely correct.  Formal software verification is in widespread use already, under the name of &#8220;type safety&#8221;: most type systems in common use can only prevent certain limited classes of implementation errors, but others are sophisticated enough to encode a formal specification and verify that its implementation is correct.</p>
<p>There is even a well-known correspondence between strongly typed algorithms and constructive formal proofs:  correctly implementing a formal spec is equivalent to providing a constructive proof of the corresponding theorem.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk (enhanced)
Database Caching using disk
Object Caching 438/455 objects using disk
Content Delivery Network via Amazon Web Services: S3: overcomingbias-assets.s3.amazonaws.com

Served from: www.overcomingbias.com @ 2012-02-11 17:32:44 -->
