Applikationsdesign

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
charlytango
Beiträge: 237
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Applikationsdesign

Beitrag von charlytango »

Hi,

Im Laufe der Zeit haben sich etliche nützliche Objektklassen angesammelt.
Einige davon benutzen auch gemeinsame Units was es nicht immer leicht macht, sie in neuen Projekten zu nutzen weil dann gleich ein Rattenschwanz an notwendigen Units eingebunden werden muss.

Um es konkreter/plakativer zu machen:
Die Klasse TXY verwendet eine Reihe von Funktionen aus der Unit uToolsWriteDirect (einfach ein Anzahl von Funktionen um direkt in bestimmte Dateien zu schreiben).
Verschiedenen andere Klassen benutzen diese unit ebenfalls.

Nun ist mein Ziel die Klasse TXY einfacher handhabbar zu machen -- also wenn nötig die Unit der Klasse TXY einzubinden ohne immer einen zusätzlichen Unit-Rattenschwanz mitzuführen. Gleichzeitig möchte ich aber vermeiden die gleiche Funktionalität (also zB das Schreiben in Dateien) mehrfach warten zu müssen.
Natürlich weiß ich dass das Unitkonzept zur Wiederverwendbarkeit designed wurde. Aber manchmal nervt es helt ;)

Dazu gibt es sicher etliche Lösungsansätze.... wie löst ihr so ein Problem?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2349
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Applikationsdesign

Beitrag von m.fuchs »

Hach ja, Softwarearchitektur bei Funktionssammlungen und Bibliotheken. Darüber lässt sich hervorragend philosophieren, diskutieren, streiten oder auch morden :mrgreen:.

Ich sage mal was ich mache / machen würde: Bei mir liegen eine Reihe von Units herum, die auch bestimmte immer wieder verwendete Klassen und Funktionen enthalten. Inzwischen fasse ich die alle in eine Art persönliche(s) Framework / Bibliothek zusammen und binde sie in jedes Projekt wo ich wenigstens einen Teil davon brauche direkt und komplett ein. Im Allgemeinen per svn:externals, also Verlinkung auf ein SVN-Repository. Damit sind sie an allen Stellen immer auf dem gleichen Stand.
Klar wächst dadurch der Festplatten-Speicherverbrauch etwas an, aber das ist belanglos im Vergleich zur besseren Wartbarkeit.
Zuletzt geändert von m.fuchs am So 7. Feb 2021, 12:06, insgesamt 1-mal geändert.
Grund: Speicherverbrauch konkretisiert
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Timm Thaler
Beiträge: 1172
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Applikationsdesign

Beitrag von Timm Thaler »

Für AVR Embedded interessiert mich das schon: Gibt es eine Möglichkeit, dass der Compiler nur die Funktionen aus den Units ins Assembler-Listing schreibt, die auch verwendet werden?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2349
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Applikationsdesign

Beitrag von m.fuchs »

Timm Thaler hat geschrieben:
So 7. Feb 2021, 01:57
Für AVR Embedded interessiert mich das schon: Gibt es eine Möglichkeit, dass der Compiler nur die Funktionen aus den Units ins Assembler-Listing schreibt, die auch verwendet werden?
Ich rede an dieser Stelle nur von Festplattenspeicher, der ja durch das immerwährende Auschecken in jedem Projekt mehrmals mit den gleichen Dateien belegt wird.

Dein Problem sollte sich doch mit Smart-Linking lösen lassen. Oder ist das bei AVR anders? Damit kenne ich mich absolut nicht aus.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Michl
Beiträge: 2365
Registriert: Di 19. Jun 2012, 12:54

Re: Applikationsdesign

Beitrag von Michl »

charlytango hat geschrieben:
Sa 6. Feb 2021, 19:34
Dazu gibt es sicher etliche Lösungsansätze.... wie löst ihr so ein Problem?
Ich nutze dafür Packages, die ich je nach Bedarf in dem Projekt einfüge - nicht in der IDE installiert! Auch alles, wie bei m.fuchs, per SVN (TortoiseSVN) gepflegt. Falls ein Fehler auftritt ist es unheimlich hilfreich, in der Historie nachzusehen, wobei dieser eingepflegt wurde und was der Grund war :wink:

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Timm Thaler
Beiträge: 1172
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Applikationsdesign

Beitrag von Timm Thaler »

Sowas hätte ich auch gern.

Ich hab zum Beispiel für AVR embedded eine umfangreiche Mathe-Unit für die verschiedenen Typen und Berechnungen, die deutlich schneller und kleiner ist als was fpc mitbringt. Davon brauche ich aber immer nur einige und kopiere mir nur die ins Projekt. Es wäre halt schön, wenn der Compiler von sich aus nicht verwendete Prozeduren / Funktionen nicht mit reinkompiliert.

Auf dem PC ist mir das egal. Auf dem AVR entscheidet das über Sieg oder Niederlage.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 4436
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Niederösterreich
Kontaktdaten:

Re: Applikationsdesign

Beitrag von af0815 »

Timm Thaler hat geschrieben:
So 7. Feb 2021, 20:18
Es wäre halt schön, wenn der Compiler von sich aus nicht verwendete Prozeduren / Funktionen nicht mit reinkompiliert.

Auf dem PC ist mir das egal. Auf dem AVR entscheidet das über Sieg oder Niederlage.
Dann kannst du das nur über bedingte Kompilierung auflösen, wenn es sich über die Optimierung des Compilers/Linkers nicht auflösen lässt.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

PascalDragon
Beiträge: 222
Registriert: Mi 3. Jun 2020, 07:18
OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
CPU-Target: Aarch64 bis Z80 ;)
Wohnort: München

Re: Applikationsdesign

Beitrag von PascalDragon »

Timm Thaler hat geschrieben:
So 7. Feb 2021, 01:57
Für AVR Embedded interessiert mich das schon: Gibt es eine Möglichkeit, dass der Compiler nur die Funktionen aus den Units ins Assembler-Listing schreibt, die auch verwendet werden?
Nein, da dies nicht die Aufgabe des Compilers ist, sondern des Linkers. Die Units werden an sich unabhängig kompiliert (von Abhängigkeiten durch die uses-Bereiche mal abgesehen) und der Compiler kann noch gar nicht wissen, ob nicht Funktion X vielleicht von einer anderen Unit verwendet wird, die er noch nicht mal im Ansatz angefangen hat zu kompilieren.
FPC Compiler Entwickler

charlytango
Beiträge: 237
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz 2.0 fixes FPC 3.2 fixes
CPU-Target: Win 32Bit, 64bit
Wohnort: Wien

Re: Applikationsdesign

Beitrag von charlytango »

erstmal Danke an @m.fuchs :D

Bin erstaunt wie schnell der Thread in eine ganz ander Richtung abgleitet :wink:

..gespannt ob da noch was kommt

PeterS
Beiträge: 32
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: 2.0.10
CPU-Target: win32

Re: Applikationsdesign

Beitrag von PeterS »


Antworten