AGB  ·  Datenschutz  ·  Impressum  







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

Clean Code - Default benutzen

Ein Thema von freimatz · begonnen am 10. Aug 2020 · letzter Beitrag vom 10. Aug 2020
Antwort Antwort
mensch72

Registriert seit: 6. Feb 2008
838 Beiträge
 
#1

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 09:57
genau um dies vollautomatisch an exakt nur einer einzigen Stelle im Programm pro Record zentral zu lösen, wurden doch mit Delphi 10.4 Sydney die "Custom Managed Records" eingeführt

So steht nun einer <> NULL Initialisierung und bei Bedarf sogar dem automatischem "Aufräumen" CleanCode mäßig nix mehr im Weg.


Delphi-Quellcode:
type
  TMyRecord = record
    Value: Integer;
    class operator Initialize (out Dest: TMyRecord);
    class operator Finalize(var Dest: TMyRecord);
  end;

class operator TMyRecord.Initialize (out Dest: TMyRecord);
begin
  Dest.Value := 10;
  Log('created' + IntToHex (Integer(Pointer(@Dest)))));
end;

class operator TMyRecord.Finalize(var Dest: TMyRecord);
begin
  Log('destroyed' + IntToHex (Integer(Pointer(@Dest)))));
end;
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 11:49
c) ist unnötig, wenn die Defaults eh 0.0 sind - das erledigt Default() schon - nur wenn sie von dem abweichen muss man da was setzen.
Dein gezeigner asm ist ohne Optimierung - mit sieht das so aus:

Code:
Result := Default(TBlaResult);
0041BDB4 8BFB            mov edi,ebx
0041BDB6 33C0             xor eax,eax
0041BDB8 AB              stosd
0041BDB9 AB              stosd
0041BDBA AB              stosd
0041BDBB AB              stosd
Result.one := 0.0;
0041BDBC 33C0             xor eax,eax
0041BDBE 8903             mov [ebx],eax
0041BDC0 894304           mov [ebx+$04],eax
Result.two := 0.0;
0041BDC3 33C0             xor eax,eax
0041BDC5 894308           mov [ebx+$08],eax
0041BDC8 89430C          mov [ebx+$0c],eax
Project456.dpr.30: end;
0041BDCB 5F              pop edi
0041BDCC 5B              pop ebx
0041BDCD C3               ret
Man könnt sich jetzt noch darüber beschweren, dass er mehrfach eax leert, aber so ist er halt unser lieber Delphi Compiler - von Peephole Optimizations kein Plan

Ein gescheiter Compiler würd da übrigens sowas draus machen:

Code:
pxor   xmm0, xmm0
movups [eax], xmm0
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (10. Aug 2020 um 12:01 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.114 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 12:10
So müssen sich ungefähr früher die Bauern gefühlt haben wenn der Pfarrer was Lateinisches aus der Bibel gepredigt hat.

Ich verstehe kein Wort, aber wird schon alles richtig sein.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.385 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 12:29
Wir haben uns in dem Fall für b) entschieden, in anderen für c)

"class operator" bringt bei uns nichts. "Default" ist hier ja völig ausreichend.
Vielleicht hätte ich auch noch explizit darauf hinweisen sollen, dass das hier in einer Strategie benutzt wird.

Geändert von freimatz (10. Aug 2020 um 12:37 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.062 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 12:54
So müssen sich ungefähr früher die Bauern gefühlt haben wenn der Pfarrer was Lateinisches aus der Bibel gepredigt hat.

Ich verstehe kein Wort, aber wird schon alles richtig sein.
Gib dich nicht auf!

Lern Assembler (lesen):
https://www.syncfusion.com/ebooks/assemblylanguage
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#6

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 14:48
Ein gescheiter Compiler würd da übrigens sowas draus machen:

Code:
pxor   xmm0, xmm0
movups [eax], xmm0
Die Namen gescheiter Compiler darfst du uns jetzt aber nicht vorenthalten. Das wäre richtig gemein!

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.012 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 15:09
Die Namen gescheiter Compiler darfst du uns jetzt aber nicht vorenthalten. Das wäre richtig gemein!
Meine Referenzen sind in aller Regel clang und gcc auf https://godbolt.org/ mit den Einstellungen -m32 -O3 (-m32 wenn man halt 32bit asm haben will) und __attribute((regparm(3))) (damit die Parameter genauso übergeben werden wie in Delphi) über der Routine.
Interessanterweise spuckt bei genau diesem Code

Code:
struct Bla {
    double one, two;
};

__attribute((regparm(3)))
Bla Init() {
    Bla result;
    result.one = 0;
    result.two = 0;
    return result;
}
erst clang ausm trunk dasselbe aus wie gcc. Vorher dämliche einzelne mov Befehle.

P.S. Bevor hier einer mit FPC um die Ecke kommt - ich kenn da nicht alle Schalter, aber der generiert zumindest in der Version die auf Godbolt ist noch schlimmeren Müll.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (10. Aug 2020 um 21:09 Uhr)
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
461 Beiträge
 
#8

AW: Clean Code - Default benutzen

  Alt 10. Aug 2020, 15:34
Meine Referenzen sind in aller Regel clang und gcc auf https://godbolt.org/ ...
Allmächd, was es nicht alles gibt. Danke für den Hinweis.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:58 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