Funkcionální programování a mainstream

tisnik

Re:Funkcionální programování a mainstream
« Odpověď #15 kdy: 22. 07. 2017, 22:56:59 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Jen aby se to zase nezvrhlo, tak: Rust neni OO jazyk v tom vyznamu, jak ho zname z C++ nebo z Javy


gll

Re:Funkcionální programování a mainstream
« Odpověď #16 kdy: 22. 07. 2017, 22:58:01 »
Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

nemuselo. treba numpy pole je z hlediska pythonu jen jeden objekt.


Kit

Re:Funkcionální programování a mainstream
« Odpověď #17 kdy: 22. 07. 2017, 23:24:39 »
Ten dotaz měl znít asi jinak. Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

Nevidím důvod, proč by pole (nebo spíš kolekce) objektů mělo být pomalé. Když jsou operace pro práci s objekty uvnitř těch objektů, tak je to docela svižné.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #18 kdy: 23. 07. 2017, 00:05:09 »
Proč jsou v "normálních" OO programovacích jazycích (C++ a Rust a Swift, Java, ...) vůbec nějaké hodnotové typy, proč tam nejsou prostě jen objekty?

Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.
To je sice pravda, ale s původním dotazem ohledně FP to nijak nesouvisí.

Honza

Re:Funkcionální programování a mainstream
« Odpověď #19 kdy: 23. 07. 2017, 00:34:03 »
To je zajímavé, o čem je tedy vlastně původní dotaz?
1) tazateli vadí, že mu funkcionální přístup v některých OO programovacích jazycích bere objekty, a tedy zmiňované jazyky nejsou dostatečně objektové (tzn. dotaz je obecný)?
2) tazateli vadí konkrétní funkce např. flatMap, která mu v nějakém případě vrací hodnotové typy místo objektů?

Mně tedy příjde, že je to dotaz trochu více o OOP, než o funkcionálním programování...


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Funkcionální programování a mainstream
« Odpověď #20 kdy: 23. 07. 2017, 01:38:07 »
V živém systému bude několik větví dělajících to samé, jak se budou připisovat nové funkce místo toho, aby se využívala a upravovala existující funkčnost, každý kdo bude něco upravovat, založí svou novou větev.

Pokud by tohle vylezlo po některých vývojářích, tak by to bylo úplně fantastické.

JS

Re:Funkcionální programování a mainstream
« Odpověď #21 kdy: 23. 07. 2017, 05:49:10 »
Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

nemuselo. treba numpy pole je z hlediska pythonu jen jeden objekt.

Tak trochu jsem predpokladal, ze dotaz byl hlavne na to, jak veci dela Java - treba C# ma hodnotove typy, ktere se chovaji (z hlediska programatora) jako objekty (v Jave).

A ano, ma to smysl, protoze ackoli teoreticky by prekladace mohly automaticky prelozit "objekty" (v tomto kontextu typy predavane a ukladane odkazem) na hodnotove typy (tedy typy predavane a ukladane primo), pochybuji, ze technologie prekladacu je natolik vyspela, aby se to zvladlo vsude, kde to ma smysl delat. Mozna za nejakych 30 let..

(Kdyz jsme tak u toho - nemam moc rad, kdyz se FP "prodava" s tim, ze pomuze paralelismu - ve skutecnosti to prekladace funkcionalnich jazyku zatim moc neumi, a je to trochu zavadejici argument, ktery muze vzbudit prehnana ocekavani. Mam FP rad, ale IMHO hlavni duvod je vyssi abstrakce a lepsi vysledna citelnost, nicmene technologie prekladacu jeste nedosahla dostatecne urovne, aby tohle dostatecne vykompenzovala.)

Navic je to uzitecne pro interoperabilitu - jeden z duvodu proc .NET zavedl hodnotove typy (treba struct) je jiste v tom, ze chteli mit moznost volat z .NET nativni knihovny, ktere obcas ocekavaji strukturu nebo pole struktur jako parametr. V Jave je tohle (pokud se nepletu) trochu problem.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #22 kdy: 23. 07. 2017, 06:45:19 »
(Kdyz jsme tak u toho - nemam moc rad, kdyz se FP "prodava" s tim, ze pomuze paralelismu - ve skutecnosti to prekladace funkcionalnich jazyku zatim moc neumi, a je to trochu zavadejici argument, ktery muze vzbudit prehnana ocekavani. Mam FP rad, ale IMHO hlavni duvod je vyssi abstrakce a lepsi vysledna citelnost, nicmene technologie prekladacu jeste nedosahla dostatecne urovne, aby tohle dostatecne vykompenzovala.)

Pokud se bavime o FP namixovane s OOP, tak treba ve Scale to bylo o pouhem pridani volani par do chainu (priklad z doc list.par.map(_ + 42)). Pripadne pouzivani knihovny jako Akka - pokud mate stavajici kod FP, tak IMO nebude obtizne to preklopit do Akka a ziskat tak skoro zadarmo paralelni zpracovani. Nebo mate na mysli nejake implicitni paralelni zpracovani, ktere na zaklade neceho pouzije prekladac/runtime?

(Jinak za me by stacila i jen ta vyssi abstrakce, ale moznost jednoduse paralelizovat stavajici FP kod neni take k zahozeni.)

Juro

Re:Funkcionální programování a mainstream
« Odpověď #23 kdy: 23. 07. 2017, 11:20:55 »
Pretoze je to prijemne a je pre tom dopyt. Dopyt po tom je preto, ze vela veci sa da funkcionalnym programovanim riesit kratsie, cistejsie a elegantnejsie. Klasickym prikladom su navrhove vzory v OOP (GoF) z ktorych vacsina je v podstate len dosledkom chybajucich vlastnosti niektorych OO jazykov.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #24 kdy: 23. 07. 2017, 11:52:29 »
Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

nemuselo. treba numpy pole je z hlediska pythonu jen jeden objekt.
Mam FP rad, ale IMHO hlavni duvod je vyssi abstrakce a lepsi vysledna citelnost
Vyšší abstrakce je sice velká výhoda, ale pro většinu vývojářů to může být problém. Kolik jich třeba ví, co to je katamorfismus, nemluvě o to, aby věděli, jak jim může pomoci zkrátit kód a překladači pomoci s optimalizací odstraněním rekurze? Účinné nasazení FP by vyžadovalo přeučení, a to se se starým psem (neřkuli volem) dělá těžko.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #25 kdy: 23. 07. 2017, 11:57:01 »
Protoze by to bylo pomale a zabiralo hodne pameti. Treba pole objektu - kazdy objekt v nem ma pointer, ktery na nej ukazuje. Navic je problem s cache.

nemuselo. treba numpy pole je z hlediska pythonu jen jeden objekt.
nicmene technologie prekladacu jeste nedosahla dostatecne urovne, aby tohle dostatecne vykompenzovala.
Jak co, Haskell třeba optimalizuje hodně chytře a rozhodí ho až rekurze, proto jsou ostatně v jeho knihovnách všude fixpointy. Problém je občas v tom, že překladači se musí holt trochu pomoci, čili vývojář musí vědět jak, což předpokládá hlubší znalosti principů FP.

Ivan Nový

Re:Funkcionální programování a mainstream
« Odpověď #26 kdy: 23. 07. 2017, 12:01:35 »
Pretoze je to prijemne a je pre tom dopyt. Dopyt po tom je preto, ze vela veci sa da funkcionalnym programovanim riesit kratsie, cistejsie a elegantnejsie. Klasickym prikladom su navrhove vzory v OOP (GoF) z ktorych vacsina je v podstate len dosledkom chybajucich vlastnosti niektorych OO jazykov.

Návrhové vzory budou brzy i v FP, je dobré vždy se omezit jen na určitý výsek možností dané technologie a z té vytvořit všem srozumitelný jazyk a to jsou návrhové vzory. Nejsou prostředkem k řešení problému, ale prostředkem ke komunikaci mezi tvůrcem a údržbářem sw.

Požadavek snadné modifikovatelnosti programu nevyplývá ze samotné funkce programu a řešení daného problému, ale z požadavku následné údržby programu a předpokladu, že funkce programu se bude v čase měnit, protože se bude měnit realita či její poznání.

Kit

Re:Funkcionální programování a mainstream
« Odpověď #27 kdy: 23. 07. 2017, 12:55:57 »
Návrhové vzory budou brzy i v FP, je dobré vždy se omezit jen na určitý výsek možností dané technologie a z té vytvořit všem srozumitelný jazyk a to jsou návrhové vzory. Nejsou prostředkem k řešení problému, ale prostředkem ke komunikaci mezi tvůrcem a údržbářem sw.

Návrhové vzory ve FP už jsou. Jen se jim tak neříká, protože žádný GoF dosud neprovedl jejich standardizaci.

Ano, návrhové vzory slouží hlavně pro komunikaci mezi lidmi. Implementace je v každém jazyce jiná. Někdy je implementován na jednom řádku, jindy tentýž vzor zabere stovky řádek.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Funkcionální programování a mainstream
« Odpověď #28 kdy: 23. 07. 2017, 13:39:35 »
Pretoze je to prijemne a je pre tom dopyt. Dopyt po tom je preto, ze vela veci sa da funkcionalnym programovanim riesit kratsie, cistejsie a elegantnejsie. Klasickym prikladom su navrhove vzory v OOP (GoF) z ktorych vacsina je v podstate len dosledkom chybajucich vlastnosti niektorych OO jazykov.
Návrhové vzory budou brzy i v FP
Vždy když si někdo myslí, že v FP objevil návrhový vzor, je to bez výjimky něco z teorie kategorií. Stačilo by sepsat něco o KT pro nadané vývojáře a máme "GoF".

UF

Re:Funkcionální programování a mainstream
« Odpověď #29 kdy: 23. 07. 2017, 19:48:24 »
... tahle diskuse je plna vzoru - doufam ze se nedaji prevadet ...