-
Data: 2018-01-08 20:25:13
Temat: Re: Co jest nie tak z C++ (było: Rust)
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu poniedziałek, 8 stycznia 2018 14:21:00 UTC+1 użytkownik Maciej Sobczak
napisał:
> > Mylisz się.
> > Pewne strategie implementacji rekurencji działają wolniej
> > (i zużywają więcej zasobów) od typowych strategii implementacji
> > iteracji, i tyle.
> > Istnieją strategie, pozwalające implementować rekurencję
> > ogonową (czyli taką, która realizuje iterację) bez narzutu.
>
> Tak, jak kompilator zamieni rekurencję na iterację, to działa tak szybko, jak
iteracja. Nie jest jednak prawdą, że bez narzutu, bo tym narzutem może być też
większy koszt kompilacji i optymalizacji kodu. Bo co przepłacać?
Jest dokładnie odwrotnie.
Jeżeli przyjmiesz strategię kompilacji polegającą na tym,
że adres powrotu przekazujesz przez rejestr, a nie przez stos
(i to kompilowana funkcja ma wiedzieć, czy wartość rejestru
ma być odłożona na stosie), to nie dość, że masz mniej odwołań
do pamięci i koszt wywołania funkcji Ci maleje, to optymalizację
rekurencji ogonowej masz w zasadzie za darmo.
Mówienie w tym kontekście o "wyższym koszcie kompilacji i optymalizacji
kodu" jest pretensjonalne, zważywszy na to, jakich innych optymalizacji
dokonują współczesne kompilatory.
> Natomiast iteracja zawsze działa tak szybko, jak iteracja. I zawsze jest tak tania,
jak iteracja.
Nie ma czegoś takiego, jak "zawsze".
Jeżeli w Pythonie 2.0 iterujesz po range(n), to w skład kosztu
iteracji wchodzi zainicjalizowanie n komórek pamięci na wektor,
sama iteracja plus odśmiecenie tej pamięci.
> > > Moja iteracyjna definicja przodka była prostsza od Twojej rekurencyjnej.
> >
> > W jaki sposób chciałbyś uzasadnić, że była prostsza?
>
> Już pisałem: mniej liter, krótsza gramatycznie, nie odwołuje się do definiowanego
pojęcia.
Ale odwołuje się do frazy "i tak dalej", która - w przeciwieństwie
do rekurencji - nie jest zrozumiała sama przez się.
Tak samo jak x[[1 ;; ;; 10]] nie jest zrozumiałe samo przez się.
> > > Moja iteracyjna metoda wyboru elementów z listy też była prostsza.
> >
> > W jaki sposób chciałbyś uzasadnić, że była prostsza?
>
> Ma mniej liter? Mniej razy się pomylę? Mniej bugów będę tam poprawiał?
Jeżeli elementy są indeksowane od 0, to już się pomyliłeś i będziesz musiał
poprawić buga.
> > > Co musisz zmienić w swoim przykładzie, żeby wybrać z listy co dziesiąty
element?
> >
> > Pewnie musiałbym zmienić więcej.
>
> To zmień i pokaż. Bo szczerze mówiąc nie za bardzo mi się chce szarpać w
nieskończoność o filozofię natury, istoty, prostoty, czy czego tam.
> Na razie niczego użytecznego w tej dyskusji nie ustaliliśmy.
Jeżeli nie będziemy definiować używanych przez siebie pojęć, to
raczej niczego użytecznego nie ustalimy.
Jeżeli pod pojęciem prostoty będziemy rozumieć ilość znaków,
to nagle okaże się, że programy w APLu są najprostsze, albo
że Perl jest zasadniczo jakieś 30% prostszy od Pythona.
> > Co nie oznacza, że Twoje rozwiązanie
> > jest prostsze, tylko to, że Twoje rozwiązanie można łatwiej dostosować
> > do pewnej klasy zmian wymagań (z czym się zasadniczo zgadzam)
>
> To też jest użyteczna miara prostoty. Jeśli coś można łatwiej do czegoś dostosować,
to chyba dobrze, co? Po co przepłacać?
Nikt nie mówi, że to źle. Ale to, że coś łatwo do czegoś dostosować,
niekoniecznie jest miarą prostoty.
Na przykład łatwo dostosować telewizor do tego, żeby wyświetlił
jakiś obraz, niż namalować taki obraz na ścianie. A jednak ściana
jest czymś prostszym, niż telewizor.
> Jeszcze raz, co dziesiąty z szeregu wystąp: x[[1;; ;;10]].
>
> Pokaż wersję rekurencyjną i uzasadnij, że zawsze będzie to rekurencja ogonowa, bo
przecież nie chcemy, żeby tak prosta rzecz działała wolniej, niż potrzeba.
Ja widzę, że zupełnie nie rozumiesz, o co mi chodzi.
Jeżeli nie chcesz nawet spróbować zrozumieć, i będziesz się
w kółko upierał z jakąś niezdefiniowaną naturalnością i prostotą
rozumianą jako ilość znaków, to dalsza dyskusja raczej nie ma sensu.
Następne wpisy z tego wątku
- 09.01.18 13:35 Maciej Sobczak
Najnowsze wątki z tej grupy
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
Najnowsze wątki
- 2025-06-19 Gdynia => Sales Executive / KAM <=
- 2025-06-19 Warszawa => IT Business Analyst (projects in the telco sector) <=
- 2025-06-19 Lublin => Programista Delphi <=
- 2025-06-19 Warszawa => Scrum Master <=
- 2025-06-19 Warszawa => Solution Architect <=
- 2025-06-19 Warszawa => Software Solution Architect <=
- 2025-06-19 Zakrzewo => Konsultant SAP HCM <=
- 2025-06-19 Zakrzewo => SAP HCM Consultant <=
- 2025-06-19 Poznań => SAP HCR Consultant <=
- 2025-06-19 6,756,000 car crashes in the United States in 2019 with 36,096 fatalities.
- 2025-06-19 6,756,000 car crashes in the United States in 2019 with 36,096 fatalities.
- 2025-06-18 Poseł KO mecenas Giertych został pouczony o obowiązującym prawie [z SN]
- 2025-06-18 112
- 2025-06-18 Poznań => MLOps Engineer <=
- 2025-06-18 Gdańsk => Mainframe (z/OS, Assembler) Developer <=