<?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 Finite Hate Machine</title>
	<atom:link href="http://finite.grimoire.ca/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://finite.grimoire.ca</link>
	<description>PHP is not my favourite language.</description>
	<lastBuildDate>Tue, 02 Mar 2010 23:37:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>Comment on I really don&#8217;t know what you mean by Owen Jacobson</title>
		<link>http://finite.grimoire.ca/2010/01/indexing-expressions/comment-page-1/#comment-64</link>
		<dc:creator>Owen Jacobson</dc:creator>
		<pubDate>Tue, 02 Mar 2010 23:37:33 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=26#comment-64</guid>
		<description>That&#039;s probably a consequence of PHP&#039;s &quot;organic&quot; development: array indexing has existed for most of PHP&#039;s life, while the &lt;code&gt;-&gt;&lt;/code&gt; dereference operator was introduced in PHP 4, when the PHP community had started to grok the idea that expressions should be interchangable.</description>
		<content:encoded><![CDATA[<p>That&#8217;s probably a consequence of PHP&#8217;s &#8220;organic&#8221; development: array indexing has existed for most of PHP&#8217;s life, while the <code>-></code> dereference operator was introduced in PHP 4, when the PHP community had started to grok the idea that expressions should be interchangable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I really don&#8217;t know what you mean by seutje</title>
		<link>http://finite.grimoire.ca/2010/01/indexing-expressions/comment-page-1/#comment-63</link>
		<dc:creator>seutje</dc:creator>
		<pubDate>Tue, 02 Mar 2010 12:20:29 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=26#comment-63</guid>
		<description>what really intrigues me is that
&lt;code&gt;
function foo() {
  $bar = new stdClass();
  $bar-&gt;baz = &#039;meh&#039;;
  return $bar;
}
print foo()-&gt;baz; // prints &#039;meh&#039;
&lt;/code&gt;

seems to work fine</description>
		<content:encoded><![CDATA[<p>what really intrigues me is that<br />
<code><br />
function foo() {<br />
  $bar = new stdClass();<br />
  $bar-&gt;baz = 'meh';<br />
  return $bar;<br />
}<br />
print foo()-&gt;baz; // prints 'meh'<br />
</code></p>
<p>seems to work fine</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on Did you think I wouldn&#8217;t recognize this compromise by Just when everything was making sense &#171; Finite Hate Machine</title>
		<link>http://finite.grimoire.ca/2010/01/lambduh/comment-page-1/#comment-13</link>
		<dc:creator>Just when everything was making sense &#171; Finite Hate Machine</dc:creator>
		<pubDate>Thu, 21 Jan 2010 00:06:42 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=94#comment-13</guid>
		<description>[...] Finite Hate Machine PHP is not my favourite language.      &#171; Did you think I wouldn&#8217;t recognize this compromise [...]</description>
		<content:encoded><![CDATA[<p>[...] Finite Hate Machine PHP is not my favourite language.      &laquo; Did you think I wouldn&#8217;t recognize this compromise [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I decided I was never coming down by Taavi</title>
		<link>http://finite.grimoire.ca/2010/01/recursion-segfaults/comment-page-1/#comment-11</link>
		<dc:creator>Taavi</dc:creator>
		<pubDate>Tue, 19 Jan 2010 19:44:30 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=70#comment-11</guid>
		<description>Unfortunately gdb doesn&#039;t help either, because it just dies in the guts of PHP.  Been there, done that, see the dev blog post. :(</description>
		<content:encoded><![CDATA[<p>Unfortunately gdb doesn&#8217;t help either, because it just dies in the guts of PHP.  Been there, done that, see the dev blog post. :(</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on My purity you stole by Owen Jacobson</title>
		<link>http://finite.grimoire.ca/2010/01/lambdurr/comment-page-1/#comment-10</link>
		<dc:creator>Owen Jacobson</dc:creator>
		<pubDate>Fri, 15 Jan 2010 01:23:06 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=33#comment-10</guid>
		<description>Well, see, it&#039;s not a big deal, because the interpreter starts, renders one page, and exits (destroying everything).

Hope you didn&#039;t want to write a long-running program that isn&#039;t a web page in it.</description>
		<content:encoded><![CDATA[<p>Well, see, it&#8217;s not a big deal, because the interpreter starts, renders one page, and exits (destroying everything).</p>
<p>Hope you didn&#8217;t want to write a long-running program that isn&#8217;t a web page in it.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on My purity you stole by Grumqa</title>
		<link>http://finite.grimoire.ca/2010/01/lambdurr/comment-page-1/#comment-9</link>
		<dc:creator>Grumqa</dc:creator>
		<pubDate>Fri, 15 Jan 2010 01:22:13 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=33#comment-9</guid>
		<description>So does it just purge the function table now and then?  It must be doing something so as not to blow up the server because somebody hit a page that creates a function too many times.</description>
		<content:encoded><![CDATA[<p>So does it just purge the function table now and then?  It must be doing something so as not to blow up the server because somebody hit a page that creates a function too many times.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on My purity you stole by Owen Jacobson</title>
		<link>http://finite.grimoire.ca/2010/01/lambdurr/comment-page-1/#comment-8</link>
		<dc:creator>Owen Jacobson</dc:creator>
		<pubDate>Fri, 15 Jan 2010 01:12:55 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=33#comment-8</guid>
		<description>For some ideas on how to abuse this in Objective-C, consider the links under &lt;a href=&quot;http://www.google.com/search?q=isa+swizzling&quot; rel=&quot;nofollow&quot;&gt;isa swizzling&lt;/a&gt;. (Objective-C calls the pointer to an object&#039;s virtual method table &lt;code&gt;isa&lt;/code&gt;.)</description>
		<content:encoded><![CDATA[<p>For some ideas on how to abuse this in Objective-C, consider the links under <a href="http://www.google.com/search?q=isa+swizzling" rel="nofollow">isa swizzling</a>. (Objective-C calls the pointer to an object&#8217;s virtual method table <code>isa</code>.)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on My purity you stole by Owen Jacobson</title>
		<link>http://finite.grimoire.ca/2010/01/lambdurr/comment-page-1/#comment-7</link>
		<dc:creator>Owen Jacobson</dc:creator>
		<pubDate>Fri, 15 Jan 2010 01:05:19 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=33#comment-7</guid>
		<description>No; C++&#039;s virtual function tables are entirely generated at compile time, and the names are real symbols (well, fixed offsets) rather than string literals. This is a little easier to see in Objective-C, where the symbol table is in easy reach, but you can model C++&#039;s behaviour with this C:

&lt;pre lang=&quot;c&quot; line=&quot;1&quot; escaped=&quot;true&quot;&gt;
#include &lt;stdio.h&gt;

/*
class a {
public:
    const char *get_message();
    a(const char *);
private:
    const char *message;
};
*/

struct a {
    const char *message;
};

struct a_virt {
    const char *(*get_message)(
        struct a *this,
        const struct a_virt *this_vtable
    );
    void (*__constructor__)(
        struct a *this,
        const struct a_virt *this_vtable,
        const char *message
    );
};

/* const char *a::get_message() */
const char *a__get_message(
    struct a *this,
    const struct a_virt *this_vtable
) {
    return this-&gt;message;
}

/* a::a(const char*) */
void a____constructor__(
    struct a *this,
    const struct a_virt *this_vtable,
    const char *message
) {
    /* No base class to delegate to. */
    this-&gt;message = message;
}

/* The actual virtual table for class a */
const struct a_virt a_virt = {a__get_message, a____constructor__};

/*
class b : public a {
public:
    b(const char *);
    void print();
private:
    const char *message;
};
*/

struct b {
    /* Fields inherited from type &#039;a&#039; -- taking advantage
       of an oddity of the C structure padding rules, this
       is even legal as-is. Just ill-advised. */
    const char *message;
    
    /* No new fields in &#039;b&#039;. */
};

struct b_virt {
    /* Methods inherited from a */
    const char *(*get_message)(
        struct a *this,
        const struct a_virt *this_vtable
    );
    
    /* Local methods. */
    void (*__constructor__)(
        struct b *this,
        const struct b_virt *this_vtable,
        const char *message
    );
    void (*print)(
        struct b *this,
        const struct b_virt *this_vtable
    );
};

void b____constructor__(
    struct b *this,
    const struct b_virt *this_vtable,
    const char *message
) {
    /* Chain to a::a */
    a____constructor__(this, this_vtable, message);
}

void b__print(struct b *this, const struct b_virt *this_vtable) {
    /* Call this-&gt;get_message() */
    const char *message = this_vtable-&gt;get_message(this, this_vtable);
    printf(&quot;%s\n&quot;, message);
}

/* The actual vtable for type b */
const struct b_virt b_virt = {
    a__get_message,
    b____constructor__,
    b__print
};

int main() {
    /* Create a b */
    struct b instance_of_b;
    b_virt.__constructor__(&amp;instance_of_b, &amp;b_virt, &quot;Hello, world.&quot;);
    
    /* Call b.print() */
    b_virt.print(&amp;instance_of_b, &amp;b_virt);
}
&lt;/pre&gt;

&lt;pre&gt;
$ ./virtual-demo 
Hello, world.
&lt;/pre&gt;

All of this happens at compile time.

As for the second part of your question:

&lt;pre lang=&quot;php&quot; line=&quot;1&quot; escaped=&quot;true&quot;&gt;
&lt;?php

$x = create_function(&#039;&#039;, &#039;return 0;&#039;);
$y = create_function(&#039;&#039;, &#039;return 0;&#039;);

print $x == $y; /* Prints nothing (FALSE). */

?&gt;
&lt;/pre&gt;

So yes, it does re-create the function every time it&#039;s called, even if you give it the exact same code. This doesn&#039;t really surprise me; caching function bodies is the sort of advanced feature that needs to be implemented differently in every program.</description>
		<content:encoded><![CDATA[<p>No; C++&#8217;s virtual function tables are entirely generated at compile time, and the names are real symbols (well, fixed offsets) rather than string literals. This is a little easier to see in Objective-C, where the symbol table is in easy reach, but you can model C++&#8217;s behaviour with this C:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
class a {
public:
    const char *get_message();
    a(const char *);
private:
    const char *message;
};
*/</span>
&nbsp;
<span style="color: #993333;">struct</span> a <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">struct</span> a_virt <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>get_message<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>
        <span style="color: #993333;">struct</span> a <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt <span style="color: #339933;">*</span>this_vtable
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>__constructor__<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>
        <span style="color: #993333;">struct</span> a <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt <span style="color: #339933;">*</span>this_vtable<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* const char *a::get_message() */</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>a__get_message<span style="color: #009900;">&#40;</span>
    <span style="color: #993333;">struct</span> a <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt <span style="color: #339933;">*</span>this_vtable
<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> this<span style="color: #339933;">-&gt;</span>message<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* a::a(const char*) */</span>
<span style="color: #993333;">void</span> a____constructor__<span style="color: #009900;">&#40;</span>
    <span style="color: #993333;">struct</span> a <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt <span style="color: #339933;">*</span>this_vtable<span style="color: #339933;">,</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message
<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* No base class to delegate to. */</span>
    this<span style="color: #339933;">-&gt;</span>message <span style="color: #339933;">=</span> message<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The actual virtual table for class a */</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt a_virt <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>a__get_message<span style="color: #339933;">,</span> a____constructor__<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/*
class b : public a {
public:
    b(const char *);
    void print();
private:
    const char *message;
};
*/</span>
&nbsp;
<span style="color: #993333;">struct</span> b <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Fields inherited from type 'a' -- taking advantage
       of an oddity of the C structure padding rules, this
       is even legal as-is. Just ill-advised. */</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* No new fields in 'b'. */</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">struct</span> b_virt <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Methods inherited from a */</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>get_message<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>
        <span style="color: #993333;">struct</span> a <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> a_virt <span style="color: #339933;">*</span>this_vtable
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Local methods. */</span>
    <span style="color: #993333;">void</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>__constructor__<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>
        <span style="color: #993333;">struct</span> b <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> b_virt <span style="color: #339933;">*</span>this_vtable<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">void</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>print<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>
        <span style="color: #993333;">struct</span> b <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
        <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> b_virt <span style="color: #339933;">*</span>this_vtable
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> b____constructor__<span style="color: #009900;">&#40;</span>
    <span style="color: #993333;">struct</span> b <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> b_virt <span style="color: #339933;">*</span>this_vtable<span style="color: #339933;">,</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message
<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Chain to a::a */</span>
    a____constructor__<span style="color: #009900;">&#40;</span>this<span style="color: #339933;">,</span> this_vtable<span style="color: #339933;">,</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> b__print<span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> b <span style="color: #339933;">*</span>this<span style="color: #339933;">,</span> <span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> b_virt <span style="color: #339933;">*</span>this_vtable<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Call this-&gt;get_message() */</span>
    <span style="color: #993333;">const</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>message <span style="color: #339933;">=</span> this_vtable<span style="color: #339933;">-&gt;</span>get_message<span style="color: #009900;">&#40;</span>this<span style="color: #339933;">,</span> this_vtable<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%s<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> message<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #808080; font-style: italic;">/* The actual vtable for type b */</span>
<span style="color: #993333;">const</span> <span style="color: #993333;">struct</span> b_virt b_virt <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
    a__get_message<span style="color: #339933;">,</span>
    b____constructor__<span style="color: #339933;">,</span>
    b__print
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #808080; font-style: italic;">/* Create a b */</span>
    <span style="color: #993333;">struct</span> b instance_of_b<span style="color: #339933;">;</span>
    b_virt.__constructor__<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>instance_of_b<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>b_virt<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Hello, world.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* Call b.print() */</span>
    b_virt.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>instance_of_b<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>b_virt<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<pre>
$ ./virtual-demo
Hello, world.
</pre>
<p>All of this happens at compile time.</p>
<p>As for the second part of your question:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000088;">$x</span> <span style="color: #339933;">=</span> <span style="color: #990000;">create_function</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'return 0;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$y</span> <span style="color: #339933;">=</span> <span style="color: #990000;">create_function</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'return 0;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">print</span> <span style="color: #000088;">$x</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$y</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* Prints nothing (FALSE). */</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>So yes, it does re-create the function every time it&#8217;s called, even if you give it the exact same code. This doesn&#8217;t really surprise me; caching function bodies is the sort of advanced feature that needs to be implemented differently in every program.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on My purity you stole by Grumqa</title>
		<link>http://finite.grimoire.ca/2010/01/lambdurr/comment-page-1/#comment-6</link>
		<dc:creator>Grumqa</dc:creator>
		<pubDate>Fri, 15 Jan 2010 00:36:15 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=33#comment-6</guid>
		<description>Doesn&#039;t C++ sort of do the same thing with virtual functions?  What would you have it do instead?

I&#039;d be curious to know if it creates a new function every time it is called with the same arguments.</description>
		<content:encoded><![CDATA[<p>Doesn&#8217;t C++ sort of do the same thing with virtual functions?  What would you have it do instead?</p>
<p>I&#8217;d be curious to know if it creates a new function every time it is called with the same arguments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Comment on I really don&#8217;t know what you mean by Owen Jacobson</title>
		<link>http://finite.grimoire.ca/2010/01/indexing-expressions/comment-page-1/#comment-4</link>
		<dc:creator>Owen Jacobson</dc:creator>
		<pubDate>Tue, 12 Jan 2010 02:15:44 +0000</pubDate>
		<guid isPermaLink="false">http://finite.grimoire.ca/?p=26#comment-4</guid>
		<description>Ooh. Is there a bug for this somewhere? Searching the PHP bugs database for &quot;array&quot; or &quot;index&quot; is a lot time consuming.</description>
		<content:encoded><![CDATA[<p>Ooh. Is there a bug for this somewhere? Searching the PHP bugs database for &#8220;array&#8221; or &#8220;index&#8221; is a lot time consuming.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
