Hallo zusammen,
was für mich gegen "kleinteilige Funktionen" spricht geht aus Gedanken zur Geschwindigkeitsoptimierung hervor.
Bei einem Aufruf einer Funktion passiert (kurzgefasst) folgendes:
- Sicherung des Stapelspeichers (Stack)
- Sicherung des Registers Program Counter
- Übergabe von Parametern der aufzurufenden Funktion und deren Ablage auf den Stack
- Setzen des Registers Program Counter auf die Adresse, an der sich die Funktion befindet
- Abarbeiten des Funktionsinhaltes
- Abbau des Stacks
- Wiederherstellen des Stacks, wie er vor Aufruf der Funktion gültig war
- Wiederherstellen des Registers Program Counter auf den vorigen Wert
Nur die fettgeschriebene Zeile ist bei einem Aufruf ohne Funktion erforderlich.
Bei einem typischen Funktions-Einzeiler, der in der Regel nur wenige Taktzyklen beanspruchen sollte, erhöht sich die Zeit, um dieses z.B. in einer Schleife durchzuführen, erheblich. Wenn man solche Bremsen konsequent entfernt, dann lassen sich Anwendungen locker um 30 % beschleunigen.
Die Wahrheit liegt sicherlich irgendwo in der Mitte.
- Code schnell lauffähig bekommen ==> Minimierung der Entwicklungszeit
- Code immer für jeden lesbar halten ==> Einhaltung von Programmier-Richtlinien / Kommentierung des Codes / Metriken
- Code / Anwendungen einer Software-Validierung unterziehen ==> Wiedererkennbarkeit der im Technischen Design definierten Algorithmen
- Code in der Laufzeit minimieren ==> Einhalten von Spezifikationen, die der "Kunde" im Lastenheft definiert hat
sind in der Regel miteinander nicht kompatibel. (Na ja, Programmier-Richtlinien kann man immer einhalten und Code kann man auch gut flott kommentieren)
Für mich ist dabei wichtig, dass das beteiligte Team sich einheitlicher Programmier-Richtlinien bedient und dies auch konsequent durchgezogen wird. Damit bleibt der Code ständig lesbar - und jeder kann sich schnell in neuen Code eines anderen eindenken.
Beste Grüße
Andreas
Kleinteilige Funktionen
-
- Beiträge: 98
- Registriert: Di 4. Aug 2015, 15:29
- OS, Lazarus, FPC: Linux, Raspbian, Windows
- CPU-Target: 64/32 Bit
Re: Kleinteilige Funktionen
Zuletzt geändert von AndreasMR am So 9. Jul 2017, 11:29, insgesamt 1-mal geändert.
Ubuntu 14.04 LTS / Raspbian / Windows: Lazarus ab 0.9 bis 3.0
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2813
- 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: Kleinteilige Funktionen
Das ist ein gutes Gegenargument. In der Tat ist es häufig ein Spagat zwischen sauberer Struktur und Geschwindigkeit. Bei kleinteiligen Funktion kann beispielsweise mit inline arbeiten um das Problem zu lösen.AndreasMR hat geschrieben:Bei einem typischen Funktions-Einzeiler, der in der Regel nur wenige Taktzyklen beanspruchen sollte, erhöht sich die Zeit, um dieses z.B. in einer Schleife durchzuführen, erheblich. Wenn man solche Bremsen konsequent entfernt, dann lassen sich Anwendungen locker um 30 % beschleunigen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de