Programowanie Funkcyjne (dyskusja)...

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

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
2

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
W Javie korzystanie ze Stream API zawsze odbija się negatywnie na szybkości działania programu, a do poważniejszych operacji trzeba pisać samemu interfejsy funkcyjne, co nie jest zbyt wygodne. Takie programy potrafią działać 20-30% wolniej niż ich imperatywne odpowiedniki. Scala jest optymalizowania pod funkcje a ich w wywołania w scalaz są już całkiem megaszybkie. - siloam 2018-08-28 07:51

Pozostało 580 znaków

2018-08-10 21:13
1

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
1

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

2018-08-25 17:39
1

Jeżeli kogoś interesują zagadnienia związane z programowaniem funkcyjnym to proponuję trzy kursy (kiedyś był jeden): Programming Languages A, B, C (coursera). Są to kursy z podstaw trzech języków: ML, Dr Racket, Ruby (wkrótce ruszają). Jest to jeden z fajniejszych kursów jakie robiłem, kiedyś tam, i zamierzam powtórzyć. Chyba jest możliwość zrobienia kursów za free, o ile ktoś nie potrzebuje certyfikatu. Niektóre zadanka nie są banalne, i trzeba trochę pogłówkować. Tym, że są to języki niszowe ja bym się bardzo nie przejmował, są nawiązania nawet do bardziej popularnych języków jak Java, Scala, itp. Kursy są dla średnio ogarniętych ;)

edytowany 1x, ostatnio: hurgadion, 2018-08-25 19:51
Racket jakoś mnie odrzuca. Nigdy nie mogłem się przyzwyczaić do notacji paznokciowej, a kod różnych lispów wydaje się mi bardziej rozwlekły niż imperatywny. - siloam 2018-08-28 08:02
wolę chyba Haskella, Oz jest też w miarę, ale porobili jakieś dziwactwa :) najlepciejsza i tak jest chyba Scala, bo masz możliwość wyboru :) - hurgadion 2018-08-28 08:04

Pozostało 580 znaków

2018-08-25 22:42
1

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

Uczyłem się na własną rękę Elixira, a przy tym trochę Erlanga. Po paru miesiącach okazało się w ówczesnej pracy, że będzie projekt w Elixirze, więc zgłosiłem się do niego na ochotnika. Odpowiadałem za backend przez nieco ponad rok, a potem projekt został ubity, bo nie przynosił zakładanych zysków. Dla mnie założenia projektu były hmm wątpliwe, chciałem w nim być dla języka, a zdobyłem znacznie więcej :)

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

Niekiedy takie języki są lepsze do konkretnych zastosowań. Zdarza się też, że ich twórcy chcą mieć swój język - rozwiązania, których brakowało im w języku X, a są w Y, ale nie lubią w Y tego czy owego.

Jak widzicie przyszłość tego programowania ?

<yoda>Mglista przyszłość tego chłopca jest.</yoda>

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

Scala to pomost między programowaniem funkcyjnym a obiektowym. Sprawdzałem sobie czytając "Siedem języków..." i ogólnie wrażenia mam dość pozytywne, jeżeli ktoś już miał jakąkolwiek styczność z Javą, bo wtedy widać różnicę :) Generalnie połączenie tych dwóch paradygmatów jest czymś naturalnym i jest wzajemnie korzystne (wujek Bob myśli tak samo :) ) i to jest na plus Scali. Minusy? Wydaje się być dość wolna i ogólnie jakaś taka kobyła wielka, ale to może moje mylne pierwsze i n-te wrażenie.

edytowany 1x, ostatnio: Pipes, 2018-08-25 22:44
chyba to ta :) znalazłem .pdf angielskiej wersji, może komuś się przyda: https://geneticmail.com/scott[...]uages-in-seven-weeks_p1_0.pdf - hurgadion 2018-08-25 22:53
Tak, to ta. Jest też książka "Another seven languages..." i ogólnie seria 7 czegoś w 7 tygodni się mocno rozwija :) - Pipes 2018-08-26 08:25

Pozostało 580 znaków

2018-08-26 08:56
1

1) uczyłem się Lispa (lata 90)
Potem długo pracowałem w Pascalu.
Po dwudziestu latach okazało się że część rzeczy w tym Pascalu robiłem funkcyjnie (podobnie jak @katelx), tyle że nieświadomie - po prostu czyste funkcje wydawały mi się przyjemniejsze w interpretacji.
Od TP 6.0 (1990) z tego co pamiętam weszły typy proceduralne, czyli takie dzisiejsze lambdy - w linku pokazane jak można było je definiować wewnątrz funkcji.
Ze strukturami funkcyjnymi miałem mało do czynienia.

2) żeby uczyć jakichś koncepcji (Logo), robić wyspecjalizowane czynności (SQL, Prolog, Fortran), spełniać konkretne wymagania (COBOL, Ada, Rust).

3) taka sama jak OOP (soft w 100% w jednym paradygmacie będzie rzadki).
Większość języków będzie miała opisane funkcyjne możliwości, te które będą się nadal rozwijały będą miały dodawane możliwości funkcyjne.
Języki ściśle wymagające FP pozostaną niszowe.

4) na razie nic nie sądzę. Może powinienem się zainteresować, ale mam inne rzeczy na głowie.


Szacuje się, że w Polsce brakuje 50 tys. programistów

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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

Robot: CCBot