<?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: Cat Higher Order Instructions to Assembly</title>
	<atom:link href="http://cdiggins.com/2007/04/11/cat-higher-order-instructions-to-assembly/feed/" rel="self" type="application/rss+xml" />
	<link>http://cdiggins.com/2007/04/11/cat-higher-order-instructions-to-assembly/</link>
	<description>Christopher Diggins</description>
	<pubDate>Fri, 04 Jul 2008 20:12:28 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
		<item>
		<title>By: barrkel</title>
		<link>http://cdiggins.com/2007/04/11/cat-higher-order-instructions-to-assembly/#comment-348</link>
		<dc:creator>barrkel</dc:creator>
		<pubDate>Wed, 11 Apr 2007 22:04:41 +0000</pubDate>
		<guid isPermaLink="false">http://cdiggins.com/2007/04/11/cat-higher-order-instructions-to-assembly/#comment-348</guid>
		<description>A problem I have with this scheme is that efficient compilation wants to do things like register allocation, strength reduction, etc., all that boring stuff that makes things fast and also requires a nice set of basic blocks for analysis. Basically, delaying compilation until as much information as possible is available.

CLR &#38; JVM instructions can be viewed as encoding a series expression DAGs that can be passed whole to the compiler and be treated very similarly to a traditional back end, but these new instructions can't be as easily, as far as I can see. They'd need two different representations:

1) preserving the old, DAG-based structure
2) creating code based on this branch of the DAG

... and either one or the other would be used whether a compose or an eval operation was invoked. Also, efficient JIT compilation, while fast, is not so fast that you'd want to do it every time you call. You'd want to cache what you can.

I don't think it's impossible, I know a lot of work has been done on e.g. Lisp implementations along these ideas to make them faster, but I wonder how much of a design shock that kind of approach would have on the typical JIT implementation.</description>
		<content:encoded><![CDATA[<p>A problem I have with this scheme is that efficient compilation wants to do things like register allocation, strength reduction, etc., all that boring stuff that makes things fast and also requires a nice set of basic blocks for analysis. Basically, delaying compilation until as much information as possible is available.</p>
<p>CLR &amp; JVM instructions can be viewed as encoding a series expression DAGs that can be passed whole to the compiler and be treated very similarly to a traditional back end, but these new instructions can&#8217;t be as easily, as far as I can see. They&#8217;d need two different representations:</p>
<p>1) preserving the old, DAG-based structure<br />
2) creating code based on this branch of the DAG</p>
<p>&#8230; and either one or the other would be used whether a compose or an eval operation was invoked. Also, efficient JIT compilation, while fast, is not so fast that you&#8217;d want to do it every time you call. You&#8217;d want to cache what you can.</p>
<p>I don&#8217;t think it&#8217;s impossible, I know a lot of work has been done on e.g. Lisp implementations along these ideas to make them faster, but I wonder how much of a design shock that kind of approach would have on the typical JIT implementation.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
