Czy programowanie funkcjonalne ma znaczenie dla tworzenia stron internetowych? [Zamknięte]

88

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”?

Hates_
źródło

Odpowiedzi:

31

Kilka przykładów z mojej głowy:

  • Wieśniak! Sklep jest obsługiwany przez Lisp (pierwotnie nazwany Viaweb przed przejęciem)
  • Reddit został w pełni prototypowany w Lisp, chociaż przeszedł na Pythona w 2005 roku
  • Hacker News jest napisany w całości w Arc (dialekt Lisp)
Greg Case
źródło
7
Wieśniak! Sklep został przepisany w c ++ kilka lat temu.
apg
5
język! = paradygmat programowania.
phkahler
58
Dziwny wybór przykładów ... Yahoo! Store został napisany przez Paula Grahama, który jest wielkim zwolennikiem Lispa. Napisał także Hacker News, który jest faktycznie klonem Reddita. Przypuszczalnie HN został napisany nieco w odpowiedzi na przejście Reddita z Lispa na Pythona, podczas gdy ludzie z Reddita byli częścią YCombinator: programu akceleratora, który jest prowadzony przez Paula Grahama. Policzyłbym to jako JEDEN przykład, a nie trzy.
Brandon Bloom,
Konfiguracja serwera @ShermPendley, konfiguracja sieci i dostęp do bazy danych są również głównymi czynnikami wpływającymi na wydajność. Czasy wykonywania skryptów w aplikacjach internetowych to zazwyczaj niewielki ułamek całkowitego kosztu.
AgmLauncher
62

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.

JacquesB
źródło
20

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.

Sherm Pendley
źródło
20

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.

  • HAppS - serwer aplikacji internetowych firmy Haskell
  • Strony serwera Haskell
  • Linki - funkcjonalny język programowania WWW
  • mod_caml - moduł CGI OCaml dla Apache
  • Ocsigen / Eliom - serwer WWW / framework programistyczny OCaml
  • OPA - komercyjny framework aplikacji internetowych
  • Yesod - framework sieciowy dla Haskell

Nie mam żadnego doświadczenia z żadnym z nich. Może komentatorzy mogą zastanowić się, co się dla nich sprawdziło.

Chris Conway
źródło
4

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

Ryan Teo
źródło
3

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.

Niemiecki
źródło
3

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.

Cyrus Omar
źródło
3

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ć.

Peter Scott
źródło
2

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.

Chuck McKnight
źródło
2

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

Marcus Westin
źródło
2

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.

Gordon Guthrie
źródło
2

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ł.

A_Var
źródło
1

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.

rbanffy
źródło
1

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ę.

Yoric
źródło
1

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 .

gopi
źródło
0

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.

Amit Agrawal
źródło
-2

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.

Joel
źródło
1
Właściwie Paul Graham mówi, że dużą zaletą Lisps jest to, że jest to „najpotężniejszy” dostępny język. Popiera swój argument, mówiąc, że mniej więcej jedna czwarta viaweb (według linii) to makra Lispa. Metaprogramowanie w większości języków (szczególnie tych dostępnych w połowie lat 90.) jest trudne. Nie jest to prototyp, jeśli zostanie przesłany na serwer produkcyjny.
nmichaels