Kleinteilige Funktionen

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
AndreasMR
Beiträge: 98
Registriert: Di 4. Aug 2015, 15:29
OS, Lazarus, FPC: Linux, Raspbian, Windows
CPU-Target: 64/32 Bit

Re: Kleinteilige Funktionen

Beitrag von AndreasMR »

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
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

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
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

Beitrag von m.fuchs »

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.


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.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten