-
Data: 2017-10-05 08:28:44
Temat: Re: Optymalizacja struktur danych dla programów funkcyjnych
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu czwartek, 5 października 2017 01:37:44 UTC+2 użytkownik Maciej Sobczak
napisał:
> > Można sobie pomyśleć program, który oblicza wartość jakiegoś programu
> > czysto funkcyjnego
>
> Ale nie ustaliliśmy jeszcze, co to znaczy, że program jest czysto funkcyjny.
Z tego co patrzę na historię tej rozmowy, ustaliliśmy to na dość
wczesnym etapie.
> > To, czy liczba jest pseudolosowa, czy nie jest, czy pochodzi z wejścia,
> > czy z kosmosu, nie ma znaczenia dla *ISTOTY* danego programu.
>
> I właśnie tej istoty szukamy. Jeżeli istotą jest przetwarzanie wejścia na wyjście,
to wszystkie programy w istocie takie są. Natomiast jeśli jest nią generowanie
efektów ubocznych, to też wszystkie takie są.
Otóż właśnie nie, na co również dawałem przykłady.
> > Dałem kilka kontrprzykładów. Systemy kolejkowe czasu rzeczywistego
> > nie są deterministyczną funkcją input->output. Być może mają komponenty,
> > które można w taki sposób analizować, ale ich istotą jest działanie
> > w czasie rzeczywistym, i reagowanie na zdarzenia w zależności od
> > jakiegoś ich wewnętrznego stanu.
>
> No to robimy ćwiczenie na wyobraźnię:
>
> 1. *Narysuj* zdarzenia w środowisku i otoczeniu programu, w ich rozciągłości
czasowej. Oś czasu, od lewej do prawej, z zaznaczonymi zdarzeniami, wartościami, itd.
> 2. Zrób z tego obrazka plik, np. w formacie PNG. Czyli *jedną wartość*.
> 3. Podobnie narysuj na osi czasu odpowiedź systemu na taką stymulację. Znowu, z
odpowiednią skalą czasu, wartościami (tak, żeby po złożeniu tych dwóch obrazków
powstał opis działania programu w czasie), itd.
> 4. Z tego drugiego obrazka też zrób plik.
>
> Otóż okazuje się, że Twój "system czasu rzeczywistego" przetwarza pliki graficzne.
Czyli przetwarza pojedyncze wartości. To, czy wczyta od razu cały plik z wejścia i
wypluje cały plik na wyjściu, czy też będzie je przetwarzał po jednym pikselowym
pasku wzdłuż jednego boku obrazka (czyli np. wzdłuż osi czasu, co odpowiada naszej
percepcji działania w kontekście upływającego czasu) nie ma znaczenia dla istoty tego
programu, którą jest transformacja jednego obrazka w drugi.
Problem polega na tym, że mylisz w tej chwili istotę programu ze środkami
analizy. Owszem, każdy program można analizować przy pomocy pojęcia funkcji,
albo przy pomocy pojęcia maszyny stanu, albo czegoś jeszcze innego.
Ale to nie znaczy, że te środki analizy zawsze pokrywają się z istotą programu.
W szczególności, na przykład, częścią opisu maszyny stanu jest funkcja
przejścia w inny stan -- toteż używamy pojęcia funkcji pomocniczo do
opisania maszyny stanów. Ale diagram przejść stanu jest czymś istotnie
różnym od pojęcia funkcji.
> I teraz ten cały podział nie dotyczy istoty działania programu (bo ta istota jest
zawsze taka sama), tylko sposobu, w jaki my, ludzie, danego programu użyjemy. Możemy
odpalić program jednym strzałem albo też delektować się powolnym budowaniem wyniku,
ale to jest ten sam program. Czyli dotyczy naszej percepcji a nie jest fundamentalnym
atrybutem problemu, który dany program rozwiązuje. Bo problem jest zawsze ten sam.
Problem nie jest zawsze ten sam. Projektanci kompilatorów muszą zwracać
uwagę na zupełnie inne rzeczy, niż projektanci gier komputerowych albo
stron internetowych, po w pierwszym przypadku kluczowy jest wynik, a w
pozostałych -- interakcja.
Rzeczywiście, istniał kiedyś np. program do dowodzenia twierdzeń autorstwa
Boyera-Moore'a NQTHM, który dawał użytkownikom możliwość "delektowania się
powolnym budowaniem wyniku", ale to nie należało do jego istoty.
Następne wpisy z tego wątku
- 05.10.17 13:48 Maciej Sobczak
- 05.10.17 18:58 g...@g...com
- 06.10.17 14:01 Maciej Sobczak
- 06.10.17 19:59 g...@g...com
- 07.10.17 23:22 Maciej Sobczak
- 08.10.17 10:47 g...@g...com
- 08.10.17 23:30 Maciej Sobczak
- 09.10.17 07:58 g...@g...com
- 09.10.17 14:25 Maciej Sobczak
- 09.10.17 18:12 fir
- 09.10.17 19:47 g...@g...com
Najnowsze wątki z tej grupy
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
- Ada 2022 Language Reference Manual to be Published by Springer
- Press Release - AEiC 2023, Ada-Europe Reliable Softw. Technol.
- Ada-Europe - AEiC 2023 early registration deadline approaching
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2023
- Ile cykli zajmuje mnożenie liczb 64-bitowych?
Najnowsze wątki
- 2024-05-08 Koniecznie potrzebuję kampera...
- 2024-05-08 Gorzów Wielkopolski => Consultant/Implementer Comarch ERP XL <=
- 2024-05-08 => Solution Architect (secure communication and IoT solutions) <=
- 2024-05-08 Warszawa => Junior Rekruter <=
- 2024-05-08 Bieruń => Administrator i wdrożeniowiec Lotus Notes/Domino <=
- 2024-05-08 Warszawa => Technical Lead ( (Java Background)) <=
- 2024-05-08 Kraków => AI Specialist <=
- 2024-05-08 Kraków => Service Leader/PLC Programmer with German <=
- 2024-05-08 Marki => Solution Architect <=
- 2024-05-08 Warszawa => Senior Rust Software Engineer <=
- 2024-05-08 Błonie => Sales Specialist <=
- 2024-05-07 Chess
- 2024-05-07 Do czego nadaje się QDockWidget z bibl. Qt?
- 2024-05-07 Vitruvian Man - parts 7-11a
- 2024-05-07 Warszawa => International freight forwarder <=