<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Polymorphie und moderne Compiler]]></title><description><![CDATA[<p>Gibt es mittlerweile schon neue Ansätze um Anwendungen die sehr stark von Polymorphie gebrauch machen, Frameworks z. B., besser zu optimieren? Wenn ja wie sehen diese Ansätze aus? Wieso können Sprachen wie Java und C# Polymorphie besser optimieren als statische C++ Compiler? Liegt das an der späten Übersetzung in Binärcode, so dass man genau weiß von welchem Typ ein Objekt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169874/polymorphie-und-moderne-compiler</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 17:13:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169874.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Jan 2007 19:46:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Tue, 09 Jan 2007 19:46:14 GMT]]></title><description><![CDATA[<p>Gibt es mittlerweile schon neue Ansätze um Anwendungen die sehr stark von Polymorphie gebrauch machen, Frameworks z. B., besser zu optimieren? Wenn ja wie sehen diese Ansätze aus? Wieso können Sprachen wie Java und C# Polymorphie besser optimieren als statische C++ Compiler? Liegt das an der späten Übersetzung in Binärcode, so dass man genau weiß von welchem Typ ein Objekt ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206544</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206544</guid><dc:creator><![CDATA[Compilerbauer]]></dc:creator><pubDate>Tue, 09 Jan 2007 19:46:14 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 03:51:47 GMT]]></title><description><![CDATA[<p>Können sie das denn?<br />
Bei Java ist halt ein Punkt wichtig, nämlich dass das Ding bloss einfache Vererbung kann -- da ergeben sich viele Probleme nicht.</p>
<p>Und die einzigen Dinge die nach meinem Kenntnisstand in C++ wirklich weh tun sind virtuelle Basisklassen und dynamic casts. Ggf. noch typeid, bloss das braucht man eh sogut wie nie (ich zumindest).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206738</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 10 Jan 2007 03:51:47 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 07:45:23 GMT]]></title><description><![CDATA[<p>Was bitte ist ein statischer Compiler?<br />
Und was verstehst du unter Optimieren?<br />
Wenn das Klassenmodell in C++ mit dem in Java und C# übereinstimmt sehe ich keinen Grund wieso ein C++-Compiler nicht ähnliche Ergebnisse in Maschinencode liefern könnte.<br />
Wenn du natürlich ein Klassenmodell, das alle Merkmale von C++ ausschöpft und ein Klassenmodell, das alle Merkmale von Java ausschöpft, als Basis deines Vergleichs heranziehst... sieht die Sache anders aus.<br />
Dann ist dies aber ein Vergleich von Äpfeln mit Birnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206783</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Wed, 10 Jan 2007 07:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 08:34:46 GMT]]></title><description><![CDATA[<p>Compilerbauer schrieb:</p>
<blockquote>
<p>Gibt es mittlerweile schon neue Ansätze um Anwendungen die sehr stark von Polymorphie gebrauch machen, Frameworks z. B., besser zu optimieren? Wenn ja wie sehen diese Ansätze aus? Wieso können Sprachen wie Java und C# Polymorphie besser optimieren als statische C++ Compiler? Liegt das an der späten Übersetzung in Binärcode, so dass man genau weiß von welchem Typ ein Objekt ist?</p>
</blockquote>
<p>Naja, du stellst Behauptungen an, ohne Fakten und Begründungen zu liefern. Was sollen wir dir da also für eine Antwort liefern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206802</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 10 Jan 2007 08:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 08:46:38 GMT]]></title><description><![CDATA[<p>Ich finde leider gerade keinen Link, aber als Hinweis für die Suche: VM-Sprachen (Java, .NET) verwenden Heuristiken, um die Sprungziele von virtuellen Funktionsaufrufen im Voraus zu bestimmen. Auf diese Weise schaffen sie es, Aufrufe einer Methode für ein Interface in vielen Fällen enorm zu beschleunigen.</p>
<p>Ich weiß nicht genau wie das geht, es ist aber im Prinzip so, dass das konkrete Sprungziel in einer Variable gespeichert wird, wenn ein spezielles Objekt X fast immer verwendet wird (und kein anderes Objekt Y). Statt nun einen virtuellen Aufruf à la X-&gt;foo() zu tätigen, macht die VM folgendes (vereinfacht):</p>
<pre><code class="language-cpp">if (X == saved_obj_ptr) CALL saved_foo_location
else CALL VIRTUAL X-&gt;foo()
</code></pre>
<p>Und reduziert den virtuellen Funktionsaufruf so zu einer If-Abfrage und einem einfachen CALL-Statement.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206828</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 10 Jan 2007 08:46:38 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 08:56:59 GMT]]></title><description><![CDATA[<p>Und du meinst, daß dieser if-Aufruf und der einfache call schneller sein soll, als ein call über die vtable?</p>
<p>Hast Du mal virtuelle und statische Funktionsaufrufe gebenchmarkt? Du kommst wahrscheinlich auf Resultate, wo der virtuelle Funktionsaufruf gar nicht so teuer ist. Es ist ein hartnäckiges Gerücht, daß virtuelle Funktionsaufrufe teurer sind, als statische. Das mag sein, daß da ein halber Taktzyklus verschwendet wird, aber das spielt sich in einem Bereich ab, der in aller Regel vernachlässigbar ist.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206868</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 10 Jan 2007 08:56:59 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 09:28:49 GMT]]></title><description><![CDATA[<p>Die Informationen habe ich aus einer Vorlesung zu dem oben genannten Thema. Ich schrieb nicht, dass VM-Sprachen bessere Perfromance erzielen, sondern nur das sie <strong>angeblich</strong> aufgrund der vielen Laufzeit Infos Code besser optimieren können. Das meinte ich mit &quot;statisch&quot;, C++ erzeugt optimierten Binärcode zur Compilezeit, VM-Sprachen erzeugen Binärcode beim erstmaligen Aufruf und optimieren diesen ständig weiter(HotSpot).</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und die einzigen Dinge die nach meinem Kenntnisstand in C++ wirklich weh tun sind <strong>virtuelle Basisklassen</strong> und dynamic casts. Ggf. noch typeid, bloss das braucht man eh sogut wie nie (ich zumindest).</p>
</blockquote>
<p>Genau das ist dann starker Gebrauch von Polymorphie. Ich habe eine rein abstrakte(virtual) Basisschicht mit vielen Klassen, für welche es dann verschiedene Implementierungen gibt.</p>
<p>Artchi schrieb:</p>
<blockquote>
<p>Compilerbauer schrieb:</p>
<blockquote>
<p>Gibt es mittlerweile schon neue Ansätze um Anwendungen die sehr stark von Polymorphie gebrauch machen, Frameworks z. B., besser zu optimieren? Wenn ja wie sehen diese Ansätze aus? Wieso können Sprachen wie Java und C# Polymorphie besser optimieren als statische C++ Compiler? Liegt das an der späten Übersetzung in Binärcode, so dass man genau weiß von welchem Typ ein Objekt ist?</p>
</blockquote>
<p>Naja, du stellst Behauptungen an, ohne Fakten und Begründungen zu liefern. Was sollen wir dir da also für eine Antwort liefern?</p>
</blockquote>
<p>Meine Frage war ja genau, wie teuer denn virtuelle Funktionsaufrufe bei heutigen Compilern wirklich sind. Das Java und C# mit der HotSpot Technik genau dieses Problem sehr gut lösen findet man überall im Netz. Aber warum sollte man das mit C++ nicht auch tun können? Profiler erzeugen doch auch Zusatzinformationen bei den Testläufen.</p>
<p>tntnet schrieb:</p>
<blockquote>
<p>Hast Du mal virtuelle und statische Funktionsaufrufe gebenchmarkt? Du kommst wahrscheinlich auf Resultate, wo der virtuelle Funktionsaufruf gar nicht so teuer ist. Es ist ein hartnäckiges Gerücht, daß virtuelle Funktionsaufrufe teurer sind, als statische. Das mag sein, daß da ein halber Taktzyklus verschwendet wird, aber das spielt sich in einem Bereich ab, der in aller Regel vernachlässigbar ist.</p>
</blockquote>
<p>Hast Du dazu Benchmarks, Artikel oder andere Links zum Nachlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206907</guid><dc:creator><![CDATA[Compilerbauer]]></dc:creator><pubDate>Wed, 10 Jan 2007 09:28:49 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 09:50:37 GMT]]></title><description><![CDATA[<p>Zu der Polymorphie: es kostet immer irgendwie Rechenzeit (Taktzyklen) um herauszufinden oder zu bestimmen, welcher konkrete Typ zur Laufzeit auftaucht. Man kann das über vtables lösen oder durch switch/cases (ich bleib mal bei Pseudocode-Formulierungen). So, da kommt auch eine VM nicht drum herum. Deshalb verstehe ich die Bedenken nicht.</p>
<p>Was die Heuristik zur Laufzeit angeht. Das was die VM-Hersteller können, können die C++-Compiler schon lange. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Sowohl Intel als auch MS haben in ihren Compilern eine PGO (Profile Guided Optimierung). Das ganze funktioniert ähnlich einem Hotspot, der anhand von häufigkeiten von Situationen einen optimierten Code erstellt. Dazu muß einfach der Entwickler den PGO einschalten (sinnvollerweise nur für ein Release-Build) und das Programm einmal laufen lassen. Natürlich mit einem Probelaufszenario, z.B. würde in einem Egoshooter der Entwickler eine Runde rumlaufen und rumballern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Hört sich schräg an, gell? Aber anhand eines solchen realen Falls macht der PGO ein Protokoll und kann nachträglich einen optimierteren Build erstellen.</p>
<p>D.h. es gibt hier Lösungen. Man sollte nicht glauben, das die C++-Zeit stehen geblieben ist. Ganz im Gegenteil, die Firmen wie Portland Group, Intel, MS usw. wollen Highformance-Kunden bedienen und tun dies auch mit sehr guten Compilern. Deshalb kosten die auch genug Geld. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Der MSVC 2005 Express-Compiler z.B. ist kostenlos, hat Codeoptimierung (!), aber PGO (also dieses eine nette Feature) bekommt man z.B. erst in der Pro-Version. Aber es gibt sie!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206920</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 10 Jan 2007 09:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 10:09:43 GMT]]></title><description><![CDATA[<p>Artchi schrieb:</p>
<blockquote>
<p>Sowohl Intel als auch MS haben in ihren Compilern eine PGO (Profile Guided Optimierung). Das ganze funktioniert ähnlich einem Hotspot, der anhand von häufigkeiten von Situationen einen optimierten Code erstellt. Dazu muß einfach der Entwickler den PGO einschalten (sinnvollerweise nur für ein Release-Build) und das Programm einmal laufen lassen. Natürlich mit einem Probelaufszenario, z.B. würde in einem Egoshooter der Entwickler eine Runde rumlaufen und rumballern. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Hört sich schräg an, gell? Aber anhand eines solchen realen Falls macht der PGO ein Protokoll und kann nachträglich einen optimierteren Build erstellen.</p>
</blockquote>
<p>und was ist wenn jemand anders einen anderen kurs läuft und statt mit 'ner bazooka mit'm säbel kämpft? läuft das programm dann saulangsam oder muss eine neue .exe erstellt werden?<br />
ich denke vm's haben den vorteil, dass sie sowas 'online' optimieren können...<br />
:xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206955</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Wed, 10 Jan 2007 10:09:43 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 10:19:01 GMT]]></title><description><![CDATA[<p>Also ich bezweifel mal, das es bei PGO um Typ-Findung geht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Noch werden vtables in C++ benutzt. Aber Hotspots optimieren ja wohl genug andere Dinge. Darum ging es mir. Ohne PGO läuft ein Programm auch nicht saulangsam. Es kann durch PGO höchstens noch schneller werden. Oder sind alle C++Compiler ohne PGO unbrauchbar? Wollen wir jetzt hier einen VM vs. C++ Compiler Flamewar anzetteln? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
<p>Deine Frage ist ziemlich kätzerich und hat einen Hauch von Verfolgungswahn bzgl. C++-Code. Bleiben wir mal lieber bei den Tatsachen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und wenn es um VM vs. C++ Compiler gehen soll, dann bitte einen neuen Thread im &quot;Rund um die Programmierung&quot; anfangen. Hier im Forum gehts um C++.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206964</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 10 Jan 2007 10:19:01 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 11:30:56 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Und du meinst, daß dieser if-Aufruf und der einfache call schneller sein soll, als ein call über die vtable?</p>
</blockquote>
<p>Ich meine gar nichts. Aber sowohl Microsoft als auch Sun haben anscheinend einschlägige Studien, die das bestätigen. Wie gesagt finde ich die Links leider nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207005</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 10 Jan 2007 11:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 11:55:44 GMT]]></title><description><![CDATA[<p>Ist ja nicht so, dass ein C++ Compiler das nicht auch kann. Wenn er schon zur Laufzeit weiss welchen Typ ein Objekt hat braucht er kein Lookup in der vtable (oder wie auch immer das realisert ist), sondern kann direkt die Richtige Funktion aufrufen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207019</guid><dc:creator><![CDATA[Entenwickler]]></dc:creator><pubDate>Wed, 10 Jan 2007 11:55:44 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 12:05:04 GMT]]></title><description><![CDATA[<p>dsadsadsadasiudsaziudsaoid sdfsfdsfdsdsadsadsafdafds dsfdsf ???????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207026</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207026</guid><dc:creator><![CDATA[Ahnunjfdidsa]]></dc:creator><pubDate>Wed, 10 Jan 2007 12:05:04 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 12:09:49 GMT]]></title><description><![CDATA[<p>Entenwickler schrieb:</p>
<blockquote>
<p>Wenn er schon zur Laufzeit weiss welchen Typ ein Objekt hat braucht er kein Lookup in der vtable (oder wie auch immer das realisert ist), sondern kann direkt die Richtige Funktion aufrufen.</p>
</blockquote>
<p>du meinst zur compilezeit, ne?</p>
<p>btw: gibt's eigentlich c++ taugliche prozessoren? welche mit einem oo-like instruction set und vtable-lookup in der hardware?<br />
:xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207030</guid><dc:creator><![CDATA[ten]]></dc:creator><pubDate>Wed, 10 Jan 2007 12:09:49 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 12:32:04 GMT]]></title><description><![CDATA[<p>Ja irgendwie verdacht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207048</guid><dc:creator><![CDATA[Entenwickler]]></dc:creator><pubDate>Wed, 10 Jan 2007 12:32:04 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 12:50:22 GMT]]></title><description><![CDATA[<p>Ich habe hier mal einen kleinen Benchmark gemacht. Folgendes Programm:<br />
a.h:</p>
<pre><code class="language-cpp">#ifndef A_H
#define A_H

class B
{
  public:
    virtual void inc_v() = 0;
};

class A : public B
{
    unsigned a;

    A() : a(0) {}
    static A theA;

  public:

    unsigned get() const  { return a; }
    void reset()          { a = 0; }

    void inc_v();
    void inc_s();
    void inc_i()  { ++a; }

    static A&amp; getA();
    static A* getP();
};

#endif
</code></pre>
<p>a.cpp:</p>
<pre><code class="language-cpp">#include &quot;a.h&quot;

A A::theA;

void A::inc_v()
{ ++a; }

void A::inc_s()
{ ++a; }

A&amp; A::getA()
{
  return theA;
}

A* A::getP()
{
  return &amp;theA;
}
</code></pre>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &quot;a.h&quot;
#include &lt;sys/time.h&gt;
#include &lt;iostream&gt;

#define T(what, expr, get) \
  a.reset();                   \
  gettimeofday(&amp;t0, 0);                   \
  for (unsigned i = 0; i &lt; max; ++i)                   \
    expr;                   \
  gettimeofday(&amp;t1, 0);                   \
  std::cout &lt;&lt; what &quot;: &quot; &lt;&lt; (get) &lt;&lt; ' ' &lt;&lt; tv2d(t1) - tv2d(t0) &lt;&lt; std::endl;

double tv2d(const timeval&amp; tv)
{
  return static_cast&lt;double&gt;(tv.tv_sec) + static_cast&lt;double&gt;(tv.tv_usec) / 1e6;
}

int main()
{
  A&amp; a = A::getA();
  A* p = A::getP();

  timeval t0, t1;
  const unsigned max = 1e8;

  T(&quot;virtual via ref&quot;, a.inc_v(), a.get());
  T(&quot;static via ref &quot;, a.inc_s(), a.get());
  T(&quot;inline via ref &quot;, a.inc_i(), a.get());
  T(&quot;virtual via ptr&quot;, p-&gt;inc_v(), p-&gt;get());
  T(&quot;static via ptr &quot;, p-&gt;inc_s(), p-&gt;get());
  T(&quot;inline via ptr &quot;, p-&gt;inc_i(), p-&gt;get());
}
</code></pre>
<p>Das ganze compiliert mit &quot;$(CXX) -o a a.cpp main.cpp&quot; und ausgeführt liefert, wie lange es dauert, um eine einfache Methode aufzurufen. $(CXX) ist natürlich mit dem zu testenden Compiler zu ersetzen. Zusätzlich sollte der Compiler angewiesen werden, zu optimieren. Mit den Optimierungsstufen könnt ihr ein wenig rum spielen. Ich habe hier gerade ein AIX-System vorliegen. Der Compiler heißt xlC und unterstützt mehrere Optimierungsstufen. Die Ergebnisse:</p>
<p>ohne Optimierung:<br />
virtual via ref: 100000000 3.93702<br />
static via ref : 100000000 1.29718<br />
inline via ref : 100000000 1.82919<br />
virtual via ptr: 100000000 3.88433<br />
static via ptr : 100000000 1.83586<br />
inline via ptr : 100000000 1.24874</p>
<p>mit -O2:<br />
virtual via ref: 100000000 1.69642<br />
static via ref : 100000000 0.531626<br />
inline via ref : 100000000 0<br />
virtual via ptr: 100000000 1.70686<br />
static via ptr : 100000000 0.790132<br />
inline via ptr : 100000000 0.534315</p>
<p>mit -O5:<br />
virtual via ref: 100000000 1.63159<br />
static via ref : 100000000 1.19209e-06<br />
inline via ref : 100000000 9.53674e-07<br />
virtual via ptr: 100000000 1.57123<br />
static via ptr : 100000000 9.53674e-07<br />
inline via ptr : 100000000 9.53674e-07</p>
<p>Der virtuelle Aufruf benötigt ca. 3 mal so lange, wie der statische. Selbst bei einfacher Optimierung wird der inline-Aufruf vollständig weg optimiert. Interessant ist auch der Unterschied zwischen Zeiger und Referenz. Ein Aufruf über eine Referenz kann xlC offensichtlich leichter optimieren, als über Zeiger. Virtuelle Aufrufe kann xlC nie weg optimieren.</p>
<p>Virtuelle Aufrufe macht das System ca. 70 Mio./Sekunde. Das ist ein sehr hoher Wert und jeder sollte für sich entscheiden, wie relevant das dann noch ist.</p>
<p>Die Ergebnisse hängen natürlich stark vom Compiler und der CPU ab.</p>
<p>Und jetzt seid ihr dran. Es wäre schön, wenn ihr euren Compiler mal laufen lasst und die Ergebnisse hier veröffentlicht.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207067</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207067</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 10 Jan 2007 12:50:22 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 13:03:39 GMT]]></title><description><![CDATA[<p>Danke tntnet für Deine Mühe!</p>
<p>Mein System:<br />
AMD-64 - 3200+, Gentoo mit 2.6.17<br />
g++ (GCC) 3.4.3 20041125 (Gentoo 3.4.3-r1, ssp-3.4.3-0, pie-8.7.7)</p>
<p>Meine Ergbnisse:<br />
Ohne Optimierungen:</p>
<pre><code>virtual via ref: 100000000 1.10772
static via ref : 100000000 0.79737
inline via ref : 100000000 0.796589
virtual via ptr: 100000000 1.10443
static via ptr : 100000000 0.79685
inline via ptr : 100000000 0.819845
</code></pre>
<p>Mit O2:</p>
<pre><code>virtual via ref: 100000000 0.340091
static via ref : 100000000 0.400305
inline via ref : 100000000 0.127082
virtual via ptr: 100000000 0.38924
static via ptr : 100000000 0.352535
inline via ptr : 100000000 0.129175
</code></pre>
<p>Mit O3:</p>
<pre><code>virtual via ref: 100000000 0.335925
static via ref : 100000000 0.335889
inline via ref : 100000000 0.122384
virtual via ptr: 100000000 0.332823
static via ptr : 100000000 0.33279
inline via ptr : 100000000 0.12128
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1207087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207087</guid><dc:creator><![CDATA[Compilerbauer]]></dc:creator><pubDate>Wed, 10 Jan 2007 13:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 13:09:59 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>danke für die Arbeit !!<br />
Es bringt in meinem Fall nicht viel, selbst Ergebnisse zu liefern, weil ich auch den xLC unter AIX habe.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Aber es sind einige sehr interessante Sachen dabei !!</p>
<p>z.B: hätte ich Folgendes spontan nicht erwartet (bin allerdings auch kein &quot;Optimierer&quot;):</p>
<p>tntnet schrieb:</p>
<blockquote>
<p>..<br />
ohne Optimierung:<br />
static via ref : 100000000 1.29718<br />
inline via ref : 100000000 1.82919</p>
</blockquote>
<p>Inline 50% langsamer als static <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>tntnet schrieb:</p>
<blockquote>
<p>..<br />
ohne Optimierung:<br />
static via ref : 100000000 1.29718<br />
static via ptr : 100000000 1.83586</p>
</blockquote>
<p>Pointer 50% langsamer als Referenz <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>tntnet schrieb:</p>
<blockquote>
<p>..<br />
mit -O5:<br />
static via ref : 100000000 1.19209e-06</p>
</blockquote>
<p>Da wird doch wohl auch ein inline hinterstecken, oder ?</p>
<p>Danke,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207094</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 10 Jan 2007 13:09:59 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 13:11:05 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9578">@tntnet</a>: Zum Vergleich könntest du auch noch die selben Aufrufe für ein Stack-Objekt <code>A ob;</code> durchführen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Da dürfte der Compiler auch eine Chance haben, die virtuellen Aufrufe zu optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207096</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 10 Jan 2007 13:11:05 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 13:15:12 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>..<br />
ohne Optimierung:<br />
static via ref : 100000000 1.29718<br />
inline via ref : 100000000 1.82919</p>
</blockquote>
<p>Inline 50% langsamer als static <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Halte ich z.B. für unrealistisch. Sind solche Benchmark-Ergebnisse signifikant? Handelt es sich da vll. um reine Zufallsergebnisse weil die Unterschiede zu klein sind? Wie sieht der Assember-Code davon aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207101</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207101</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 10 Jan 2007 13:15:12 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 13:53:20 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9578">@tntnet</a>: Zum Vergleich könntest du auch noch die selben Aufrufe für ein Stack-Objekt <code>A ob;</code> durchführen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Da dürfte der Compiler auch eine Chance haben, die virtuellen Aufrufe zu optimieren.</p>
</blockquote>
<p>Ok. Ich hatte das weggelassen, da ich das nicht für relevant halte, aber Du hast schon recht, daß man das natürlich auch verifizieren könnte. Also habe ich folgende Änderungen gemacht:</p>
<p>[<em>] in a.h den Konstruktor public gemacht<br />
[</em>] eine Zusätliche Deklaration &quot;A s;&quot;<br />
[*] folgende neue Tests:</p>
<pre><code class="language-cpp">T(&quot;virtual auf stack&quot;, s.inc_v(), s.get());
  T(&quot;static auf stack&quot;, s.inc_s(), s.get());
  T(&quot;inline auf stack&quot;, s.inc_i(), s.get());
</code></pre>
<p>Die Resultate:</p>
<p>ohne Optimierung:<br />
virtual auf stack: 100000000 1.04899<br />
static auf stack: 200000000 1.84272<br />
inline auf stack: 300000000 3.08779</p>
<p>mit -O2:<br />
virtual auf stack: 100000000 0.685513<br />
static auf stack: 200000000 0.689291<br />
inline auf stack: 300000000 9.53674e-07</p>
<p>und mit -O5:<br />
virtual auf stack: 100000000 1.19209e-06<br />
static auf stack: 200000000 9.53674e-07<br />
inline auf stack: 300000000 1.19209e-06</p>
<p>An der Stelle fällt mir auf, daß der reset-Aufruf falsch ist. Aber das ist ja egal. Merkwürdig ist, daß ohne Optimierung die Geschwindigkeit genau verdreht ist. Ansonsten wird der virtuelle Aufruf durch eine statischen Aufruf ersetzt.</p>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>tntnet schrieb:</p>
<blockquote>
<p>..<br />
ohne Optimierung:<br />
static via ref : 100000000 1.29718<br />
inline via ref : 100000000 1.82919</p>
</blockquote>
<p>Inline 50% langsamer als static <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Halte ich z.B. für unrealistisch. Sind solche Benchmark-Ergebnisse signifikant? Handelt es sich da vll. um reine Zufallsergebnisse weil die Unterschiede zu klein sind? Wie sieht der Assember-Code davon aus?</p>
</blockquote>
<p>Unrealistisch? Das geht aus der Konsole direkt über die Zwischenablage in den Browser. Mehrfache Wiederholungen bringen sehr ähnliche Ergebnisse.</p>
<p>Ein Resümee für mich (und Bestätigung meiner bisherigen Vorgehensweise): Programmiere so, wie es richtig ist und überlasse dem Compiler die Optimierung (zumindest auf dieser Ebene). Algorithmen sind Aufgabe des Entwicklers, die einzelnen Bits und Bytes an die richtige Stelle zu schieben, macht der Compiler.</p>
<p>Höhere Optimierungslevel verlängern aber die Compilezeit beträchtlich, so daß man beim Entwickeln sparsam damit umgehen sollte.</p>
<p>Tntnet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207135</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Wed, 10 Jan 2007 13:53:20 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 14:11:02 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>Halte ich z.B. für unrealistisch. Sind solche Benchmark-Ergebnisse signifikant? Handelt es sich da vll. um reine Zufallsergebnisse weil die Unterschiede zu klein sind? Wie sieht der Assember-Code davon aus?</p>
</blockquote>
<p>Unrealistisch? Das geht aus der Konsole direkt über die Zwischenablage in den Browser. Mehrfache Wiederholungen bringen sehr ähnliche Ergebnisse.</p>
</blockquote>
<p>Na ja, ich wollte nicht behaupten, dass Du die Ergebnisse fälschst sondern dass der Compiler entweder Deine Inline-Anweisung missachtet oder dass die Ergebnisse einfach so gering unterschiedlich sind, dass die angezeigten Unterschiede durch andere Faktoren zustande kommen.</p>
<p>In jedem Fall halte ich solche Ergebnisse für unzuverlässig solange man nicht das tatsächliche Ergebnis des Compilers anschaut --&gt; als den Assemblercode. Die Zahlen weisen hier z.B. deutlich darauf hin, dass inc_i eben *nicht* ge-inlined wird. Wie kann man diese Ergebnisse sonst erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207151</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Wed, 10 Jan 2007 14:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 15:05:28 GMT]]></title><description><![CDATA[<p>Wie Konrad schon sagt, solche Ergebnisse als signifikante Benchmark-Ergebnisse zu sehen wäre falsch.<br />
Jedoch finde ich zeigen sie sehr gut das Compiler nicht spezifiziert sind wie was zu Optimieren ist bzw wie sie vorgehen, rein sprachlich bedingt.<br />
Das fängt an das sie Übergabewerte in der Reinfolge von links nach rechts oder von rechts nach links erstellen können, das sie Rechnungen mit Konstanten zur Kompilezeit ausrechen oder nicht usw... Auch das inline Schlüsselwort ist leider nicht &quot;zuverlässig&quot; da es nur als eventuelle Optimierung gedacht ist, der Compiler jedoch nicht verplichtet ist es umzusetzten. Im Gegenzug kann er aber jede Funktion als inline erstellen auch wenn diese nicht als solche gekennzeichent ist.</p>
<p>Ganz im Gegensatz zum Java(Sun) Standart, dort steht genau beschrieben wie alles zu geschehen hat. Ob sich da alle Compiler und VM Hersteller dran halten ist wieder eine andere Sache.</p>
<p>Auch muss ich Tntnet zustimmen, programmiere so wie es (für das Team/Dich) richtig ist und überlass dem Compiler den Rest (Bitoptimierung).</p>
<p>Falls man wirklich Optimieren muss/will sollte man sich ohnehin nur auf den Code beschrenken der Performance relevant ist. Was Erfahrungsgemäß höchstens 1/4 ist, den Rest kann man getrost so lassen wie er ist.</p>
<p>Natürlich kosten virtuelle Aufrufe mehr Zeit als statische oder inline Derivate , jedoch würde ich als letztes anfangen diese zu Optimieren. Was die virtuellen Basisklassen betrifft sollte man normalerweise schon eine Menge Performance sparen wenn man sie als reines Interface deklariert. (Schon komisch das Java genau das macht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> )</p>
<p>Zum Schluß möchte ich noch loswerden das ich sowas schon als &quot;Schwanzvergleichen&quot; betrachte wenn man Java und C++ Performance mäßig gegenüberstellt. Java ist nicht die schnellste Sprache doch dafür wurde sie auch nicht konzepiert. Wie dem auch sei, ich zieh mich hier auch besser zurück bevor mich hinreißen lasse.</p>
<p>Baracke</p>
<p>PS: Das mit den Optimierungen bezüglich Compilern beruht nur auf sogenannten erlesem Wissen weniger auf überprüften <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207186</guid><dc:creator><![CDATA[Wieder_zu_Faul]]></dc:creator><pubDate>Wed, 10 Jan 2007 15:05:28 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 15:42:35 GMT]]></title><description><![CDATA[<p>hab einen test unter win32 gemacht.</p>
<p>os: WinXP SP2<br />
prozessor: Pentium D (3.4 GHz)<br />
ram: 2 GB<br />
compiler: g++ 3.4.5</p>
<p>Habe mal wegen Konrad Rudolphs Einwand bzgl. der kleinen Zeiten den max Wert auf 1e9 gestellt:</p>
<p><strong>ohne optimierung, mit debug-info (-g):</strong></p>
<blockquote>
<p>virtual via ref: 1000000000 6.27763<br />
static via ref : 1000000000 5.82477<br />
inline via ref : 1000000000 5.73107<br />
virtual via ptr: 1000000000 6.30886<br />
static via ptr : 1000000000 5.65299<br />
inline via ptr : 1000000000 5.66861</p>
</blockquote>
<p><strong>mit optimierung (-O2)</strong></p>
<blockquote>
<p>virtual via ref: 1000000000 5.88723<br />
static via ref : 1000000000 3.76346<br />
inline via ref : 1000000000 0.062464<br />
virtual via ptr: 1000000000 5.91846<br />
static via ptr : 1000000000 3.84154<br />
inline via ptr : 1000000000 0.593408</p>
</blockquote>
<p><strong>mit optimierung (-O3)</strong></p>
<blockquote>
<p>virtual via ref: 1000000000 6.04339<br />
static via ref : 1000000000 1.93638<br />
inline via ref : 1000000000 1.93638<br />
virtual via ptr: 1000000000 6.09024<br />
static via ptr : 1000000000 1.93638<br />
inline via ptr : 1000000000 1.93638</p>
</blockquote>
<p>Wie tntnet schon sagte im Normalfall, reicht die Performance von virtual (1 Milliarde Aufrufe in ca. 6 Sekunden).</p>
<p>Würde mich mal interessieren wie lange Java/.NET für 1e9 einfache, virtuelle Aufrufe brauchen.</p>
<p>Wieder_zu_Faul schrieb:</p>
<blockquote>
<p>Zum Schluß möchte ich noch loswerden das ich sowas schon als &quot;Schwanzvergleichen&quot; betrachte wenn man Java und C++ Performance mäßig gegenüberstellt. Java ist nicht die schnellste Sprache doch dafür wurde sie auch nicht konzepiert. Wie dem auch sei, ich zieh mich hier auch besser zurück bevor mich hinreißen lasse.</p>
</blockquote>
<p>Wenn ich die Möglichkeit habe unter verschiedenen Schwänzen zu wählen, vergleiche ich sie auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207206</guid><dc:creator><![CDATA[schorsch code]]></dc:creator><pubDate>Wed, 10 Jan 2007 15:42:35 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 15:49:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn ich die Möglichkeit habe unter verschiedenen Schwänzen zu wählen, vergleiche ich sie auch</p>
</blockquote>
<p>Aber bitte nicht hier im C++ Forum. *brrr* Danke.</p>
<p>Im ernst, nicht schon wieder einen Java vs. C++ Thread. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> Nicht im ISO-C++-Forum!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1207210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207210</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Wed, 10 Jan 2007 15:49:54 GMT</pubDate></item><item><title><![CDATA[Reply to Polymorphie und moderne Compiler on Wed, 10 Jan 2007 19:52:10 GMT]]></title><description><![CDATA[<p>Compilerbauer schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Und die einzigen Dinge die nach meinem Kenntnisstand in C++ wirklich weh tun sind <strong>virtuelle Basisklassen</strong> und dynamic casts. Ggf. noch typeid, bloss das braucht man eh sogut wie nie (ich zumindest).</p>
</blockquote>
<p>Genau das ist dann starker Gebrauch von Polymorphie. Ich habe eine rein abstrakte(virtual) Basisschicht mit vielen Klassen, für welche es dann verschiedene Implementierungen gibt.</p>
</blockquote>
<p>Ich meinte &quot;virtual inheritance&quot;, nur falls da jetzt ein Misverständnis besteht. Also nicht rein abstrakte Basisklassen.<br />
Sowas halt:</p>
<pre><code class="language-cpp">class base {};
class derived : public virtual base {};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1207427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1207427</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 10 Jan 2007 19:52:10 GMT</pubDate></item></channel></rss>