"Czysty kod" a wydajność.
Przyklady gdzie widać, ze czysty kod szkodzi wydajności - jakie są wasze przemyślenia? Zmuszają was do pisania czystego kodu?
Emil88PL z- #
- #
- #
- 32
Przyklady gdzie widać, ze czysty kod szkodzi wydajności - jakie są wasze przemyślenia? Zmuszają was do pisania czystego kodu?
Emil88PL z
Komentarze (32)
najlepsze
1. Make it work
2. Make it right
3. Make it fast [enough]
NAJPIERW ma być kod dobrej jakości, POTEM idziemy na kompromisy wydajnościowe.
Dlaczego mówię kompromisy? Bo niemalże każda optymalizacja dzieje się kosztem czytelności kodu, jego elastyczności czy testowalności.
Dlaczego taka kolejność? Bo jak mamy odpowiednie abstrakcje, to łatwiej z nich rezygnować TAM GDZIE MA TO SENS, czyli z reguły w
Facet przedstawia to na prostym przykładzie, gdzie koszt wywołania wirutalnej metody ma znaczny udział w koszcie operacji. W wielkim projekcie lepiej porzucic 40% wydajności na rzecz 100% wiecej czasu developmentu z uwagi na to ze kod jest mało czytelny i łatwo popsuć
Optymalizacja z tabelką to szczególny przypadek i to jest przykład dobrego podejścia do 3. Make it fast [enough] i widać też tutaj że własnie wymaga to
Dla mnie to jest scenariusz "firma garażowa" vs korporacja. Czy firma garażowa jest bardziej wydajna i elastyczna? Zdecydowanie!
W praktyce zazwyczaj robi sie cos pomiędzy, tam gdzie przejrzystość ma większe znaczenie niż jakieś przyspieszenie (które w rezultacie będzie nieodczuwalne), stosujemy clean code, w innych wypadkach optymalizujemy. Tak stosuje się od wieków. Pamiętam jak
https://eli.thegreenplace.net/2013/12/05/the-cost-of-dynamic-virtual-calls-vs-static-crtp-dispatch-in-c
https://www.modernescpp.com/index.php/more-about-dynamic-and-static-polymorhism
Wersja z samymi switchami nie udowadnia w zasadzie niczego. Można z tego skorzystać w małych projektach, lub tam gdzie jest bardzo duży nacisk na wydajność (gry, systemy embedded) ewentualnie zostawać w małych fragmentach większych systemów ale spróbuj napisać w ten sposób i przetestować coś większego.
Bez stosowania SOLIDa projekt zamieni się szybko
@Sztywnesutkiszatana: kompletna bzdura, SOLID nie jest jedyną metodologia tworzenia czystego kodu. Kurczowe trzymanie się SOLID wręcz prowadzi do niepotrzebnej komplikacji kodu i utrudnia zmiany i wbrew pozorom nie jest to żaden czysty kod.
I co z tego? W przypadku polimorfizmu będziesz musiał przejrzeć wszystkie implementacje, na jedno wychodzi. Tylko że
A potem cyk, Bjarne Stroustrup meme, bo rząd USA zaleca unikać cze plusz plusza, a w 21. wieku NIE DA się tak zrobić języka, żeby nie było wycieków pamięci…
@PoteznyMagWody: wręcz odwrotnie. Tzn oczywiście w każdym języku da się pisać nieczytelny kod, ale akurat w językach takich jak C++ i Rust masz coś takiego jak zero-cost abstractions. Oznacza to tyle, że można pisać bardzo wysokopoziomowy i czytelny kod, np. używając operacji na kolekcjach takich jak map/filter/reduce, który będą mieć ostatecznie wydajność