Ostatnio widziałem wiele na temat programowania funkcjonalnego, a Clojure wygląda szczególnie interesująco. Chociaż `` rozumiem '' podstawowy opis tego, co to jest, nie mogę wymyślić, jak bym go używał na co dzień jako programista stron internetowych, jeśli w ogóle mogę. Wiele z tego, co przeczytałem, koncentruje się na matematycznej stronie programowania funkcjonalnego, a nie na typowych sytuacjach programistycznych, które można znaleźć w zwykłym OO.
Czy mam zły koniec drążka? Czy programowanie funkcjonalne jest całkowicie niezwiązane z tworzeniem stron internetowych? Jeśli nie, czy są jakieś przykłady użycia tego „w sieci”?
clojure
functional-programming
Hates_
źródło
źródło
Programowanie funkcjonalne bardzo dobrze pasuje do aplikacji internetowych. Aplikacja internetowa odbiera żądanie HTTP i generuje wynik HTML. Można to uznać za funkcję od żądań do stron.
Porównaj z aplikacjami komputerowymi, w których zwykle mamy długotrwały proces, stanowy interfejs użytkownika i przepływ danych w kilku kierunkach. Jest to bardziej odpowiednie dla OO, który zajmuje się obiektami ze stanem i przekazywaniem komunikatów.
źródło
Nie rozumiem, dlaczego nie - tak długo, jak dostarczasz zgodny ze standardami HTML do przeglądarek, nie obchodzi ich, co użyłeś do jego stworzenia, czy to język funkcjonalny, język imperatywny czy wyszkolone małpy.
źródło
Programowanie czysto funkcjonalne może nie być dobrze odwzorowane w środowisku programowania internetowego. Ale główną przeszkodą jest po prostu brak infrastruktury (frameworków i API). Minie dużo czasu (prawdopodobnie nigdy, szczerze mówiąc), zanim język funkcjonalny będzie miał tak bogate środowisko programowania internetowego, jak Java, Python czy Ruby.
To powiedziawszy, istnieje kilka opcji.
Nie mam żadnego doświadczenia z żadnym z nich. Może komentatorzy mogą zastanowić się, co się dla nich sprawdziło.
źródło
Twitter przepisał swoje zaplecze w Scala , języku JVM, który obsługuje zarówno paradygmat obiektowy, jak i funkcjonalny.
Ponadto platforma internetowa Lift jest napisana w języku Scala.
źródło
W przypadku Clojure istnieje ciekawy startup (TheDeadline), który powstał przy użyciu Clojure i Google App Engine. Mają dobrego ppt na Slideshare i wywiad w InfoQ.
Dobra dyskusja na temat wdrażania Clojure z GAE: http://news.ycombinator.com/item?id=1239788
O ile wiem, Clojure ma kilka bibliotek do tworzenia stron internetowych. Compojure Ring Conjure
Mam nadzieję, że to odpowiada na niektóre z twoich pytań =) (ja też dopiero zaczynam ..)
Najlepsze, Ryan
źródło
Nie jest to całkowicie niezwiązane z tworzeniem stron internetowych. Aplikacja znajdująca się na serwerze może bardzo dobrze wykorzystywać funkcje funkcjonalne, takie jak zamknięcia, funkcje wyższego rzędu, niezmienność, przezroczystość referencyjna ... na przykład na pewno masz kolekcje, które musisz przekształcić lub manipulować w jakikolwiek sposób. Programowanie funkcjonalne pomaga tutaj i nie bez powodu jego idiomy przenikają do języków głównego nurtu. Funkcje funkcjonalne pomagają w zwięzłości, testowalności, zrównoleglaniu, a także mogą zapewnić natywne rozwiązania problemów, które w przeciwnym razie rozwiązałbyś za pomocą wzorców.
Aktualizacja: istnieją również frameworki internetowe dla języków funkcjonalnych. Weblocks dla Common Lisp, Lift dla Scala. To są te, o których słyszałem, może być ich więcej ... jednak niekoniecznie musisz być czysto funkcjonalny - na przykład Scala nie jest czysta i powinna działać z dowolnym frameworkiem Java, nadal możesz używać programowania funkcjonalnego dla warstwy biznesowej itp.
źródło
Sprawdź Ur / Web . Jest bardzo szybki, a jego statyczny system typów wie o takich rzeczach, jak HTML i SQL, więc może zagwarantować wiele fajnych rzeczy związanych z bezpieczeństwem.
źródło
Wydaje się, że Erlang jest często używany w niektórych elementach infrastruktury skalowalnych aplikacji internetowych. bazy danych CouchDB i Riak są napisane głównie w Erlang, podobnie jak serwer kolejkowania wiadomości RabbitMQ. Jednym z kluczy do jego sukcesu jest to, że obsługuje on współbieżność poprzez przekazywanie komunikatów, bez współdzielonego stanu mutowalnego. Ten sposób myślenia o problemach jest przydatny bardziej niż jakikolwiek konkretny język programowania funkcjonalnego.
Lub spójrz na MapReduce. Jest to bardzo funkcjonalny sposób patrzenia na obliczenia, nawet jeśli twoja mapa i funkcje redukujące są wewnętrznie stanowe - iz tego powodu bardzo dobrze pasuje do odpytywania dużych zbiorów danych w sposób rozproszony i odporny na błędy.
Z całą pewnością idź z tym, co wydaje ci się najbardziej praktyczne. Ale zawsze pamiętaj o programowaniu funkcjonalnym, ponieważ nigdy nie wiesz, kiedy może się przydać.
źródło
Robią całkiem fajne rzeczy na Uniwersytecie w Edynburgu z programowaniem funkcjonalnym dla sieci.
źródło
Język i paradygmat nie mają znaczenia w przypadku aplikacji internetowych, wszystkie są równie dobre i złe. Jeśli szukasz powodu, aby nauczyć się nowego paradygmatu, po prostu zanurkuj. Radzę przeanalizować problem, który próbujesz rozwiązać, i wybrać odpowiedni zestaw narzędzi.
źródło
Javascript (język części FE w sieci, a coraz częściej także BE) nie jest funkcjonalny jako taki, ale funkcje są funkcjonalne pierwszego rzędu
źródło
Właśnie uruchomiliśmy internetowy arkusz kalkulacyjny, w którym backend jest w całości napisany w Erlangu.
http://hypernumbers.com
Według wszelkich standardów jest to jedna z najbardziej złożonych aplikacji internetowych, które można zbudować za pomocą ogromnego graficznego interfejsu użytkownika o złożoności umysłowej.
źródło
Oto doświadczenie dla programistów internetowych w tworzeniu aplikacji internetowych przy użyciu Haskell . Chociaż języki funkcjonalne są bardzo bezpieczne dla typów i mają dobrą współbieżność, zawsze brakowało im najlepszych interfejsów API rasy, ponieważ od dawna jest ulubieńcem środowiska akademickiego, a jeszcze nie został mocno przyjęty w prawdziwym świecie. Mam nadzieję, że nie jest za daleko. Erlang już się w to wpakował.
źródło
Powodem, dla którego programowanie funkcjonalne jest popularne w programowaniu internetowym, jest to, że wyjaśnia współdzielony i zmieniający się stan oraz pozwala programiście wyrazić części czysto funkcjonalne jako czyste funkcje. Czyste funkcje mają tę zaletę, że są bardzo proste w obsłudze równoległej - ponieważ nie mają skutków ubocznych.
Przynajmniej to mój powód.
źródło
Inna krótka odpowiedź: http://www.mlstate.com - pełna platforma programistyczna oparta na FP. Czysta semantyka języka pozwala na wszelkiego rodzaju automatyczną analizę bezpieczeństwa, optymalizacje itp.
Uwaga: tam pracuję.
źródło
Języki funkcjonalne mogą nie być bezpośrednio przydatne do tworzenia świetnych aplikacji, ale do tworzenia naszych aplikacji w dużym stopniu używamy paradygmatu programowania funkcjonalnego. Czyste programowanie funkcjonalne nakłada ograniczenie na „brak skutków ubocznych”. Gwarantuje to, że czyste wywołania funkcjonalne przyniosą ten sam wynik w każdej kolejności, w jakiej są wywoływane. Nie jest to idealne rozwiązanie do tworzenia aplikacji internetowych, ale jeśli programowanie funkcjonalne jest połączone z systemem zmieniającym stan, można zbudować solidną aplikację internetową. Spójrz na mój artykuł, aby uzyskać więcej informacji: FAST Server Również te slajdy .
źródło
Tak, ponieważ programowanie funkcjonalne można wykonać w dowolnym języku, możesz go używać jako programista na co dzień.
Powinieneś? zależy to od problemu, który rozwiązujesz. Programowanie funkcyjne jest paradygmatem programowania i to, gdzie należy go używać, zależy od problemu, który rozwiązujesz.
Aby uprościć decyzję, zastanów się, czy łatwiej jest rozwiązać jakiś problem za pomocą koncepcji OOP, gdzie hermetyzacja, polimorfizm, cechy dziedziczenia mogą ułatwić Ci życie?
Jeśli tak, nie idź tam do programowania funkcjonalnego i po prostu używaj OOP. Jeśli Twoja aplikacja ma wykonywać złożone obliczenia / obliczenia / logikę biznesową i obejmuje przetwarzanie w dużym stopniu współbieżnym, programowanie funkcjonalne może w takich przypadkach oferować wiele narzędzi i korzyści.
To tylko różne style budowania struktury i elementów programów, więc chodzi o użycie odpowiedniego narzędzia do właściwej pracy. Reszta można zrobić wszystko, używając wszystkiego.
Programowanie funkcjonalne w tworzeniu stron internetowych:
JavaScript obsługuje programowanie funkcjonalne i jest bardzo pomocny, gdy jesteśmy w kontekście tworzenia stron internetowych. Framework React jest pod silnym wpływem zasad programowania funkcjonalnego i jest używany w wielu aplikacjach internetowych.
Ponadto można znaleźć wiele aplikacji internetowych zbudowanych i uruchomionych za pomocą frameworków opracowanych w funkcjonalnych językach programowania wymienionych poniżej:
• WebSharper (F #)
• Snap (Haskell)
• Winda (Scala)
• Ocsigen (OCaml)
• Chicago Boss, Zotonic (erLang)
Mam nadzieję, że moja odpowiedź każdemu pomoże.
źródło
Prawdopodobnie go nie użyjesz i nie powinieneś go używać, ale gdy mówisz, że ktoś zawsze znajdzie wyjątek od reguły (Viaweb itp.). Zasadniczo nie ma „super języka”, są tylko działające wiersze kodu, zwykle w „Blubie”. Nawet Paul Graham mówi, że główną (właściwie jedyną) korzyścią dla Lispa jest umiejętność szybkiego tworzenia prototypów.
Również „super języki” zwykle raczej przeszkadzają, a nie zwiększają czytelność kodu, co oznacza, że jeden „geniusz”, który je napisał, musi utrzymywać go na zawsze, ponieważ nikt inny nie może go zrozumieć, zwłaszcza że jest prawdopodobne, że napisze go w swoim własnym zmodyfikowanym dialekcie. Zmniejsza to możliwy zakres każdego projektu, co oznacza, że nawet jeśli można zrobić nowe, innowacyjne rzeczy, nie są one rozszerzalne i pozostają na stosunkowo małą skalę (jak Hacker News in Arc).
Nie oznacza to, że ktoś nie może mieć genialnego pomysłu i wdrożyć go w niezrozumiałym stylu, który następnie można ponownie napisać w Blubie i rozszerzyć, aby wiele osób mogło z niego skorzystać. Właściwie to właśnie wydarzyło się we wszystkich historiach sukcesu Lispa, nie wspominając o każdym słynnym filozofie, który kiedykolwiek żył. Ale oczywiście, jeśli jesteś „geniuszem”, możesz również stworzyć prototyp swojego produktu w inny sposób.
Jeśli chodzi o FP na JVM, są ograniczone, ale fajne rzeczy możliwe. Chociaż osobiście użyłbym go tylko do prototypowania, możliwe jest, że masz przypadek użycia (zwykle coś związanego z wielowątkowością), w którym zapewnia pewne ulepszenia.
źródło