<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Traits vs. Aspects in Scala</title>
    <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Traits vs. Aspects in Scala</title>
      <description>&lt;p&gt;Scala &lt;em&gt;traits&lt;/em&gt; provide a mixin composition mechanism that has been missing in Java. Roughly speaking, you can think of &lt;em&gt;traits&lt;/em&gt; as analogous to Java interfaces, but with implementations.&lt;/p&gt;


	&lt;p&gt;&lt;em&gt;Aspects&lt;/em&gt;, &lt;em&gt;e.g.,&lt;/em&gt; those written in &lt;a href="http://aspectj.org"&gt;AspectJ&lt;/a&gt;, are another mechanism for mixin composition in Java. How do &lt;em&gt;aspects&lt;/em&gt; and &lt;em&gt;traits&lt;/em&gt; compare?&lt;/p&gt;


	&lt;p&gt;Let&amp;#8217;s look at an example trait first, then re-implement the same behavior using an AspectJ aspect, and finally compare the two approaches.&lt;/p&gt;


	&lt;h3&gt;Observing with Traits&lt;/h3&gt;


	&lt;p&gt;In a previous &lt;a href="http://blog.objectmentor.com/articles/2008/08/14/the-seductions-of-scala-part-iii-concurrent-programming"&gt;post on Scala&lt;/a&gt;, I gave an example of the &lt;em&gt;Observer Pattern&lt;/em&gt; implemented using a trait. Chris Shorrock and &lt;a href="http://james-iry.blogspot.com/"&gt;James Iry&lt;/a&gt; provided improved versions in the comments. I&amp;#8217;ll use James&amp;#8217; example here.&lt;/p&gt;


	&lt;p&gt;To keep things as simple as possible, let&amp;#8217;s observe a simple &lt;code&gt;Counter&lt;/code&gt;, which increments an internal count variable by the number input to an &lt;code&gt;add&lt;/code&gt; method.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

class Counter {
    var count = 0
    def add(i: Int) = count += i
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;The &lt;code&gt;count&lt;/code&gt; field is actually public, but I will only write to it through &lt;code&gt;add&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;Here is James&amp;#8217; &lt;em&gt;Subject&lt;/em&gt; trait that implements the &lt;em&gt;Observer Pattern&lt;/em&gt;.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

trait Subject {
  type Observer = { def receiveUpdate(subject:Any) }

  private var observers = List[Observer]()
  def addObserver(observer:Observer) = observers ::= observer
  def notifyObservers = observers foreach (_.receiveUpdate(this))
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Effectively, this says that we can use any object as an &lt;code&gt;Observer&lt;/code&gt; as long as it matches the &lt;em&gt;structural type&lt;/em&gt; &lt;code&gt;{ def receiveUpdate(subject:Any) }&lt;/code&gt;. Think of structural types as anonymous interfaces. Here, a valid observer is one that has a &lt;code&gt;receiveUpdate&lt;/code&gt; method taking an argument of &lt;code&gt;Any&lt;/code&gt; type.&lt;/p&gt;


	&lt;p&gt;The rest of the trait manages a list of observers and defines a &lt;code&gt;notifyObservers&lt;/code&gt; method. The expression &lt;code&gt;observers ::= observer&lt;/code&gt; uses the &lt;code&gt;List&lt;/code&gt; &lt;code&gt;::&lt;/code&gt; (&amp;#8220;cons&amp;#8221;) operator to &lt;em&gt;prepend&lt;/em&gt; an item to the list. (Note, I am using the default immutable &lt;code&gt;List&lt;/code&gt;, so a new copy is created everytime.)&lt;/p&gt;


	&lt;p&gt;The &lt;code&gt;notifyObservers&lt;/code&gt; method iterates through the observers, calling &lt;code&gt;receiveUpdate&lt;/code&gt; on each one. The &lt;code&gt;_&lt;/code&gt; that gets replaced with each observer during the iteration.&lt;/p&gt;


	&lt;p&gt;Finally, here is a &lt;a href="http://code.google.com/p/specs"&gt;specs&lt;/a&gt; file that exercises the code.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

import org.specs._

object CounterObserverSpec extends Specification {
    "A Counter Observer" should {
        "observe counter increments" in {
            class CounterObserver {
                var updates = 0
                def receiveUpdate(subject:Any) = updates += 1
            }
            class WatchedCounter extends Counter with Subject {
                override def add(i: Int) = { 
                    super.add(i)
                    notifyObservers
                }
            }
            var watchedCounter = new WatchedCounter
            var counterObserver = new CounterObserver
            watchedCounter.addObserver(counterObserver)
            for (i &amp;lt;- 1 to 3) watchedCounter.add(i)
            counterObserver.updates must_== 3
            watchedCounter.count must_== 6
    }
  }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;The &lt;em&gt;specs&lt;/em&gt; library is a &lt;span class="caps"&gt;BDD&lt;/span&gt; tool inspired by &lt;a href="http://rspec.info"&gt;rspec&lt;/a&gt; in Rubyland.&lt;/p&gt;


	&lt;p&gt;I won&amp;#8217;t discuss it all the specs-specific details here, but hopefully you&amp;#8217;ll get the general idea of what it&amp;#8217;s doing.&lt;/p&gt;


	&lt;p&gt;Inside the &lt;code&gt;"observe counter increments" in {...}&lt;/code&gt;, I start by declaring two classes, &lt;code&gt;CounterObserver&lt;/code&gt; and &lt;code&gt;WatchedCounter&lt;/code&gt;. &lt;code&gt;CounterObserver&lt;/code&gt; satisfies our required &lt;em&gt;structural type&lt;/em&gt;, &lt;em&gt;i.e.,&lt;/em&gt; it provides a &lt;code&gt;receiveUpdate&lt;/code&gt; method.&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;WatchedCounter&lt;/code&gt; subclasses &lt;code&gt;Counter&lt;/code&gt; and mixes in the &lt;code&gt;Subject&lt;/code&gt; trait. It overrides the &lt;code&gt;add&lt;/code&gt; method, where it calls &lt;code&gt;Counter&lt;/code&gt;&amp;#8217;s &lt;code&gt;add&lt;/code&gt; first, then notifies the observers. No parentheses are used in the invocation of &lt;code&gt;notifyObservers&lt;/code&gt; because the method was not defined to take any!&lt;/p&gt;


	&lt;p&gt;Next, I create an instance of each class, add the observer to the &lt;code&gt;WatchedCounter&lt;/code&gt;, and make 3 calls to &lt;code&gt;watchedCounter.add&lt;/code&gt;.&lt;/p&gt;


	&lt;p&gt;Finally, I use the &amp;#8220;&lt;code&gt;actual must_== expected&lt;/code&gt;&amp;#8221; idiom to test the results. The observer should have seen 3 updates, while the counter should have a total of 6.&lt;/p&gt;


	&lt;p&gt;The following simple bash shell script will build and run the code.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
SCALA_HOME=...
SCALA_SPECS_HOME=...
CP=$SCALA_HOME/lib/scala-library.jar:$SCALA_SPECS_HOME/specs-1.3.1.jar:bin
rm -rf bin
mkdir -p bin
scalac -d bin -cp $CP src/example/*.scala
scala -cp $CP example/CounterObserverSpec
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Note that I put all the sources in a &lt;code&gt;src/example&lt;/code&gt; directory. Also, I&amp;#8217;m using v1.3.1 of &lt;em&gt;specs&lt;/em&gt;, as well as v2.7.1 of Scala. You should get the following output.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
Specification "CounterObserverSpec" 
  A Counter Observer should
  + observe counter increments

Total for specification "CounterObserverSpec":
Finished in 0 second, 60 ms
1 example, 2 assertions, 0 failure, 0 error
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;h3&gt;Observing with Aspects&lt;/h3&gt;


	&lt;p&gt;Because Scala compiles to Java byte code, I can use AspectJ to advice Scala code! For this to work, you have to be aware of how Scala represents its concepts in byte code. For example, object declarations, &lt;em&gt;e.g.,&lt;/em&gt; &lt;code&gt;object Foo {...}&lt;/code&gt; become static final classes. Also, method names like &lt;code&gt;+&lt;/code&gt; become &lt;code&gt;$plus&lt;/code&gt; in byte code.&lt;/p&gt;


	&lt;p&gt;However, most Scala type, method, and variable names can be used as is in AspectJ. This is true for my example.&lt;/p&gt;


	&lt;p&gt;Here is an aspect that observes calls to &lt;code&gt;Counter.add&lt;/code&gt;.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

public aspect CounterObserver {
    after(Object counter, int value): 
        call(void *.add(int)) &amp;#38;&amp;#38; target(counter) &amp;#38;&amp;#38; args(value) {

        RecordedObservations.record("adding "+value);
    }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;You can read this aspect as follows, &lt;em&gt;after calling &lt;code&gt;Counter.add&lt;/code&gt; (and keeping track of the Counter object that was called, and the value passed to the method), call the static method &lt;code&gt;record&lt;/code&gt; on the &lt;code&gt;RecordedObservations&lt;/code&gt;.&lt;/em&gt;&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m using a separate Scala object &lt;code&gt;RecordedObservations&lt;/code&gt;&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

object RecordedObservations {
    private var messages = List[String]()
    def record(message: String):Unit = messages ::= message
    def count() = messages.length
    def reset():Unit = messages = Nil
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Recall that this is effectively a static final Java class. I need this separate object, rather than keeping information in the aspect itself, because of the simple-minded way I&amp;#8217;m building the code. ;) However, it&amp;#8217;s generally a good idea with aspects to delegate most of the work to Java or Scala code anyway.&lt;/p&gt;


	&lt;p&gt;Now, the &amp;#8220;spec&amp;#8221; file is:&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

import org.specs._

object CounterObserverSpec extends Specification {
    "A Counter Observer" should {
        "observe counter increments" in {
            RecordedObservations.reset()
            var counter = new Counter
            for (i &amp;lt;- 1 to 3) counter.add(i)
            RecordedObservations.count() must_== 3
            counter.count must_== 6
    }
  }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;This time, I don&amp;#8217;t need two more classes for the adding a mixin trait or defining an observer. Also, I call &lt;code&gt;RecordedObservations.count&lt;/code&gt; to ensure it was called 3 times.&lt;/p&gt;


	&lt;p&gt;The build script is also slightly different to add the AspectJ compilation.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
SCALA_HOME=...
SCALA_SPECS_HOME=...
ASPECTJ_HOME=...
CP=$SCALA_HOME/lib/scala-library.jar:$SCALA_SPECS_HOME/specs-1.3.1.jar:$ASPECTJ_HOME/lib/aspectjrt.jar:bin
rm -rf bin app.jar
mkdir -p bin
scalac -d bin -cp $CP src/example/*.scala 
ajc -1.5 -outjar app.jar -cp $CP -inpath bin src/example/CounterObserver.aj
aj -cp $ASPECTJ_HOME/lib/aspectjweaver.jar:app.jar:$CP example.CounterObserverSpec
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;The &lt;code&gt;ajc&lt;/code&gt; command not only compiles the aspect, but it &amp;#8220;weaves&amp;#8221; into the compiled Scala classes in the &lt;code&gt;bin&lt;/code&gt; directory. Actually, it only affects the &lt;code&gt;Counter&lt;/code&gt; class. Then it writes all the woven and unmodified class files to &lt;code&gt;app.jar&lt;/code&gt;, which is used to execute the test. Note that for production use, you might prefer &lt;a href="http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html"&gt;load-time weaving&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The output is the same as before (except for the milliseconds), so I won&amp;#8217;t show it here.&lt;/p&gt;


	&lt;h3&gt;Comparing Traits with Aspects&lt;/h3&gt;


	&lt;p&gt;So far, both approaches are equally viable. The traits approach obviously doesn&amp;#8217;t require a separate language and corresponding tool set.&lt;/p&gt;


	&lt;p&gt;However, traits have one important limitation with respect to aspects. Aspects let you define &lt;em&gt;pointcuts&lt;/em&gt; that are queries over all possible points where new behavior or modifications might be desired. These points are called &lt;em&gt;join points&lt;/em&gt; in aspect terminology. The aspect I showed above has a simple pointcut that selects one join point, calls to the &lt;code&gt;Counter.add&lt;/code&gt; method.&lt;/p&gt;


	&lt;p&gt;However, what if I wanted to observe all state changes in all classes in a package? Defining traits for each case would be tedious and error prone, since it would be easy to overlook some cases. With an aspect framework like AspectJ, I can implement observation at all the points I care about in a &lt;em&gt;modular&lt;/em&gt; way.&lt;/p&gt;


	&lt;p&gt;Aspect frameworks support this by providing wildcard mechanisms. I won&amp;#8217;t go into the details here, but the &lt;code&gt;*&lt;/code&gt; in the previous aspect is an example, matching any type. Also, one of the most powerful techniques for writing robust aspects is to use pointcuts that reference only annotations, a form of abstraction. As a final example, if I add an annotation &lt;code&gt;Adder&lt;/code&gt; to &lt;code&gt;Counter.add&lt;/code&gt;,&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

class Counter {
    var count = 0
    @Adder def add(i: Int) = count += i
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Then I can rewrite the aspect as follows.&lt;/p&gt;


&lt;pre&gt;
    &lt;code&gt;
package example

public aspect CounterObserver {
    after(Object counter, int value): 
        call(@Adder void *.*(int)) &amp;#38;&amp;#38; target(counter) &amp;#38;&amp;#38; args(value) {

        RecordedObservations.record("adding "+value);
    }
}
    &lt;/code&gt;
&lt;/pre&gt;

	&lt;p&gt;Now, there are no type and method names in the pointcut. Any instance method on any visible type that takes one &lt;code&gt;int&lt;/code&gt; (or Scala &lt;code&gt;Int&lt;/code&gt;) argument and is annotated with &lt;code&gt;Adder&lt;/code&gt; will get matched.&lt;/p&gt;


	&lt;p&gt;Note: Scala requires that you create any custom annotations as normal Java annotations. Also, if you intend to use them with Aspects, use runtime retention policy, which will be necessary if you use &lt;a href="http://www.eclipse.org/aspectj/doc/released/devguide/ltw.html"&gt;load-time weaving&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Conclusion&lt;/h3&gt;


	&lt;p&gt;If you need to mix in behavior in a specific, relatively-localized set of classes, Scala traits are probably all you need and you don&amp;#8217;t need another language. If you need more &amp;#8220;pervasive&amp;#8221; modifications (&lt;em&gt;e.g.,&lt;/em&gt; tracing, policy enforcement, security), consider using aspects.&lt;/p&gt;


	&lt;h4&gt;Acknowledgements&lt;/h4&gt;


	&lt;p&gt;Thanks to Ramnivas Laddad, whose forthcoming 2&lt;sup&gt;nd&lt;/sup&gt; Edition of &lt;cite&gt;AspectJ in Action&lt;/cite&gt; got me thinking about this topic.&lt;/p&gt;</description>
      <pubDate>Sat, 27 Sep 2008 22:33:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8628eb5f-f195-4ebe-a10a-f3ee9d66d591</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala</link>
      <category>Dean's Deprecations</category>
      <category>Design Principles</category>
      <category>Clean Code</category>
      <category>Scala</category>
      <category>aspects</category>
      <category>AspectJ</category>
      <category>mixins</category>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by backup iphone sms</title>
      <description>&lt;p&gt;Take effect to save the file and you can retrieve them when necessary.&lt;/p&gt;</description>
      <pubDate>Wed, 11 Jan 2012 05:25:14 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:9aa33b42-7e2b-433b-a623-31b31d39c400</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-196949</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by grad school personal statement</title>
      <description>&lt;p&gt;Great blog. All posts have something to learn. Your work is very good and i appreciate you and hoping for some more informative posts. thank you&#8230;&#8230;..&lt;/p&gt;</description>
      <pubDate>Fri, 23 Dec 2011 09:01:57 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:a40d1815-c914-418d-ab42-ab219573c7b5</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-190844</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by tv guide</title>
      <description>&lt;p&gt;great stuff. thanks a lot!&lt;/p&gt;</description>
      <pubDate>Sat, 26 Nov 2011 10:07:30 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:781e6bd8-b6b0-4be7-b0c1-6d9a54eec153</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-178755</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by cheap gucci</title>
      <description>&lt;p&gt;art &lt;b&gt;&lt;a href="http://www.newjordanreleasedates2011.com/air-jordan-6-C10.html" rel="nofollow"&gt;jordan 6&lt;/a&gt;&lt;/b&gt; rate, breathing &lt;b&gt;&lt;a href="http://www.newjordanreleasedates2011.com/air-jordan-2-C4.html" rel="nofollow"&gt;air jordan 2011&lt;/a&gt;&lt;/b&gt; , but still in a deep coma  &lt;b&gt;&lt;a href="http://www.newjordanreleasedates2011.com/" rel="nofollow"&gt;jordan release dates 2011&lt;/a&gt;&lt;/b&gt; . It is reported that these &lt;b&gt;&lt;a href="http://www.newjordanreleasedates2011.com/air-jordan-3-C6.html" rel="nofollow"&gt;jordan 3&lt;/a&gt;&lt;/b&gt; 10 days &lt;b&gt;&lt;a href="http://www.newjordanreleasedates2011.com/air-jordan-5-C9.html" rel="nofollow"&gt;air jordan 5&lt;/a&gt;&lt;/b&gt; and more time,...&lt;/p&gt;</description>
      <pubDate>Sat, 26 Nov 2011 03:07:25 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:b2d6ff07-0b03-4444-a6d5-d26deb9998cd</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-178626</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Cheap Beats By Dr.Dre</title>
      <description>&lt;p&gt;And M550i HR tend to music taste and string very good vocal performance voices sweet thick with deep feeling singing nuanced string flavour seemed to be able to smell the violin string the flickering light of loose filled with each frequency band appeal fragrance extension is very good density are first-class
More information in the best sound headphones&amp;#8217;s official&lt;/p&gt;</description>
      <pubDate>Tue, 08 Nov 2011 21:13:34 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:dad3ced0-f80f-4513-a0f3-67a7bd5418df</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-170191</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by mr school </title>
      <description>&lt;p&gt;fuck girl vietnam please visit
&lt;a href="http://www.xxxgirl.us/2011/11/hoang-thuy-linh-paris-hilton-style-sex.html" rel="nofollow"&gt;http://www.xxxgirl.us/2011/11/hoang-thuy-linh-paris-hilton-style-sex.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 08 Nov 2011 11:00:29 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:65b07420-bd02-42ba-be3b-325d5769a7a5</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-170000</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by christian louboutin</title>
      <description>&lt;p&gt;Blog posts about wedding and bridal are always rare to find , at least with great quality,you qualify for a great blog post writer title,kep the great job happening&lt;/p&gt;</description>
      <pubDate>Thu, 03 Nov 2011 05:41:56 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f4f94eb3-ada0-4153-951b-cc87d8cfd389</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-167547</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by canada goose jakke</title>
      <description>&lt;p&gt;Berlusconi &lt;a href="http://www.canadagooseoutletdk.com/" rel="nofollow"&gt;canada goose jakke&lt;/a&gt; sagde ved en nyheder &lt;a href="http://www.canadagooseoutletdk.com/" rel="nofollow"&gt;canada goose&lt;/a&gt; konference i et par dage siden, Gruppen &lt;a href="http://www.canadagooseoutletdk.com/" rel="nofollow"&gt;canada goose outlet&lt;/a&gt; af otte topm&#248;det udvides gradvist i de &lt;a href="http://www.belstaff-outlet.de/" rel="nofollow"&gt;belstaff outlet&lt;/a&gt; n&#230;ste to dage.Alt mere end mere end 30 andre &lt;a href="http://www.belstaff-sito-ufficiale.com/" rel="nofollow"&gt;belstaff&lt;/a&gt; ledere af nationale og internationale organisationer &lt;a href="http://www.canadagooseoutletdk.com/canada-goose-chilliwack-parka-100/" rel="nofollow"&gt;Canada Goose Chilliwack Parka&lt;/a&gt; blev  opfordret til forskellige  temaer afholdt dialog med lederne af gruppen af otte, involverer &lt;a href="http://www.canadagooseoutletdk.com/canada-goose-trillium-parka-600/" rel="nofollow"&gt;Canada Goose Trillium Parka&lt;/a&gt; sp&#248;rgsm&#229;l sp&#230;nder fra globale &#248;konomiske styring, klima&#230;ndringer, handel, udvikling og f&#248;devarer &lt;a href="http://www.canadagooseoutletdk.com/canada-goose-solaris-parka-700/" rel="nofollow"&gt;Canada Goose Solaris Parka&lt;/a&gt; sikkerhed i Afrika.Berlusconi sagde, l &amp;#8217; Aquila topm&#248;det forventes i &#229;r at opn&#229; v&#230;sentlige resultater &lt;a href="http://www.canadagooseoutletdk.com/canada-goose-handsker-300/" rel="nofollow"&gt;Canada Goose Handsker&lt;/a&gt; p&#229; en r&#230;kke  sp&#248;rgsm&#229;l.&lt;/p&gt;</description>
      <pubDate>Fri, 28 Oct 2011 21:08:24 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a48316b6-bf11-4238-a1bd-44b2db97b48d</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-165300</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Fake Oakley Gascan sunglasses</title>
      <description>&lt;p&gt;&lt;a href="http://www.oakleyshadestore.com/fake-oakley-gascan-c-29.html" rel="nofollow"&gt;http://www.oakleyshadestore.com/fake-oakley-gascan-c-29.html&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 18 Oct 2011 19:41:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2d19c02b-3062-4e0d-8d59-9eae4077f795</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-159139</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Ashley Bowling</title>
      <description>&lt;p&gt;&amp;#8220;When the stars begin to huddle, the earth will soon become a puddle.&amp;#8221;&lt;/p&gt;</description>
      <pubDate>Sun, 16 Oct 2011 01:52:14 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fd164bcf-a880-4971-a0a5-89a1fccbd59b</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-157320</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by canada goose coat</title>
      <description>&lt;p&gt;When it comes to feather dress, what appears in your mind? Which kind brand of down jacket do you like prefer? Though there are many down jackets for you to choose from, on the word, which one you really enjoy? I want to say that &lt;a href="http://www.shopcanadagoosejackets.com/cag012-p-12.html" rel="nofollow"&gt;canada goose coats&lt;/a&gt; is really your best choice. I believe you can&amp;#8217;t agree with me any more. When you take the quality into consideration, you will find that it is superior to any other kind of coat. Besides, &lt;a href="http://www.shopcanadagoosejackets.com/" rel="nofollow"&gt;discount canada goose jackets&lt;/a&gt; is a world well-known brand, which has gained high reputation in the world, which has accepted by our customers and some organization. Because of its high quality, some of our loyal customers have promoted it to the people around them. In their opinion, it is good to informing others to know it. Recently, &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-trillium-parka-c-5.html" rel="nofollow"&gt;Canada Goose Trillium Parka&lt;/a&gt; is on hot sale. What I have to inform you is that all the products there are made by hand, so they are elaborative and elegant enough. It is really beautiful once you dress in. So, if you are a lovely girl or woman, go to the store to buy one for you. You will appreciate it that you have such a coat.In addition, they also have any other products like &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-gloves-c-6.html" rel="nofollow"&gt;canada goose Gloves&lt;/a&gt; and &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-snow-mantra-parka-9501m-black-p-9.html" rel="nofollow"&gt;canada goose jacket supplier&lt;/a&gt;.Hope your will like its!&lt;/p&gt;</description>
      <pubDate>Thu, 13 Oct 2011 01:38:48 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:5cd9735c-883a-4e92-9185-acdeca654a34</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-155743</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Puma espera shoes</title>
      <description>&lt;p&gt;Both styles were seen in the World Cup worn by Eusebio da Silva Ferreira and in the Olympics worn by Lee Evans and Thomas Smith. Rudolf passed in 1974 of lung cancer, and his son ran the company. In 1989, Armin and Gerd Dassler sold Puma to Cosa Liebermann for a unknown amount. Since Puma was seen on the soccer field many years ago it&#8217;s still very popular with the players and fans. Puma offers tons of styles to pick from and with the basic look they never go out of style. Puma will be around for a very very long time.&lt;/p&gt;</description>
      <pubDate>Tue, 27 Sep 2011 02:30:47 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:964e4a7b-3f91-48bf-a508-f8365b826080</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-145917</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by beats by dre store</title>
      <description>&lt;p&gt;I really enjoyed reading it and will certainly share this post with my friends &lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;beats by dre sale&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;cheap beats by dre&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 02:48:40 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9ef8cb98-0fa2-4514-9a59-33423d1b93df</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-131622</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by beats by dre store</title>
      <description>&lt;p&gt;e, I really enjoyed reading it and will certainly share this post with &lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;beats by dre sale&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;cheap beats by dre&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 02:46:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:3e118481-5d31-4c7a-b94c-7d1729962256</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-131621</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Crystal Jewellery</title>
      <description>&lt;p&gt;Great post! Nice and informative, I really enjoyed reading it and will certainly share this post with my friends .  Read everything you ever wanted to know about  &lt;a href="http://www.jewelleryxy.com/how-to-buy-gold.html" rel="nofollow"&gt;how to buy gold jewelry&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 18 Aug 2011 12:24:57 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:17d3aa80-7323-4f01-a756-43cb23f67aef</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-129478</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Bowtrol</title>
      <description>&lt;p&gt;Blog posts about wedding and bridal are always rare to find , at least with great quality,you qualify for a great blog post writer title,kep the great job happening&lt;/p&gt;</description>
      <pubDate>Mon, 08 Aug 2011 16:36:27 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f62d50d5-8924-459e-8d47-82b7763cb879</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-125783</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by hancy</title>
      <description>&lt;p&gt;It&amp;#8217;s a lucky day!I get one pair of women heels from &lt;a href="http://www.aliexpress.com/fm-store/908014" rel="nofollow"&gt;http://www.aliexpress.com/fm-store/908014&lt;/a&gt; ! It&amp;#8217;s have beautiful appearance and very comfortable! Here&#8217;s your first look at the first Women&#8217;s  Heels that I have ever seen. I do believe this is the first time our store has released a Women&#8217;s Heels in a high top form.&lt;/p&gt;</description>
      <pubDate>Sun, 24 Jul 2011 04:30:11 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:72320b67-b4ad-4556-b4a5-76b3e822d23d</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-119748</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by http://www.coachoutletstore-onlines.com</title>
      <description>&lt;p&gt;only do what you want to do&lt;/p&gt;</description>
      <pubDate>Thu, 30 Jun 2011 20:48:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:72f4aea5-6648-4df1-b92c-95446e3485e4</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-113420</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by cookies gift baskets</title>
      <description>&lt;p&gt;it needs a bokmark so i can come back to it later ,nice stuff&lt;/p&gt;</description>
      <pubDate>Sun, 19 Jun 2011 11:16:15 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:14bee08f-b71a-4c71-a3aa-a8f74d77541d</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-112450</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by commission predators</title>
      <description>&lt;p&gt;It&#8217;s amazing how interesting it is for me to visit you very often.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Jun 2011 11:27:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:b4a61b9b-22e6-4612-a7d8-2f694ada2602</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-111804</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Jewellery</title>
      <description>&lt;p&gt;Online UK costume and fashion jewellery shop with,&lt;/p&gt;


	&lt;p&gt;Online UK costume and fashion jewellery shop with,&lt;/p&gt;


	&lt;p&gt;Online UK costume and fashion jewellery shop with,&lt;/p&gt;


	&lt;p&gt;Online UK costume and fashion jewellery shop with,&lt;/p&gt;</description>
      <pubDate>Sat, 04 Jun 2011 05:51:18 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:8fcf2c6f-a9ec-4d07-af71-162d44b2e17d</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-108047</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by christian louboutin shoes on sale</title>
      <description>&lt;p&gt;Have the &lt;a href="http://www.blacklouboutinshoes.com/pumps-c-2.html" rel="nofollow"&gt;christian louboutin patent leather pumps&lt;/a&gt;  is a happy thing. 
Here have the most complete kinds of  &lt;a href="http://www.blacklouboutinshoes.com/platforms-c-3.html" rel="nofollow"&gt;christian louboutin leather platform pumps&lt;/a&gt;.&lt;/p&gt;</description>
      <pubDate>Fri, 03 Jun 2011 07:09:36 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:161f0a66-5d4a-4566-ac29-7c82060c312f</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-107675</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by Monster Beats By Dr. Dre Studio</title>
      <description>&lt;p&gt;The &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-studio-c-3.html" rel="nofollow"&gt;Monster Beats By Dr. Dre Studio Headphones&lt;/a&gt; are classic shoes.You will be proud of owning them.
Don&amp;#8217;t hesitate!Take &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-pro-c-4.html" rel="nofollow"&gt;Monster Beats By Dr. Dre Pro&lt;/a&gt; home!
Choose our &lt;a href="http://www.drebeatsstudio.com/beats-by-dr-dre-solo-c-5.html" rel="nofollow"&gt;Monster Beats By Dr. Dre Solo Headphones&lt;/a&gt; will make you have an amazing discovery.&lt;/p&gt;</description>
      <pubDate>Sat, 28 May 2011 21:23:42 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ddc632f0-7acd-4190-b8ce-fea795f920ad</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-104518</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by f350 leveling kit</title>
      <description>&lt;p&gt;Your article is so informative and I like it Thanks :-)&lt;/p&gt;</description>
      <pubDate>Fri, 13 May 2011 00:44:16 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:01b8ba0b-79e9-40fb-a5c4-8820be9493ba</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-99193</link>
    </item>
    <item>
      <title>"Traits vs. Aspects in Scala" by leveling kit f250</title>
      <description>&lt;p&gt;Your article is so informative and I like it Thanks :-)&lt;/p&gt;</description>
      <pubDate>Fri, 13 May 2011 00:43:52 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:f4780806-1ea7-44c1-9b84-3c026db466d4</guid>
      <link>http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala#comment-99192</link>
    </item>
  </channel>
</rss>

