<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.1.3" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Metaprogramming Ruby</title>
	<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Tue, 08 Jul 2008 21:05:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>

	<item>
		<title>By: Michał Kwiatkowski</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4545</link>
		<author>Michał Kwiatkowski</author>
		<pubDate>Sat, 19 Apr 2008 19:39:40 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4545</guid>
					<description>On the 9th slide ("Ruby's object model #2") there seems to be an error, which I'll allow myself to correct. ;)

It seems that two different concepts got intertwined there.

There's this concept of class hierarchy - some classes are above others. Those below inherit methods from those above. A class that in a class hierarchy is above another is called its superclass. So, talking about superclasses makes sense only in a context of a class and its position in the class hierarchy.

And there's a concept of an object being an instance of a class. Class of an object can also be called its "type". In single-dispatch systems class holds methods, so it defines a behaviour of its instances.

Getting back to the slide, "a string" cannot have a superclass, because it's not a class. But its class is truly a String. In other words, "a string" is an instance of a class String.

Now, String is a class, so it's safe to talk about its superclass = a class that stands higher in the class hierarchy. Superclass of String is not Class, as the slide suggests, but it's Object. Here again, you probably meant that String is of type (or of class, as we may say) Class. In other words, you looked at String as an object and asked for its class. Class of String is Class. :)

Then again, Class is of type Class, which wouldn't be that interesting and would cut the slide in a half. ;) So, now we look at classes in context of class hierarchy. By asking what is higher ("super") you go from Class to Module, and from Module to Object. That part is OK.

Apart for this error, I really enjoyed reading your slides. I think you made a good approach of going to the source and referring to the Ruby interpreter's source code. It &lt;a href="http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/" rel="nofollow"&gt;also helped me understand some of the Ruby quirks&lt;/a&gt; in the past.

And it's the first time I hear about Higher Order Messaging, very interesting, thanks! Keep up the good work and please blog more frequently. :) BTW, how's your 10 languages/10 projects idea going?</description>
		<content:encoded><![CDATA[<p>On the 9th slide (&#8221;Ruby&#8217;s object model #2&#8243;) there seems to be an error, which I&#8217;ll allow myself to correct. ;)</p>
<p>It seems that two different concepts got intertwined there.</p>
<p>There&#8217;s this concept of class hierarchy - some classes are above others. Those below inherit methods from those above. A class that in a class hierarchy is above another is called its superclass. So, talking about superclasses makes sense only in a context of a class and its position in the class hierarchy.</p>
<p>And there&#8217;s a concept of an object being an instance of a class. Class of an object can also be called its &#8220;type&#8221;. In single-dispatch systems class holds methods, so it defines a behaviour of its instances.</p>
<p>Getting back to the slide, &#8220;a string&#8221; cannot have a superclass, because it&#8217;s not a class. But its class is truly a String. In other words, &#8220;a string&#8221; is an instance of a class String.</p>
<p>Now, String is a class, so it&#8217;s safe to talk about its superclass = a class that stands higher in the class hierarchy. Superclass of String is not Class, as the slide suggests, but it&#8217;s Object. Here again, you probably meant that String is of type (or of class, as we may say) Class. In other words, you looked at String as an object and asked for its class. Class of String is Class. :)</p>
<p>Then again, Class is of type Class, which wouldn&#8217;t be that interesting and would cut the slide in a half. ;) So, now we look at classes in context of class hierarchy. By asking what is higher (&#8221;super&#8221;) you go from Class to Module, and from Module to Object. That part is OK.</p>
<p>Apart for this error, I really enjoyed reading your slides. I think you made a good approach of going to the source and referring to the Ruby interpreter&#8217;s source code. It <a href="http://mousebender.wordpress.com/2007/11/18/including-a-module-in-ruby/" rel="nofollow">also helped me understand some of the Ruby quirks</a> in the past.</p>
<p>And it&#8217;s the first time I hear about Higher Order Messaging, very interesting, thanks! Keep up the good work and please blog more frequently. :) BTW, how&#8217;s your 10 languages/10 projects idea going?</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: stiff</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4546</link>
		<author>stiff</author>
		<pubDate>Sat, 19 Apr 2008 20:01:29 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4546</guid>
					<description>You're absolutely right, thanks! I fixed it by changing two "superclass" labels to "class" - after you've corrected me I'm not really sure if mixing the two kinds of relationship in one picture is the best idea, but from the other side, I still think it helps with forming a simple mental model of what's going on in Ruby under the hood when doing OO. Maybe I will do some more serious changes to the picture tomorrow...

As for the 10 languages/10 projects idea, I was really afraid someone will ask about it ;) I didn't have any time to even start working on it, which is really a shame. I might have a chance to repair it soon through, I hope, so maybe I'll manage to write some first posts from the series :)</description>
		<content:encoded><![CDATA[<p>You&#8217;re absolutely right, thanks! I fixed it by changing two &#8220;superclass&#8221; labels to &#8220;class&#8221; - after you&#8217;ve corrected me I&#8217;m not really sure if mixing the two kinds of relationship in one picture is the best idea, but from the other side, I still think it helps with forming a simple mental model of what&#8217;s going on in Ruby under the hood when doing OO. Maybe I will do some more serious changes to the picture tomorrow&#8230;</p>
<p>As for the 10 languages/10 projects idea, I was really afraid someone will ask about it ;) I didn&#8217;t have any time to even start working on it, which is really a shame. I might have a chance to repair it soon through, I hope, so maybe I&#8217;ll manage to write some first posts from the series :)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Stuart</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4569</link>
		<author>Stuart</author>
		<pubDate>Tue, 22 Apr 2008 04:56:23 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4569</guid>
					<description>Really interesting presentation.  Thanks for posting this</description>
		<content:encoded><![CDATA[<p>Really interesting presentation.  Thanks for posting this</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Sam Aaron</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4573</link>
		<author>Sam Aaron</author>
		<pubDate>Tue, 22 Apr 2008 21:30:25 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4573</guid>
					<description>Hey Jarosław, 

really nice slides with great content - well done :-) I'm really enjoying reading them. Was the presentation recorded at all?

I also hope you don't mind me pointing out a really tiny error on the slide entitled "The tricks - evaluating things #2". You declare the following:

(class </description>
		<content:encoded><![CDATA[<p>Hey Jarosław, </p>
<p>really nice slides with great content - well done :-) I&#8217;m really enjoying reading them. Was the presentation recorded at all?</p>
<p>I also hope you don&#8217;t mind me pointing out a really tiny error on the slide entitled &#8220;The tricks - evaluating things #2&#8243;. You declare the following:</p>
<p>(class</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Sam Aaron</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4574</link>
		<author>Sam Aaron</author>
		<pubDate>Tue, 22 Apr 2008 21:33:54 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4574</guid>
					<description>Hmm, not sure what ate the rest of my previous post, but essentially I was just saying that you should either not use the metaclass or call class_eval in the third stanza. As it stands, the code AClass.class_meth doesn't currently work.

Anyway, keep up the excellent work, and I hope to be reading more interesting stuff from you soon!</description>
		<content:encoded><![CDATA[<p>Hmm, not sure what ate the rest of my previous post, but essentially I was just saying that you should either not use the metaclass or call class_eval in the third stanza. As it stands, the code AClass.class_meth doesn&#8217;t currently work.</p>
<p>Anyway, keep up the excellent work, and I hope to be reading more interesting stuff from you soon!</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: Sam Aaron</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4575</link>
		<author>Sam Aaron</author>
		<pubDate>Tue, 22 Apr 2008 21:54:46 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4575</guid>
					<description>Oh, and a similar error is in the next slide (The tricks - deﬁning things #2). Again you call instance eval on the metaclass, which essentially creates a metaclass of the metaclass of the class ;-)

Your use of the variable 'description' in the defined method is only evaluated when it is called, by which time, the value that you passed to it in the class declaration to the method enhance me has long gone. This therefore results in a NameError.

Sorry to point another couple of little errors out. However, once these little niggles are polished out, these slides are going to shine :-)</description>
		<content:encoded><![CDATA[<p>Oh, and a similar error is in the next slide (The tricks - deﬁning things #2). Again you call instance eval on the metaclass, which essentially creates a metaclass of the metaclass of the class ;-)</p>
<p>Your use of the variable &#8216;description&#8217; in the defined method is only evaluated when it is called, by which time, the value that you passed to it in the class declaration to the method enhance me has long gone. This therefore results in a NameError.</p>
<p>Sorry to point another couple of little errors out. However, once these little niggles are polished out, these slides are going to shine :-)</p>
]]></content:encoded>
				</item>
	<item>
		<title>By: stiff</title>
		<link>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4582</link>
		<author>stiff</author>
		<pubDate>Wed, 23 Apr 2008 05:52:48 +0000</pubDate>
		<guid>http://www.stifflog.com/2008/04/19/metaprogramming-ruby/#comment-4582</guid>
					<description>You're right - that's because I switched the examples from using define_method to def, without actually checking if it works, which hit back at me - fixed :)

Their may be some video from the presentation available in a few days, but I'm not sure if it will be of any use...</description>
		<content:encoded><![CDATA[<p>You&#8217;re right - that&#8217;s because I switched the examples from using define_method to def, without actually checking if it works, which hit back at me - fixed :)</p>
<p>Their may be some video from the presentation available in a few days, but I&#8217;m not sure if it will be of any use&#8230;</p>
]]></content:encoded>
				</item>
</channel>
</rss>
