Wdrożenie programowania funkcjonalnego w prawdziwym świecie? [Zamknięte]

9

Próbuję zapoznać się z różnymi rodzajami języków, aby zrozumieć obszary, w których każdy z nich jest wyjątkowo dobry. Do tej pory zajmowałem się językiem C - językiem proceduralnym, C ++ i java - obiektowymi językami zorientowanymi obiektowo oraz groovy - dynamicznym językiem zorientowanym obiektowo.

Prawdopodobnie każdy język programowania został uruchomiony w celu zaspokojenia potrzeb. I zakładam, że każdy język jest wyjątkowo dobry przynajmniej w jednej rzeczy, dzięki czemu staje się standardem w określonym obszarze lub dziedzinie. Podobnie jak C, C ++ stały się standardem w obszarach takich jak przeglądarka lub tworzenie gier. Python w świecie Linuxa ze względu na łatwą obsługę skryptów, Java w świecie przedsiębiorstw itp.

Teraz jestem zainteresowany nauką funkcjonalnego języka programowania, takiego jak Clojure lub Lisp. Gdzie zatem funkcjonują języki programowania w rzeczywistych scenariuszach? Nie sądzę, żeby ktoś używał Clojure lub Lisp do tworzenia aplikacji lub interfejsów użytkownika. Więc na jakie projekty powinienem sobie pozwolić po przejściu podstawowych samouczków i zasobów edukacyjnych, aby uzyskać krótkie zrozumienie dotyczące wdrażania programowania funkcjonalnego? I czy zdecydowanie polecasz jeden język w konkretnym, na przykład clojure?

Vamsi Emani
źródło
5
„Zakładam, że każdy język jest wyjątkowo dobry przynajmniej w jednej rzeczy, dzięki czemu staje się standardem w konkretnej dziedzinie lub dziedzinie” Nie jest to z reguły prawda. Niebezpieczne jest założenie, że języki są w jakiś sposób „wyspecjalizowane”. Kilka języków ma nisze, ale ogólnie nie jest to prawdą.
S.Lott,
6
„Nie wiem jak i od czego zacząć”. Co powstrzymuje cię przed rozpoczęciem ćwiczeń? Czy możesz wyjaśnić, dlaczego samouczki dla tych języków nie są pomocne ani przydatne?
S.Lott,
„C ++ i java” mają ze sobą bardzo, bardzo niewiele wspólnego.
DeadMG
Czy mogę ci powiedzieć, co naprawdę zaintrygowało cię do nauki Clojure lub Lisp, oprócz tego, że stosują paradygmat programowania funkcjonalnego?
Maxood,
3
Kiedy mówisz „w czasie rzeczywistym”, czy masz na myśli przypadek „prawdziwego świata”? Wydaje się to mieć nieco więcej sensu w kontekście tego pytania.
sepp2k

Odpowiedzi:

13

Mówisz, że programowanie funkcjonalne w świecie rzeczywistym, tak myślę, Erlang.

Erlang to język programowania służący do budowania masowo skalowalnych miękkich systemów czasu rzeczywistego z wymaganiami dotyczącymi wysokiej dostępności. Niektóre z jego zastosowań znajdują się w telekomunikacji, bankowości, handlu elektronicznym, telefonii komputerowej i komunikatorach internetowych.

http://www.erlang.org/

Robert Harvey
źródło
3
+1 Korrecto! Chciałbym też dodać, że dla początkujących w ziemi funkcjonalnej „najczystszym” językiem funkcjonalnym będzie Haskell :)
yati sagade
5

Istnieje świetny cykl wykładów na temat programowania funkcjonalnego Uniwersytetu Stanforda, który można sprawdzić na YouTube.

Radziłbym raczej przyjrzeć się Programowi niż LISP. Schemat to zmodyfikowana wersja Lisp z dalszymi ulepszeniami. Program jest głównie wykorzystywany do celów akademickich i szkoleniowych. Jest to świetny język, jeśli chcesz prowadzić badania w dziedzinie teoretycznych obliczeń komputerowych.

Aplikacje :

Google App Inventor na Androida korzysta ze schematu, w którym Kawa jest używana do kompilacji kodu schematu do kodów bajtowych dla wirtualnej maszyny Java działającej na urządzeniach z Androidem. Elk Scheme jest używany przez Synopsys jako język skryptowy dla narzędzi technologicznych CAD (TCAD).

FYI: Wykorzystanie programu

Maxood
źródło
Zastanawiam się, czy to pytanie może ci pomóc: programmers.stackexchange.com/questions/25056/...
Maxood
1
I jest ta (darmowa! I online!) Książka LISP: gigamonkeys.com/book Obejmuje ona „praktyczne” projekty, takie jak parser tagów ID3, programowanie sieciowe i filtrowanie spamu.
FrustratedWithFormsDesigner
5

Bryan O'Sullivan, założyciel mailrank.com (który został przejęty przez Facebook), zbudował całą stronę serwerową tego oprogramowania w Haskell. On przedstawiony na ten temat w Strange Loop 2011, wideo i slajdy są dostępne w Internecie.

Ten sam facet napisał książkę pod tytułem Real World Haskell . Kilka osób wspomniało o samouczkach dotyczących programowania. Ten może być całkiem odpowiedni do twoich zainteresowań (podoba mi się również sugestia Erlanga).

Barend
źródło
4

Wiem od przyjaciół z branży finansowej, że ilościowa firma handlowa Jane Street wykorzystuje OCaml do wdrażania swoich strategii handlowych. Mają stronę, na której mówią o tym, wraz z linkami do rozmów na ten temat.

Geoff Oxberry
źródło
2

Oto lista historii sukcesu Common Lisp:

http://wiki.alu.org/Industry%20Application

http://www.franz.com/success/

http://www.lispworks.com/success-stories/index.html

Chociaż Common Lisp jest tylko częściowo funkcjonalny (obsługuje również OOP i proceduralny, a także wszystko, co chcesz wdrożyć samodzielnie lub z biblioteką), jest to bardzo pragmatyczny język i niezwykle potężny w rękach kompetentnego programisty. Używam go do pisania aplikacji internetowych przy użyciu doskonałego frameworka RESTAS .

A komercyjny projekt Pythona, nad którym teraz pracuję, ostatecznie zostanie uzupełniony usługami napisanymi w lisp (RESTAS, jak sugeruje jego nazwa, jest doskonały dla usług RESTful).

Pavel Penev
źródło
1

Sugerowałbym nurkowanie w kompilatorach (zarówno w językach ogólnego przeznaczenia, jak i DSL) - tutaj programowanie funkcjonalne jest najlepsze. Będzie wiele ciekawych i przydatnych rzeczy do odkrycia, od ADT i dopasowania wzorca po jednej stronie spektrum po makra Lisp po drugiej stronie.

Logika SK
źródło
0

Możesz rzucić okiem na Hume'a .

Na stronie The Hume Programming Language :

Hume (Unified Meta-Environment wyższego rzędu) jest silnie typowanym, w większości funkcjonalnym językiem ze zintegrowanym zestawem narzędzi do opracowywania, sprawdzania i oceny współbieżnych, krytycznych dla bezpieczeństwa systemów. Hume dąży do rozszerzenia granic projektowania języków dla systemów o ograniczonych zasobach, w tym systemów wbudowanych i krytycznych dla bezpieczeństwa, poprzez wprowadzenie nowych poziomów abstrakcji i niezawodności.

Ze strony Wikipedii Hume :

Hume to funkcjonalny język programowania opracowany na University of St Andrews i Heriot-Watt University w Szkocji, nazwany na cześć XVIII-wiecznego filozofa Davida Hume'a. Celuje w systemy osadzone w czasie rzeczywistym, dążąc do stworzenia projektu, który jest zarówno wysoce abstrakcyjny, ale nadal pozwoli na precyzyjne wyodrębnienie kosztów wykonania czasu i przestrzeni, umożliwiając pisanie programów, które będą działały z zagwarantowanymi ograniczonymi ograniczeniami czasu i przestrzeni.

Hume jest niezwykły w łączeniu pomysłów na funkcjonalne programowanie z pomysłami z automatów skończonych . Automaty służą do konstruowania programów komunikacyjnych w szeregu „pól”, gdzie każde pole odwzorowuje dane wejściowe na dane wyjściowe w czysto funkcjonalny sposób przy użyciu wysokiego poziomu dopasowania wzorców. Jest to również niezwykłe, ponieważ składa się z szeregu poziomów, z których każdy ujawnia różne właściwości maszyny, co jest wysoce niezwykłe.

Mark Booth
źródło