Delphi-PRAXiS
Seite 3 von 9     123 45     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Das with-Statement in XE4 (https://www.delphipraxis.net/174414-das-statement-xe4.html)

Elvis 22. Apr 2013 09:56

AW: Das with-Statement in XE4
 
Zitat:

Zitat von uligerhardt (Beitrag 1212314)
Die Kenntnis hat doch der Compiler/Parser - das ist doch der Sinn eines solchen with-Entfernungstools. Oder versteh ich dich jetzt falsch?

Ich schreibe selbst statische Code-Analysen für dyn. Sprachen. Und "with" gehört lustigerweise fast in diese Kategorie, auch wenn Delphi (bis auf OleVariant) statisch typisiert ist.
Man müsste alle Bezeichner innerhalb des with-Statements auflösen. Also den nächstmöglichen Scope finden, aus dem sie kommen können.
Das ist aber fehleranfälliger als man es erwartet. Gerade in Delphi, wo man als Tool nie weiß, ob man jetzt die Saucen nehmen kann, oder die .DCU hernehmen muss.

jaenicke 22. Apr 2013 09:57

AW: Das with-Statement in XE4
 
Zitat:

Zitat von uligerhardt (Beitrag 1212314)
Die Kenntnis hat doch der Compiler/Parser - das ist doch der Sinn eines solchen with-Entfernungstools. Oder versteh ich dich jetzt falsch?

Der Parser kann diese Kenntnis nicht haben bzw. müsste einen riesigen Aufwand betreiben (genau eines der Probleme von with), das kann nur der Compiler. Und deshalb könnte ein solches Tool diese Daten auch nur aus dem Compiler bekommen, aber der hat dafür ja keine Schnittstelle. ;-)

Zitat:

Zitat von sx2008 (Beitrag 1212315)
So hätte man das With-Statement auch gestalten und die Unsicherheiten beim Scope vermeiden können

Stimmt, aber Variablen werden in Delphi nun einmal vor dem begin deklariert und nicht irgendwo. Ob man das gut findet oder nicht, sei jedem selbst überlassen, ich persönlich finde es gut (auch wenn ich diese Art der Deklaration durchaus nett fände).

Elvis 22. Apr 2013 09:58

AW: Das with-Statement in XE4
 
Zitat:

Zitat von sx2008 (Beitrag 1212315)
So hätte man das With-Statement auch gestalten und die Unsicherheiten beim Scope vermeiden können:

In Oxygene sieht es so aus:
Delphi-Quellcode:
with x := SomeExpression() do
   x.DoSomething();
Man hat also nicht nur eine Variable, sondern diese existiert auch nur innerhalb des Blockes. :thumb:

Codehunter 22. Apr 2013 10:02

AW: Das with-Statement in XE4
 
Zitat:

Zitat von jaenicke (Beitrag 1212309)
Es wird aber (leider) trotzdem nicht aus der Sprache rausfliegen, sondern wird nur in der RTL nicht mehr benutzt. Ob andere da mitziehen, ist eine andere Sache.

Die Diskussion im Netz (die ich ehrlich zugegeben bisher überhaupt nicht wahrgenommen habe) scheint aber das Gegenteil anzudeuten.

Mag sein dass with allgemein nicht sehr beliebt ist. Aber das ist genauso eine persönliche Sicht der Dinge. Wenn es with nie gegeben hätte würde es mir wahrscheinlich gar nicht fehlen. So aber habe ich sogar in anderen Sprachen nach einem with-Äquivalent gesucht und enttäuschenderweise keins gefunden (z.B. PHP). Jetzt dürft ihr frohlocken... Zum Glück! Egal, es soll keine philosophische Diskussion werden.
Zitat:

Zitat von jaenicke
Das Debuggen geht deshalb heute mit XE3 auch sehr viel schneller, weil ich nicht ständig Ausdrücke in Strg + F7 auswerten muss, wenn ich in den Delphiquelltexten debugge, sondern einfach die Maus drüberhalten kann. Das hat mich die ganzen Jahre schon genervt...

Dafür vergeudet man die so gewonnene Zeit mit den anderen Unzulänglichkeiten der IDE. Ich denke da nur an die reine Startzeit der IDE und den sich immer wieder aufklappenden Strukturbaum ohne jegliche Such- oder Organisationsfunktionen.

Ok, um wieder auf das Thema zurück zu kommen: Angenommen, with ist tatsächlich so unschön wie ihr es beschreibt und ich hatte es bisher bloß nicht als Problem wahrgenommen. Ganz ehrlich: Der Compiler (egal ob das alte D7 oder das neuere XE2) geben Hinweise und Warnungen en masse aus für jeden erdenklichen Firlefanz. Variablen, die deklariert und nicht verwendet werden z.B. Aber wenn with tatsächlich solche Scope-Probleme impliziert, warum gabs dafür bisher keine Hinweise?

Ich meine, dann braucht sich wirklich niemand wundern, dass so eine Kreuzung aus Gewohnheitstier und Betonschädel wie ich sich dann aufregt ^^

@sx2008: Dein Vorschlag zur Erweiterung der with-Syntax finde ich exzellent! x und y könnten sogar untypisierte Ausdrücke sein, der Compiler wüßte durch das with-Statement auf was sie sich beziehen. Die Lösung wäre viel besser als das ersatzlose Streichen von with.

jaenicke 22. Apr 2013 10:12

AW: Das with-Statement in XE4
 
Zitat:

Zitat von Codehunter (Beitrag 1212319)
Ich denke da nur an die reine Startzeit der IDE

So viel finde ich die 10 Sekunden nicht. Wie oft starte ich denn Delphi pro Tag? Das ist bei mir in der Regel eine niedrige einstellige Zahl.

Zitat:

Zitat von Codehunter (Beitrag 1212319)
und den sich immer wieder aufklappenden Strukturbaum ohne jegliche Such- oder Organisationsfunktionen.

Dafür gibt es ja die DDevExtensions. :wink:

Zitat:

Zitat von Codehunter (Beitrag 1212319)
Aber wenn with tatsächlich solche Scope-Probleme impliziert, warum gabs dafür bisher keine Hinweise?

Weil der Compiler die Probleme kaum erkennen geschweige denn genau identifizieren kann. Zudem würde es da bei den meisten Projekten mit with-Verwendung schlicht viel zu viele Meldungen geben und außerdem war with bis vor kurzem ja auch in den RTL-Quelltexten weit verbreitet.

Uwe Raabe 22. Apr 2013 10:37

AW: Das with-Statement in XE4
 
Zitat:

Zitat von Codehunter (Beitrag 1212319)
Ich denke da nur an die reine Startzeit der IDE und den sich immer wieder aufklappenden Strukturbaum ohne jegliche Such- oder Organisationsfunktionen.

Ist zwar jetzt OT, aber mein XE3 startet um einiges schneller als D7.

Zitat:

Zitat von Codehunter (Beitrag 1212319)
Der Compiler (egal ob das alte D7 oder das neuere XE2) geben Hinweise und Warnungen en masse aus für jeden erdenklichen Firlefanz. Variablen, die deklariert und nicht verwendet werden z.B. Aber wenn with tatsächlich solche Scope-Probleme impliziert, warum gabs dafür bisher keine Hinweise?

Für den Compiler ist es ja nichts besonderes, innerhalb eines anderen Scopes zu arbeiten. Du bekommst ja auch keine Warnung vom Compiler, wenn eine lokale Variable eine gleichnamige globale verdeckt.

Andererseits hat ein Tool wie der Pascal Analyzer extra einen Report für mehrdeutige Referenzen in with-Anweisungen (obwohl sie für den Compiler ja gar nicht mehrdeutig sind).

bernau 22. Apr 2013 10:58

AW: Das with-Statement in XE4
 
Zitat:

Zitat von Elvis (Beitrag 1212318)
In Oxygene sieht es so aus:
Delphi-Quellcode:
with x := SomeExpression() do
   x.DoSomething();
Man hat also nicht nur eine Variable, sondern diese existiert auch nur innerhalb des Blockes. :thumb:


Hä? Wo ist denn da der Vorteil? Kann ich doch direkt so schreiben:

Delphi-Quellcode:
x := SomeExpression();
x.DoSomething();

Übrigens: Bei mir fliegt "With" auch überall raus, wo ich es finde. Aber Emba sollte es nicht einfach so aus dem Compiler entfernen. Ein deprecated oder ein anderer Compilerhinweis würde erst mal genügen.

jaenicke 22. Apr 2013 10:59

AW: Das with-Statement in XE4
 
Der Vorteil ist, dass mit der Zeile die Variable nicht nur zugewiesen, sondern auch deklariert wird.

bernau 22. Apr 2013 11:02

AW: Das with-Statement in XE4
 
Ach so. Muss man in Oxygen nicht extra deklarieren? So so! Würde aber der Pascal-Syntax wiedersprechen, da alle Variablen eigendlich deklariert werden müssen. Oder?

Sir Rufo 22. Apr 2013 11:34

AW: Das with-Statement in XE4
 
Zitat:

Zitat von bernau (Beitrag 1212327)
Ach so. Muss man in Oxygen nicht extra deklarieren? So so! Würde aber der Pascal-Syntax wiedersprechen, da alle Variablen eigendlich deklariert werden müssen. Oder?

Eigentlich handelt es sich auch nicht um Variablen, sondern um benannte Scopes, die bei Delphi einfach (unbenannt) so daruntergejubelt und auch nirgends deklariert werden ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:29 Uhr.
Seite 3 von 9     123 45     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz