fur napisał(a)
Natomiast Delphi jest obiektowo kompletnie do d**y;
przecież tam nie ma nawet automatycznych destruktorów, tz. gdy tworzysz np. TFile, wówczas sam musisz to jawnie czyścić, poprzez jakieś afile.done, co w c++ samo się robi.
Ja jednak polecałbym powstrzymać się od wypowiadania na temat, o którym raczej nie masz bladego pojęcia; Nie stosuje się czegoś takiego jak done
- jest Free
i Destroy
; A w C++ nic "samo się robi" - do tego istnieją skomplikowane mechanizmy;
Delphi (przynajmniej jego starsze wersje, nowych nie znam), podobnie jak najpopularniejsze implementacje czystego Pascala czy Object Pascala, nie wspierają GC (masz tutaj link do opisu - zapoznaj się z tym tematem), więc programista w wielu przypadkach musi sam po sobie sprzątać (ja wiem, w dzisiejszych czasach to takie nienaturalne...);
Naturalną koleją rzeczy jest to, że jeśli się dynamicznie alokuje pamięć - należy ją także zwolnić; Nie dotyczy to oczywiście typów prostych, łańcuchów, rekordów i wielu innych typów danych, a także komponentów, które automatycznie zwalnia klasa formularza w swoim destruktorze; Są jeszcze inne ciekawe przypadki, jednak nie będę ich wszystkich wymieniać, żeby nie odebrać Ci tej przyjemności - sam przeczytaj jakiś sensowny kurs;
Garbage Collection z jednej strony zapobiega tworzeniu dziurawego kodu, powodującego wycieki pamięci, ale z drugiej strony mimowolnie "uczy" niedbałości, która później obiawia się gigantycznymi memleakami, po przeniesieniu na inny język programowania, w którym nie ma "sprzątaczki"; Oczywiście to dotyczy tych programistów, którzy przenoszą swoje nawyki bez zapoznania się dokumentacją, objaśniającą wykorzystywanie zasobów pamięci;
fur napisał(a)
Jedyna przewaga Delphi nad C++ to ta instrukcja with, która pozwala unikać ciągłego pisania pełnych nazw obiektów...
Instrukcja wiążąca With to nie jest lekarstwo na wszystko; Kolejna rzecz, o której wspominasz, jednak bez jakichkolwiek sensownych "za" i "przeciw";
Pewnie jeszcze nie wiesz, że instrukcja wiążąca owszem, służy do zwolnienia programisty z powtarzania tego samego elementu kodu (to raczej nie powinno podlegać pod zasadę DRY), a ponadto może nawet przyczynić się do zoptymalizowania kodu; Zoptymalizowania połowicznego, dlatego że większość takich optymalizacji można ominąć, przez wykorzystanie zmiennej do zapisania referencji np. do jakiegoś obiektu, aby nie pobierać go za każdym razem;
Oczywiście skoro mowa o plusach, także należy wspomnieć o minusach; Nieumiejętne posługiwanie się instrukcją wiążącą doprowadza w dużej ilości przypadków do pogorszenia eketywności kodu, co można zaobserwować podglądając stan stosu; Można sobie stosować tę instrukcję dowolnie, ale trzeba mieć na uwadze, że albo używamy ją dla przyspieszenia pracy kodu (jeśli wiemy jak ją użyć), albo dla skrócenia zapisu instrukcji (co wiązać się może ze spowolnieniem wykonywania danego kodu);
Istnieje wiele technik optymalizacji kodu, z którymi każdy prędzej czy później powinien się zapoznać; Tobie zaś polecam zapoznanie się z tym artykułem, który zawiera kilka cennych wskazówek, które można wykorzystać zarówno w strukturalnym Pascalu, jak i w Delphi czy Object Pascalu;
A jeśli uważasz, że Delphi jest "do d**y" tylko dlatego, że nie posiada mechanizmów sprzątających, to najwidoczniej ani Pascal, ani Delphi, ani Object Pascal nie jest dla Ciebie; Pisz więc kod w takich językach jak np. Java, gdzie "sprzątaczka" istnieje i ma się dobrze.