<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.3.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: Was ich an Delphi überhaupt nicht mag</title>
	<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/</link>
	<description>Programming, reverse engineering and anything else as well ...</description>
	<pubDate>Tue, 06 Jan 2009 10:46:34 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.3</generator>
		<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21373</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Thu, 26 Jul 2007 15:12:14 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21373</guid>
		<description>Finde ich uebrigens eine Frechheit das nicht auch in BDS 2006 zu fixen. Immerhin ist das nicht gerade billig.</description>
		<content:encoded><![CDATA[<p>Finde ich uebrigens eine Frechheit das nicht auch in BDS 2006 zu fixen. Immerhin ist das nicht gerade billig.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21372</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Thu, 26 Jul 2007 15:09:27 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21372</guid>
		<description>"Alles da" nennst du das? Wenn wir mal weglassen, dass es da diesen kleinen Bug gibt der in Delphi 2007 gefixt ist, haben wir noch:

&lt;ul&gt;
&lt;li&gt;Records do not support inheritance.&lt;/li&gt;
&lt;li&gt;Records allow operator overloading on the Win32 and .NET platforms; classes allow operator overloading only for .NET.&lt;/li&gt;
&lt;li&gt;Record types cannot have destructors.&lt;/li&gt;
&lt;li&gt;Virtual methods (those specified with the virtual, dynamic, and message keywords) cannot be used in record types.&lt;/li&gt;
&lt;li&gt;Unlike classes, record types on the Win32 platform cannot implement interfaces; however, records on the .NET platform can implement interfaces.&lt;/li&gt;
&lt;/ul&gt;

Uebrigens interessiert mich immer nur Delphi for Win32, den Rest koennen'se knicken. Na gut, BCB vielleicht noch. Aber der Rest ist fuer mich mal eben uninteressant.

... das alles verstaerkt ja ehrlich gesagt meinen Eindruck, dass sich Delphi als ObjectPascal-Sprache in eine total falsche Richtung entwickelt. Tut mir leid, aber bei OOP erwarte ich ein wenig mehr als die Grundlagen. Ich meine C++ entwickelt sich auch staendig weiter. Aber vielleicht ist das gerade das Problem, Borland/Inprise/Borland/CodeGear/was-auch-immer-die-sich-gerade-schimpfen die einzigen sind die ueber die Sprache entscheiden (insbesondere seit man "Delphi" in den Rang einer Sprache erhoben hat). Bei C++ sind sowohl Anwender als auch die die es implementieren und diverse Experten involviert. Bei Delphi sind es ein paar Hanseln bei Borland/..., die natuerlich nur an ihr eigenes Produkt denken und keinen Deut weiter. Als Lohn werden sie dann auf Community-Treffen als Vordenker, Visionaere und Evangelisten ... yaddayadda ... gehypt, aber leisten tun die eigentlich nur was fuer ihre eigenen Produkte. Alles in allem schwach.

// Oliver

PS: Das mit dem Praeprozessor muss ich mal im Laufe des Abends testen.</description>
		<content:encoded><![CDATA[<p>&#8220;Alles da&#8221; nennst du das? Wenn wir mal weglassen, dass es da diesen kleinen Bug gibt der in Delphi 2007 gefixt ist, haben wir noch:</p>
<ul>
<li>Records do not support inheritance.</li>
<li>Records allow operator overloading on the Win32 and .NET platforms; classes allow operator overloading only for .NET.</li>
<li>Record types cannot have destructors.</li>
<li>Virtual methods (those specified with the virtual, dynamic, and message keywords) cannot be used in record types.</li>
<li>Unlike classes, record types on the Win32 platform cannot implement interfaces; however, records on the .NET platform can implement interfaces.</li>
</ul>
<p>Uebrigens interessiert mich immer nur Delphi for Win32, den Rest koennen&#8217;se knicken. Na gut, BCB vielleicht noch. Aber der Rest ist fuer mich mal eben uninteressant.</p>
<p>&#8230; das alles verstaerkt ja ehrlich gesagt meinen Eindruck, dass sich Delphi als ObjectPascal-Sprache in eine total falsche Richtung entwickelt. Tut mir leid, aber bei OOP erwarte ich ein wenig mehr als die Grundlagen. Ich meine C++ entwickelt sich auch staendig weiter. Aber vielleicht ist das gerade das Problem, Borland/Inprise/Borland/CodeGear/was-auch-immer-die-sich-gerade-schimpfen die einzigen sind die ueber die Sprache entscheiden (insbesondere seit man &#8220;Delphi&#8221; in den Rang einer Sprache erhoben hat). Bei C++ sind sowohl Anwender als auch die die es implementieren und diverse Experten involviert. Bei Delphi sind es ein paar Hanseln bei Borland/&#8230;, die natuerlich nur an ihr eigenes Produkt denken und keinen Deut weiter. Als Lohn werden sie dann auf Community-Treffen als Vordenker, Visionaere und Evangelisten &#8230; yaddayadda &#8230; gehypt, aber leisten tun die eigentlich nur was fuer ihre eigenen Produkte. Alles in allem schwach.</p>
<p>// Oliver</p>
<p>PS: Das mit dem Praeprozessor muss ich mal im Laufe des Abends testen.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Lehmann</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21364</link>
		<dc:creator>Daniel Lehmann</dc:creator>
		<pubDate>Thu, 26 Jul 2007 12:00:04 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21364</guid>
		<description>Das sollte eben natürlich "DateTime" nicht "TDateTime" heissen, weil man sonst ja den nativen Delphi Typ bekommt</description>
		<content:encoded><![CDATA[<p>Das sollte eben natürlich &#8220;DateTime&#8221; nicht &#8220;TDateTime&#8221; heissen, weil man sonst ja den nativen Delphi Typ bekommt</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Lehmann</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21363</link>
		<dc:creator>Daniel Lehmann</dc:creator>
		<pubDate>Thu, 26 Jul 2007 11:58:31 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21363</guid>
		<description>Destructoren fehlen bei Records. Konstruktoren gibt es, allerdings müssen sie Parameter haben. Und man kann einen Record auch ohne Constructor benutzen.

:)

Also im Prinzip alles da. Bei D2006 machen allerdings Compilerfehler die Benutzung recht kompliziert:

TDateTime.Create(2006, 1, 1).AddDays(1).TotalSeconds

sowas in der Art kann er nicht (unter Win32) :( In D2007 gefixed, aber nur wegen dieses Fixes kauf ich mir kein Update...</description>
		<content:encoded><![CDATA[<p>Destructoren fehlen bei Records. Konstruktoren gibt es, allerdings müssen sie Parameter haben. Und man kann einen Record auch ohne Constructor benutzen.</p>
<p> <img src='http://blog.assarbad.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Also im Prinzip alles da. Bei D2006 machen allerdings Compilerfehler die Benutzung recht kompliziert:</p>
<p>TDateTime.Create(2006, 1, 1).AddDays(1).TotalSeconds</p>
<p>sowas in der Art kann er nicht (unter Win32) <img src='http://blog.assarbad.net/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> In D2007 gefixed, aber nur wegen dieses Fixes kauf ich mir kein Update&#8230;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21362</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Thu, 26 Jul 2007 11:46:42 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21362</guid>
		<description>Okay, gerade gefunden:

&lt;blockquote&gt;Though records can now share much of the functionality of classes, there are some important differences between classes and records.
 
Records do not support inheritance. 
Records can contain variant parts; classes cannot. 
Records are value types, so they are copied on assignment, passed by value, and allocated on the stack unless they are declared globally or explicitly allocated using the New and Dispose function. Classes are reference types, so they are not copied on assignment, they are passed by reference, and they are allocated on the heap. 
Records allow operator overloading on the Win32 and .NET platforms; classes allow operator overloading only for .NET. 
Records are constructed automatically, using a default no-argument constructor, but classes must be explicitly constructed. Because records have a default no-argument constructor, any user-defined record constructor must have one or more parameters. 
Record types cannot have destructors. 
Virtual methods (those specified with the virtual, dynamic, and message keywords) cannot be used in record types. 
Unlike classes, record types on the Win32 platform cannot implement interfaces; however, records on the .NET platform can implement interfaces.&lt;/blockquote&gt;</description>
		<content:encoded><![CDATA[<p>Okay, gerade gefunden:</p>
<blockquote><p>Though records can now share much of the functionality of classes, there are some important differences between classes and records.</p>
<p>Records do not support inheritance.<br />
Records can contain variant parts; classes cannot.<br />
Records are value types, so they are copied on assignment, passed by value, and allocated on the stack unless they are declared globally or explicitly allocated using the New and Dispose function. Classes are reference types, so they are not copied on assignment, they are passed by reference, and they are allocated on the heap.<br />
Records allow operator overloading on the Win32 and .NET platforms; classes allow operator overloading only for .NET.<br />
Records are constructed automatically, using a default no-argument constructor, but classes must be explicitly constructed. Because records have a default no-argument constructor, any user-defined record constructor must have one or more parameters.<br />
Record types cannot have destructors.<br />
Virtual methods (those specified with the virtual, dynamic, and message keywords) cannot be used in record types.<br />
Unlike classes, record types on the Win32 platform cannot implement interfaces; however, records on the .NET platform can implement interfaces.</p></blockquote>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21361</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Thu, 26 Jul 2007 11:44:39 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21361</guid>
		<description>Okay okay. Wo ist der Konstruktor bei den records? In C++ sind class und struct auch das gleiche, bis auf die Tatsache, daß bei class implizit alles private ist und bei struct implizit alles public. Aber dort habe ich eben auch einen (oder mehrere) Konstruktoren und einen Destruktor, wenn ich ihn brauche. Das ist ziemlich handlich, wenn man objektorientiert um eine C-API herumprogrammiert.

// Oliver</description>
		<content:encoded><![CDATA[<p>Okay okay. Wo ist der Konstruktor bei den records? In C++ sind class und struct auch das gleiche, bis auf die Tatsache, daß bei class implizit alles private ist und bei struct implizit alles public. Aber dort habe ich eben auch einen (oder mehrere) Konstruktoren und einen Destruktor, wenn ich ihn brauche. Das ist ziemlich handlich, wenn man objektorientiert um eine C-API herumprogrammiert.</p>
<p>// Oliver</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Lehmann</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21357</link>
		<dc:creator>Daniel Lehmann</dc:creator>
		<pubDate>Thu, 26 Jul 2007 11:00:16 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21357</guid>
		<description>Nun der Unterschied ist halt, dass man sich in C++ beim Erzeugen eines Objektes entscheiden darf, während es in Delphi der Entwickler der Klasse entscheiden darf.

Vom Ergebnis her trotzdem das selbe, denn records mit Funktionen fühlen sich an wie Objekte und liegen auch nur auf dem Stack...?</description>
		<content:encoded><![CDATA[<p>Nun der Unterschied ist halt, dass man sich in C++ beim Erzeugen eines Objektes entscheiden darf, während es in Delphi der Entwickler der Klasse entscheiden darf.</p>
<p>Vom Ergebnis her trotzdem das selbe, denn records mit Funktionen fühlen sich an wie Objekte und liegen auch nur auf dem Stack&#8230;?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21356</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Thu, 26 Jul 2007 10:49:31 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21356</guid>
		<description>Was hat das jetzt mit Stackobjekten zu tun?

&lt;pre&gt;{
CWaitCursor temp(hourGlass);
// Mach was
}&lt;/pre&gt;

Aufräumen passiert beim Verlassen des Scopes. Das ist ein Stackobjekt. Es wurde nicht mit new erzeugt oder wie in Delphi mit

bla := TKlasse.Create();


// Oliver</description>
		<content:encoded><![CDATA[<p>Was hat das jetzt mit Stackobjekten zu tun?</p>
<pre>{
CWaitCursor temp(hourGlass);
// Mach was
}</pre>
<p>Aufräumen passiert beim Verlassen des Scopes. Das ist ein Stackobjekt. Es wurde nicht mit new erzeugt oder wie in Delphi mit</p>
<p>bla := TKlasse.Create();</p>
<p>// Oliver</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Daniel Lehmann</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21355</link>
		<dc:creator>Daniel Lehmann</dc:creator>
		<pubDate>Thu, 26 Jul 2007 09:07:41 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21355</guid>
		<description>Records mit Funktionen?

type
  TDateTime = record
  private
    FTicks: Int64;
  public
    function ToUTC: TDateTime;
    property TotalSeconds: Double;
  end;


So in der Art. Ich mach davon viel Gebrauch beim Emulieren von .Net Klassen unter Win32:
http://www.daniellehmann.net/net4native/



Grüße</description>
		<content:encoded><![CDATA[<p>Records mit Funktionen?</p>
<p>type<br />
  TDateTime = record<br />
  private<br />
    FTicks: Int64;<br />
  public<br />
    function ToUTC: TDateTime;<br />
    property TotalSeconds: Double;<br />
  end;</p>
<p>So in der Art. Ich mach davon viel Gebrauch beim Emulieren von .Net Klassen unter Win32:<br />
<a href="http://www.daniellehmann.net/net4native/" rel="nofollow">http://www.daniellehmann.net/net4native/</a></p>
<p>Grüße</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Oliver</title>
		<link>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21341</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Wed, 25 Jul 2007 23:46:55 +0000</pubDate>
		<guid>http://blog.assarbad.net/20070409/was-ich-an-delphi-uberhaupt-nicht-mag/#comment-21341</guid>
		<description>Dann erzähle mal zu Punkt drei wo ich gucken muß. Scheint mir zu entgehen. Und bitte nicht "object" sagen ;)

// Oliver</description>
		<content:encoded><![CDATA[<p>Dann erzähle mal zu Punkt drei wo ich gucken muß. Scheint mir zu entgehen. Und bitte nicht &#8220;object&#8221; sagen <img src='http://blog.assarbad.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>// Oliver</p>
]]></content:encoded>
	</item>
</channel>
</rss>
