AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Semikolon oder nicht

Ein Thema von Sebastian Nintemann · begonnen am 2. Jan 2003 · letzter Beitrag vom 3. Jan 2003
Antwort Antwort
Seite 1 von 3  1 23      
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#1

Semikolon oder nicht

  Alt 2. Jan 2003, 22:58
Hallo zusammen!
Vor längerer Zeit hab ich in nem Buch (Doberanz/Kowalski: Borland Delphi 5 - Grundlagen und Profiwissen) gelesen, man solle doch wo es nicht nötig ist das Semikolon nach einem Befehl weglassen, also wenn ein end auf den Befehl folgt. Der Grund: Das Semikolon verursacht, sofern keine Anweisung mehr folgt, eine sinnlose Leeranweisung. Ich hab mir daraufhin angewöhnt wo es nur geht den Strichpunkt wegzulassen, geht auch ganz automatisch bei mir inzwischen. Ich sehe das aber sonst bei (fast) keinem, und sogar in den Borland Demos wird nicht darauf geachtet. Also hab ich mich mal gefragt ob denn was dran ist, und folgendes probiert:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  start,i: integer;
begin
  start := GetTickCount;
  for i := 0 to 100000000 do
    begin
      begin
      end;
    end;
  Caption := IntToStr(GetTickCount-start)
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  start,i: integer;
begin
  start := GetTickCount;
  for i := 0 to 100000000 do
    begin
      begin
      end
    end;
  Caption := IntToStr(GetTickCount-start)
end;
Zwei bis auf ein Semikolon völlig gleiche (gleich sinnlose) procedures, doch das Ergebnis ist eindeutig: Die erste Procedure braucht 50% mehr Zeit als die zweite! Die erste: ca 300ms, die zweite: ca 200ms. Das Verhältnis bleibt beim Verändern der Zahl.
Zugegeben, sowas braucht einen nicht zu interessieren bei "normalen" Berechnungen, ist aber trotzdem interessant, dass sogar die Borland Demos keine Rücksicht drauf nehmen.

Gruß, Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#2
  Alt 2. Jan 2003, 23:04
Ich hab D6 Personal und es sie sind bis auf 2 ms gleich schnell. Mal ist die eine schneller, mal die andere. Scheint also das gleiche zu machen!

205 - 207 ms. Das ist ein echter Benchmark
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#3
  Alt 2. Jan 2003, 23:08
Hmm, ich hab auch D6 und immer das gleiche Ergebnis... die Zahlen schwanken nur um höchstens 10ms. Noch jemand mit anderen Ergebnissen?

Gruß, Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#4
  Alt 2. Jan 2003, 23:10
Aber so blöde sind doch noch nicht mal die von Borland
So ein Bug (oder etwa gewollt) kann man doch nicht bewusst drinlassen!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Sebastian Nintemann
(Gast)

n/a Beiträge
 
#5
  Alt 2. Jan 2003, 23:19
Ach verdammt, das wird ja so auch garnicht compiliert.
Trotzdem interessant, der zweite Button braucht bei exakt dem selben Code weniger Zeit und das immer wieder

Gruß, Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#6
  Alt 2. Jan 2003, 23:21
Bei mir braucht keiner mehr oder weniger Zeit.
Durchnitt: 206 ms.
Toleranz +- 1ms.
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Daniel B
(Gast)

n/a Beiträge
 
#7

Re: Semikolon oder nicht

  Alt 2. Jan 2003, 23:23
Auch Moin,

Zitat von Grotesquery:
Vor längerer Zeit hab ich in nem Buch (Doberanz/Kowalski: Borland Delphi 5 - Grundlagen und Profiwissen) gelesen, man solle doch wo es nicht nötig ist das Semikolon nach einem Befehl weglassen, also wenn ein end auf den Befehl folgt.
Das finde ich so schlimm andiesen Büchern. Später sieht man in Foren(allgemein), das Leute mit Prozeduren aus solchen Büchern kommen, irgend eine Zeile dazu geschrieben haben und jetzt nicht wissen warum es sich nciht mehr komplizieren lässt. Weil sie es einfach nicht lernen, das bei >= 2 Zeilen, alle davor ein ; haben müssen.

Zur "Fehlerquelle", ich hab lieber ein paar "nop's mehr im ASM COde, als später ärger beim schreiben. Und die paar ms machen es wirklich nicht aus. Vielleicht wenn man grosse! Spiele programmiert, wo es auf sowas ankommt, aber das würde dann sowieos in Cpp o.ä. passieren, da siehts eh wieder anders aus.

Mein Vorschlag, immer reinschreiben. Und wenn es nur ein Exit ist.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#8
  Alt 2. Jan 2003, 23:24
PS: Kommt auch auf die Rechnerauslastung an. Wenn du gleichzeitig noch UT2003 spielst brauchst du länger...
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Brüggendiek

Registriert seit: 13. Dez 2002
Ort: Dortmund
275 Beiträge
 
Delphi 5 Standard
 
#9
  Alt 2. Jan 2003, 23:25
Hallo!

1. Das überflüssige ';' erzeugt eine Leeranweisung.
2. Delphi optimiert normalerweise (Compilerschalter $O+) den Code (daher die Benchmark-Unterschiede???).
3. Kein ';' vor END und eine eingefügte Anweisung: Nachtragen oder Compiler meckert!

Also schreibe ich das ';' grundsätzlich. Die Methode stammt aber wohl noch von den Lochkarten, weil da Änderungen schwer waren (welche Spalte haben wir denn??)!

Gruß

Dietmar Brüggendiek
Dietmar Brüggendiek
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#10
  Alt 2. Jan 2003, 23:29
Wenn das ";" eine Leeranweisung ausführen würde, würde das bedeuten, das 100000000 Leeranweisungen keine Rechnezeit verbrauchen. Kann nicht sein. Daraus schließe ich, dass ein ";" keine Leeranweisung verursacht!
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz