7

zastanawiałem się o korzyściach płynących z programowaniem bezpaństwowcem i znaleźć kogoś, kto podziela moje pytanie: Advantages of stateless programming?zalety programowania stanowego?

jak i przeczytać odpowiedzi chociaż, to mnie ciekawi pytanie odwrotnego. jakie są zalety programowania stateful? Wygląda na to, że ostatnio dużo uwagi poświęcono kodowi bezstanowemu, ale jestem ostrożny wobec trendów.

wydaje się, że programowanie stanowe (tj. Imperatywne) może nadawać się do pewnych scenariuszy lepiej niż programowanie bezpaństwowe (tj. Funkcjonalne) i chciałbym być w stanie lepiej rozpoznać, które problemy mogą zostać rozwiązane przez programowanie stanowe.

+0

Myślę, że twoje pytanie jest czytelne, ale musisz go poprawić: usuń ostatni akapit (jego subiektywny) i spróbuj aktywnie określić, jakiego rodzaju odpowiedzi oczekujesz. –

+1

dlaczego to pytanie zostało zamknięte, a pytanie odwrotne (powiązane z powyższym) nie było? – ericsoco

+0

@JohannesRudolph - zaznaczone i zredagowane. – ericsoco

Odpowiedz

6

Istnieje tylko kilka przypadków, w których nie ma debatowalnych zalet modelu programowania opartego na zmiennym, dzielonym stanie w porównaniu do niezmiennego, bezstanowego modelu programowania. Jednym z obszarów, w którym zmienność może przynieść ogromne korzyści, jest umożliwienie działania algorytmów w miejscu. Wiki haskell ma świetny przykład na temat implementacji quicksort: http://www.haskell.org/haskellwiki/Introduction#When_C_is_better

Podsumowując, jeśli nie pozwalasz na modyfikacje pamięci list, musisz utworzyć posortowaną kopię tego pliku. To samo dotyczy prawie każdego innego algorytmu, który modyfikuje niektóre struktury danych, np. drzewo AVL.

Ogólnie rzecz biorąc, języki programowania funkcjonalnego mają tendencję do większej ilości pamięci niż ich imperatywne odpowiedniki. W dzisiejszych czasach pamięć jest tania, jednak przepustowość ma kluczowe znaczenie, a prędkości pamięci nie rosną proporcjonalnie do wzrostu, jaki widzimy w mocy procesora. Należy jednak zauważyć, że model wykonawczy Haskella pozwala Kompilatorowi na wykonanie pewnych fajnych optymalizacji, także pod względem wykorzystania pamięci i wzorców dostępu. W pewnym stopniu może to zrekompensować teoretyczne wady.

1

Czytelność jest kluczowa. Lubię programowanie funkcjonalne (obecnie jestem na uporze typu "clojure"), ale stan jest taki, jak działa świat. To nie przypadek, że paradygmat obiektowy jest bardziej popularny niż funkcjonalny lub inny rodzaj programowania. OOP i programowanie proceduralne są ścieżką najmniejszego oporu dla nowych programistów. Większość ludzi intuicyjnie rozumie ideę obiektu jako czegoś, co zmienia stan (może się poruszać, zmieniać kolor itp.), A nie kombinator Y, który pomaga w rekursji.

+0

Nie wiem, czy to kupuję. W końcu jednym z powodów, dla których są "ścieżką najmniejszego oporu", jest to, że języki OOP są już tak popularne, co oznacza, że ​​mają więcej samouczków, więcej narzędzi, więcej IDE, więcej wszystkiego. Ale popularność nie oznacza prostoty pojęciowej. – thedayturns

+0

Zgadzam się z tym w przypadku niektórych języków (dobrze zaimplementowane OOP jest bardzo ładne). Chodzi mi o to, że ludzie myślą w stanie. Sam świat jest tylko skończoną maszyną państwową. – semisight

+3

"Stan jest tym, w jaki sposób działa" - wysoce spekulatywna filozoficzna hipoteka. Można było kontratakować: "Matematyka i mechanika kwantowa są tym, jak działa świat (a pod pewnymi warunkami zdaje się istnieć stan)". – Ingo

1

Stan jest ważny. Każdy kawałek w tym wszechświecie ma swój stan, to jest stan, który określa, jak zachowuje się system, stan sprawia, że ​​system jest dynamiczny i użyteczny, ale ponieważ stan jest tak ważny, ważne jest również, w jaki sposób dostęp do tego stanu i manipulowanie nim. Nie byłoby dobrze, gdyby jakikolwiek człowiek mógł manipulować stanem innych ludzi (stan jako treść w mózgu człowieka). Moja opinia na temat stanu jest taka, że ​​powinna być wyraźna i nie powinna być czymś, co jest rozproszone w całym kodzie i staje się bardzo domniemana, że ​​trudno jest wiedzieć, w jakim stanie znajduje się system i która część systemu jest odpowiedzialna za którą część państwowe. Stan powinien być kontrolowany w taki sposób, aby można było łatwo powiedzieć, że ta część stanu systemu jest obsługiwana przez ten moduł i tylko ten moduł.

W każdym programie PR w świecie rzeczywistym zawsze będzie on składał się z 2 części, z których jedna jest bezpaństwowcem, która byłaby twoim głównym algorytmem itp. Oraz pozostałą częścią, która będzie utrzymywać stan programu.