Programowanie Funkcyjne (dyskusja)...

Odpowiedz Nowy wątek
2018-08-10 14:25
1

Hej,
rzucam kolejny temat, tak ogólnie... Generalnie trochę liznąłem programowania funkcyjnego: ML, Dr Racket, Oz, Haskell, i podoba mi się tego typu kodowanie... i myślałem, że to bardzo niszowe dopóki nie natknąłem się na Scalę... Mam parę pytań, aby ułatwić dyskusję (wymianę opinii może lepiej)...

  1. Czy macie jakieś "funkcyjne" doświadczenia ? Jeżeli tak, to jakie i co o tym sądzicie ?
  2. W jakim celu tworzy się języki programowania, które okazują się niszowe... ?
  3. Jak widzicie przyszłość tego programowania ?
  4. Co sądzicie o Scali ? (opcjonalnie, bo już gdzieniegdzie wyczytałem na ten temat)... :)

Pozdrawiam... :)

edytowany 1x, ostatnio: hurgadion, 2018-08-10 14:26

Pozostało 580 znaków

2018-08-10 15:30
  1. Tak, obecnie w pracy Elixir a tak hobbystycznie to trochę lispów, Haskell i programowanie funkcyjne tam gdzie można było (i.e. Rust).
  2. Z tego samego powodu, dla którego tworzy się języki, które nie okazują się niszowe: potrzebujesz rozwiązać problem i wychodzi na to, że lepiej wyjdzie napisać cały język, który to obsłuży. Przecież nikt na etapie projektowania języka nie wie czy język będzie niszowy czy nie.
  3. Programowanie funkcyjne ma dużą przyszłość, bo oferuje praktycznie za darmo rzeczy, które są przynajmniej ciężkie w innych językach, głównie chodzi tutaj o zrównoleglenie obliczeń. Jak masz język, gdzie wszystko jest czystą funkcją i nie masz mutowalnych danych, to bardzo łatwo można rozproszyć wszystkie obliczenia, bo masz pewność, że dane nie będą musiały być synchronizowane między sobą.
W Ruście funkcyjnie? Tam nie ma nawet funkcyjnych kolekcji. Tyle tej funkcyjności będziesz miał co w standardowej Javce 8. - Wibowit 2018-08-10 15:35
Jak się ma Elixir do Erlanga ?? możesz parę słów ?? i o Ruście ciut... jak masz ciekawe linki do artykułów na ten temat, to chętnie poczytam, nie wiem na ten temat zbyt wiele... :) no, ale (wyczytałem ciut) wykorzystanie współbieżności Erlanga przez Ericssona to chyba jest coś ?? - hurgadion 2018-08-10 17:35
Rust to taki lepszy C++, który na mniej rzeczy pozwala i domyślnie przenosi, zamiast kopiować. - Tenonymous 2018-08-11 17:33
@Wibowit: co rozumiesz przez "kolekcje funkcyjne"? Niemutowalne? Masz im oraz rpds. Jak najbardziej da się w Ruscie pisać funkcyjnie, nie zawsze ma to sens, ale często piszesz funkcyjnie tam gdzie możesz, bo tak jest łatwiej. @hurgadion Elixir jest językiem kompilowanym do kodu pośredniego maszyny wirtualnej Erlanga, a z racji odpowiedników 1-1 w konstrukcjach wewnątrz języka wykorzystywanie bibliotek pomiędzy tymi językami jest banalnie proste. - hauleth 2018-08-12 16:52
Chodziło mi o structural sharing i jak widzę jest to w im, więc OK. Ale to ekstra biblioteka tak jak vavr.io dla Javy. - Wibowit 2018-08-12 17:00
@Wibowit: Rust (wg mnie rozsądnie) stara się trzymać bibliotekę standardową w miarę małą a funkcjonalności rozbudowywać poprzez biblioteki zewnętrzne. - hauleth 2018-08-12 17:49

Pozostało 580 znaków

2018-08-10 15:34
1

Czy macie jakieś "funkcyjne" doświadczenia ? Jeżeli tak, to jakie i co o tym sądzicie ?

Mam sporo doświadczenia w Scali. OOP wymieszany z FP, ale bez skrajnego FP jak w scalaz/cats. Co sądzę? Funkcyjne kolekcje, niemutowalne klasy wartościowe itp itd są mega spoko. Ułatwiają pisanie czytelnego i testowalnego kodu, którego nie trzeba mockować na każdym kroku.

W jakim celu tworzy się języki programowania, które okazują się niszowe... ?

Jak ktoś nie ma tyle hajsu co Google, Sun (przejęty przez Oracle) czy Microsoft to ciężko będzie mu wypromować swój język. Niszowe języki są zwykle tworzone przez entuzjastów bez tony hajsu. Chociaż z drugiej strony Scala cały czas pnie się w górę.

Jak widzicie przyszłość tego programowania ?

Programowanie funkcyjne wchodzi nawet małymi krokami do Javy (vide vavr.io). Podstawowe elementy programowania funkcyjnego jak funkcyjne kolekcje i niemutowalne klasy już się popularyzują. Rzeczy typu monady IO pewnie nie wydostaną się z niszy, ale to już jest takie trochę bardziej zaawansowane (a nawet powiedział bym skrajne) programowanie funkcyjne. Jak ktoś chce w to iść to i tak najpierw pasuje opanować podstawy (tzn mieć z nimi obycie), czyli kolekcje funkcyjne i niemutowalne klasy.

Co sądzicie o Scali ? (opcjonalnie, bo już gdzieniegdzie wyczytałem na ten temat)... :)

Programuję komercyjnie w Scali od 2014 roku i sobie chwalę :) Składnia prosta nie jest, ale składnia takiego C++ czy Rusta też nie jest prosta. Z tym, że zaawansowane konstrukcje składniowe Scali często wykorzystuje się do implementowania biznesowych funkcjonalności podczas gdy w C++ zaawansowana składnia służy do oszczędzania taktów i bajtów, a w Ruście jest sporo ceremonii z opanowaniem borrow checkera i jego kontroli poprawności wskaźników (co też nie pomaga implementować funkcjonalności biznesowych, a raczej w łapaniu błędów). JVM (używany przez Scalę) ma garbage collectora, który rozwiązuje z automatu wszelakie problemy ze wskaźnikami, które w Ruście czy C++ trzeba ceremonialnie ogarniać ręcznie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 2x, ostatnio: Wibowit, 2018-08-10 15:38
no nieźle... :) ja generalnie jestem pod wrażeniem Scali i jego twórcy... :) podobają mi się WorkSheety w Eclipse, w Javie chyba nie ma takiej interaktywnej funkcjonalności ?? a Ty w czym ogarniasz projekty, że tak zapytam ?? - hurgadion 2018-08-10 19:28
W Scali piszę pod IntelliJem. Co do Javy to Java 9 ma wbudowanego JShella, który też daje dużą dozę interaktywności: https://en.wikipedia.org/wiki/JShell - Wibowit 2018-08-10 19:53
dzięki za info, jeszcze jedno pytanie, Inteliij jest lepszym środowiskiem projektowym od Scalowej Eclipse ?? - hurgadion 2018-08-10 19:59
Prawdopodobnie tak, aczkolwiek dochodzi też jeszcze kwestia gustu. Mi Eclipse nie podchodzi :) więc jak dla mnie IntelliJ - Eclipse 2 : 0 - Wibowit 2018-08-10 21:09
może kiedyś odpalę, bo warto mieć porównanie :) po tym wątku mam już tyle rzeczy do odpalenia, że nie wiem od czego zacząć... ;) - hurgadion 2018-08-10 21:14

Pozostało 580 znaków

2018-08-10 15:40
1

Ja o programowaniu funkcyjnym coś zacząłem słyszeć 2 lata temu, zacząłem się na serio interesować rok temu. Generalnie wraz z OOP stanowia "zabójczy duet" - stosuje typowe dla OOP mechanizmy typu klasy, polimorfizm, enkapsulacje + korzystam z elementów FP - głównie niemutowalne obiekty(w tym kolekcje) + monady. Trochę musiałem się przyzwyczaić ale moim zdaniem w miarę optymalnie łącze OOP i FP :)
A jak wspomniał @Wibowit pewne elementy FP są coraz bardziej popularne, np. w Kotlinie data classy są niemutowalne ;)


Nie pomagam przez PM. Pytania zadaje się na forum.
dzięki... a potrafiłbyś w paru zdaniach podać różnice między Scalą, a Kotlinem ?? no i ewentualnie jak się Kotlin ma do Swifta ?? - hurgadion 2018-08-10 17:57

Pozostało 580 znaków

2018-08-10 17:09
3

1) co prawda obecnie pisze glownie w javie, c i pythonie ale niezaleznie od jezyka robie to funkcyjnie jesli tylko moge (tzn nie ogranicza mnie np wydajnosc albo zwyczajna wygoda), jesli moge do uzywam (mozliwie czysto) funkcyjnych jezykow, chocby do pobocznych projektow
2) a w jakim celu robi sie nieoplacalne biznesy? :)
3) mysle ze fanatyczna funkcyjnosc pozostanie na konferencjach i innych uniwersytetach, jesli chodzi o bardziej praktyczna to np taka scala jest dobra opcja, przynajmniej w sektorze finansowym, na ta chwile ciezko mi wymienic duzy bank ktory jej nie uzywa, w morgan stanley czy hsbc strategiczne projekty sa tworzone wlasnie w scali, na razie zeby sie zalapac wystarczy dobra java i chec uczenia sie scali ale wydaje mi sie ze przyszlosc moze zmienic ta sytuacje na korzysc scali
4) na moj gust niepotrzebnie skomplikowana i za bardzo pozwalajaca na kodowanie po javowemu

myślę, że podpięcie się pod Javę, to dość dobry pomysł... umożliwia korzystanie z wielu narzędzi znanych wielu programistom, no i momencie wprowadzania jakichś nowych rozwiązań Javowych Scalowcy nie zostaną w tyle, może... :) - hurgadion 2018-08-10 19:30

Pozostało 580 znaków

2018-08-10 21:13
0

1) Kodzę w Scali, jarałem się Haskellem, wgryzałem się w catsy, monady, kategorie, Idrisa.
3) Łączenie FB z OOP i resztą wydaje się lepszym połączeniem, niż dogmatyczne trzymanie się samego FP.
4) Lubię ją, bo nie traktuje programisty jak tumana i nie ogranicza go na każdym kroku.

edytowany 1x, ostatnio: Afish, 2018-08-10 21:13

Pozostało 580 znaków

2018-08-10 21:37
0

ad 1. Ło panie.... (zacząłem gdzieś w 98 od SML, ale długo myślałem, że to tylko for fun. Z tym, że w miedzyczasie opanowałem programowanie bieda-funkcyjne w C++ i w Javie - nawet przed przesławnymi lambdami).
ad 2. Nie wiem - spytaj Goslinga. Pamiętam, jak Java była niszowa i wszyscy z niej się śmialiśmy.
ad 3. Jestem zryty - rozdzielam programowanie na Funkcyjne i Dysfunkcyjne - przyszłości dla tego drugiego w poważnym biznesie nie widze (jakieś skrypciki, może)
ad 4. Przyszłość Scali jest niepewna - Ci którzy chcą nieco lepszej Javy z nieco lepszym wsparciem dla FP - mają kotlina. Ci którzy chcą ostrego FP - mają Haskella (i jest odpływ głownych kontrybutorów do Haskella - np. https://medium.com/@fommil/sc[...]ramming-language-a335ff67e075) . Zobaczymy co się stanie po wejściu Scala 3 / Dotty.


Bardzo lubie Singletony, dlatego robię po kilka instancji każdego.
edytowany 1x, ostatnio: jarekr000000, 2018-08-10 21:38
a według Ciebie Kotlin jest lepszy od Scali ?? - hurgadion 2018-08-11 17:53

Pozostało 580 znaków

2018-08-10 21:50
0

ad 4. Przyszłość Scali jest niepewna - Ci którzy chcą nieco lepszej Javy z nieco lepszym wsparciem dla FP - mają kotlina. Ci którzy chcą ostrego FP - mają Haskella (i jest odpływ głownych kontrybutorów do Haskella - np. https://medium.com/@fommil/sc[...]ramming-language-a335ff67e075) . Zobaczymy co się stanie po wejściu Scala 3 / Dotty.

Do Haskella odpływają ludzie ze scalaz, a więc biblioteki, która odstrasza początkujących Scalowców. Stąd nie jest oczywiste czy ten powolny odpływ jest zjawiskiem negatywnym czy też nie.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
No cóż, wolałbym żeby podejście ScalaZ wygrało - Sacrifice Half of the community. Niestety, Haskell też nie jest idealny. - jarekr000000 2018-08-10 23:03
a skąd wiadomo, że połowa? trzeba by zrobić ankietę ile % Scalowców używa monady IO w dużej skali w projektach komercyjnych. na mój gust scalazetowych (czy tam catsowych) entuzjastów jest znacznie mniej niż połowa, więc poświęcilibyśmy znacznie więcej niż połowę społeczności. - Wibowit 2018-08-10 23:10

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0