AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte UnitOptimizer
Thema durchsuchen
Ansicht
Themen-Optionen

UnitOptimizer

Ein Thema von stahli · begonnen am 25. Mai 2018 · letzter Beitrag vom 31. Okt 2021
Antwort Antwort
Seite 7 von 8   « Erste     567 8      
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: UnitOptimizer

  Alt 28. Okt 2020, 12:10
Danke an Euch alle.
Das hilft mir schon mal weiter.

@jaenicke
Ich habe das Beispiel gleich mal durchlaufen lassen.
Also die Standardfälle passen schon ganz gut. Nur der gesamte Else-Block wird noch nicht korrekt eingerückt. Das werde ich aber heute noch lösen können.
Das ist eben auch wieder so ein spachlicher Sonderfall. Else zum if ist etwas anders zu händeln als else zum case.
Ich konvertiere die Schlüsselwörter in Klassen mit bestimmten Eigenschaften. Bei Else im Kontext von Case werde ich wohl nur die Eigenschaft für die Einrückungsvorgaben ändern müssen.
Schaue ich mir heute Abend an.


Vor allem weiß ich natürlich auch nicht, welche Formatierungen (Einrückungen, mit oder ohne Umbrüche) da so im Umlauf sind und auf welche "Überraschungen" sich das Tool einstellen muss.
Das sollte dem Parser ja egal sein wie es vorher war.
Hier meinte ich eher die Wünsche und Anforderungen, welche Varianten unterstützt werden müssen.
Hier muss ich immer abwägen, was beibehalten werden muss und was einfach "korrigiert" werden kann.

Z.B. Kann ein Zeilenumbruch innerhalb der Parameter einer Prozedur ausdrücklich gewünscht sein oder es kann sinnvoll sein, einen solchen automatisch zu entfernen, um die Parameter in einer Zeile zu haben. Solche Fragen stellen sich viele.
Deswegen maskiert der Optimizer weiche (automatische) Umbrüche mit einem ESCAPE (das Kästchen am rechten Rand). So weiß er, dass dieser Umbruch auf jeden Fall entfernt werden kann.

Je nach Entscheidung können in beiden Fällen (Umbruch belassen oder entfernen) potenzielle Nutzer das Tool genau deswegen ablehnen.
Ich werde also viele Optionen anbieten müssen, allerdings wären weniger Optionen grundsätzlich natürlich wünschenswert.
Miniaturansicht angehängter Grafiken
28-10-_2020_12-52-03.png  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: UnitOptimizer

  Alt 28. Okt 2020, 22:34
... also das mit dem Einrücken funktioniert wie erwartet


Wer mal einen kleinen Einblick möchte:
Delphi-Quellcode:
                if SupportsIn(lItemBlockStart, [IDetectThen, IDetectElse, IDetectDo]) then
                  begin
                    if Supports(lItemBlockStart, IDetectElse, lDetectElse) then
                      lDetectCaseFlag := Supports(lDetectElse.ItemBlockStartLink, IDetectCase)
                    else
                      lDetectCaseFlag := False;
                    if (lDetectCaseFlag) then
                      currentRealAlign.LeftSpaceNext := currentRealAlign.LeftSpaceNext + 1 // Sonderfall Else zum Case --> NEU <--
                    else
                      if (not lDetectExceptFlag) then
                        currentRealAlign.IncLeftSpaceMove; // sonst nach then/else/do eine Zeile/Anweisung einrücken (wenn Zeilenende)
                  end;
Zu den Format-Sonderfällen ist jetzt ein neuer Sonderfall hinzu gekommen.
Ich versuche das halt alles durch zugewiesene Eigenschaften zu deklarieren, die der Formatierer dann entsprechend umsetzt.
Da spielen dann noch die ganzen Verschachtelungen und Blöcke hinein.
Miniaturansicht angehängter Grafiken
28-10-_2020_23-22-01.png  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: UnitOptimizer

  Alt 29. Okt 2020, 19:27
Nochmal 4 Varianten von if-then-else...
Mal ist einrücken der nächsten Zeile sinnvoll und mal nicht.

Der Algorithmus sollte jetzt m.E. alle gängigen Formatierungsvarianten vernünftig optimieren.
Miniaturansicht angehängter Grafiken
29-10-_2020_19-45-47.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: UnitOptimizer

  Alt 21. Nov 2020, 22:07
Nur mal ein kleiner Zwischenstand für die reale Arbeit mit der aktuellen Suchfunktion: https://youtu.be/A1fURA7KFDk (2 Min)

Geht schon ganz gut aber ich muss das noch weiter ausbauen und optimieren.
Miniaturansicht angehängter Grafiken
21-11-_2020_22-48-30.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
ConstantGardener

Registriert seit: 24. Jan 2006
Ort: Halberstadt
379 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: UnitOptimizer

  Alt 22. Nov 2020, 11:01
Respekt! Das sieht schon sehr gut aus!
Andreas Schachtner
  Mit Zitat antworten Zitat
stifflersmom

Registriert seit: 8. Dez 2005
Ort: 24994 Holt
383 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: UnitOptimizer

  Alt 22. Nov 2020, 14:29
Sehr vielversprechend!

Ich hoffe, ich kann das bald selbst mal ausprobieren.
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: UnitOptimizer

  Alt 22. Nov 2020, 19:48
Danke Euch!
Ich denke, im Dezember kann ich mal eine Testversion anbieten (incl. Installer usw.)


Zuvor will ich noch zwei Punkte ausbauen.

1) das Dockingprinzip
Die Suchformulare verhalten sich im Zusammenspiel mit der IDE etwas anders, je nachdem ob sie eingedockt sind oder nicht.
Vielleicht können ja diejenigen, die es demnächst mal testen möchten schon mal mitteilen, welche Auflösungen Ihr nutzt (wie ist die IDE ausgerichtet, gibt es mehrere Monitore?).
Würdet Ihr das Vollsuchformulare eher eindocken (nimmt halt dann recht viel Platz ein) oder das lieber über die IDE setzen (wie im Video zu sehen).
Oder doch auf einen zweiten Monitor?
Diesbezüglich habe ich noch keine optimale Lösung gefunden.

2) der Optimizer
Hier muss ich noch ein Problem klären, wenn die begin-end-Schachtelungen nicht aufgehen.
Dadurch, dass alle Methoden komplett aus der Unit entfernt und umsortiert neu eingesetzt werden, kann das noch zu Problemen führen.
Das muss ich natürlich noch erkennen und dann auf eine Umsortierung verzichten. Sonst wird die Unit "zerschossen", weil nicht mehr alles aufgeht.
An diesenigen, die das demnächst mal testen wollen: Würdet Ihr dann eine Umsortierung der Methoden überhaupt wollen?
In Interfaces und Klassen werden die Methoden nach Sektionen geordnet und dann innerhalb dieser nach Member (Funktionen/Prozeduren/Properties) sortiert und dann nochmal alphabetisch.
Die Methoden im Implementationsteil werden dann analog der Deklarationsreihenfolge sortiert.
Grundsätzlich finde ich das unbedingt sinnvoll, ist halt nur die Frage, ob man das für erste Tests gleich will. Wobei es natürlich funktionell auch keinerlei Nachteile hat, selbst wenn man es erst mal so nicht gewöhnt ist. Wer seinen Code in ein Versionssystem eincheckt würde damit jedoch wohl ein Problem haben.
Ich könnte natürlich auch den originalen Formatierer auf Ctrl-D lassen, so dass man standardmäßig weiter den nutzen kann.


Das wären jetzt noch meine Vorab-Überlegungen vor einer Testversion.

Für den Austausch würde ich mir dann einen Server auf Discord vorstellen...
(Ich habe schon einen angelegt, aber noch keine Erfahrungen damit. Hier mal der Link: https://discord.gg/5xHfSpvg Keine Ahnung, ob das so reicht.)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.961 Beiträge
 
Delphi 12 Athens
 
#8

AW: UnitOptimizer

  Alt 22. Nov 2020, 20:40
Vielleicht können ja diejenigen, die es demnächst mal testen möchten schon mal mitteilen, welche Auflösungen Ihr nutzt (wie ist die IDE ausgerichtet, gibt es mehrere Monitore?).
Full-HD und 4K.

Würdet Ihr das Vollsuchformulare eher eindocken (nimmt halt dann recht viel Platz ein) oder das lieber über die IDE setzen (wie im Video zu sehen).
Wenn man es eindocken kann, kann man es auch auf automatisch einklappen stellen oder loslösen. Diese Möglichkeiten sollten dann doch für alle Zwecke passen...
Sebastian Jänicke
AppCentral

Geändert von jaenicke (23. Nov 2020 um 06:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: UnitOptimizer

  Alt 25. Nov 2020, 23:02
Einen Teil habe ich geschafft.
Ungedockte Formulare kann man jetzt auf beliebigen Monitoren platzieren (und auch an Monitorränder anheften).
Eindocken geht natürlich auch noch.

Standardmäßig werden dockbare Formulare offenbar ungedockt nur auf dem Monitor geöffnet, auf dem die IDE geöffnet ist.
An verschiedenen Stellen speichere ich daher die Suchformular-Positionen in eine Ini bzw. stelle sie wieder daraus her.
Es ist etwas Frickelei, scheint aber stabil zu funktionieren.
Miniaturansicht angehängter Grafiken
25-11-_2020_23-44-39.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: UnitOptimizer

  Alt 18. Sep 2021, 18:00
Jetzt werden auch innerhalb der IDE Interfaces in anderen Units gefunden und verarbeitet.

Anbei mal ein Auszug, wie eine vorher recht wüste Unit nach dem Optimieren aussieht.

(Die Performance passt noch nicht, aber da kann ich sicher noch etwas rausholen.)
Miniaturansicht angehängter Grafiken
18-09-_2021_18-40-28.jpg  
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 8   « Erste     567 8      


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 05:23 Uhr.
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