Menü
Avatar von Ichthyostega
  • Ichthyostega

mehr als 1000 Beiträge seit 28.06.2005

Re: Multi-Dispatch

HankTheTank schrieb am 21.05.2019 14:53:

...aber die Kollegen der funktionalen Programmierung lachen sich was, da ist das völlig normal.

Klar...
Da schreibt man typischerweise einen Pattern Match und gut is.

Allerdings, der Fairness halber sollten wir bedenken, daß unter einer Funktionalen Sprache einiges mehr an Runtime liegen muß, damit die Sache einigermaßen "rund" wird. Ohne wenigstens eine minimale VM und irgend eine Art Garbage Collector wird es sehr anspruchsvoll, eine vollständige und wasserdichte funktionale Sprache hinzubekommen.

Konkret, zur Implementierung eines Pattern Match muß ich mir ja erst einmal meinen Algebraischen Datentyp auseinanderpfriemeln und dazu Datenfelder kopieren, und brauche dafür erst mal eine Allokation. Und es hängt dann sehr von den ganz speziellen Umständen ab, ob ein cleverer Optimierer das dann letztlich alles wegreduzieren kann. Will sagen, für den Programmierer ist es alles andere als offensichtlich, wie aufwendig eine scheinbar ganz minimale Definition dann letztlich zur Ausführung wird. Mehr noch, typischerweise programmiere ich ja grade funktional / deklarativ, weil ich mir über diesen Aspekt überhaupt keine Gedanken machen möchte.

Im Gegensatz dazu ist eine C++ Variant ja letztlich ein union record, d.h. die Storage liegt inline. Und in Kombination mit dem Lambda als Visitor ist sofort offensichtlich, daß da optimaler Assembler unten rausfällt. Das heißt, mit solchen Sprachmitteln kann ich selbst da noch elegante, lesbare und typsichere Konstrukte bauen, wo es auf das letzte Bit an Performance ankommt. Oder wenn ich extreme Limitierungen zu beachten habe (z.B. keinerlei Heap-Allokation).

Bewerten
- +
Anzeige