Rust vs. C++ (funkcionální vs. OOP)

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #30 kdy: 13. 03. 2016, 16:49:36 »
IDE nepoužívám, tak nevím, vi to jistí.

To myslíš vážně? Kite, vidíš to? Doufám, že nevyvíjíš i něco pro zákazníky, protože to bych jim nepřál :D


Rejpal

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #31 kdy: 13. 03. 2016, 16:57:51 »
Tak ono to prý některým opravdu stačí. Mně to vždycky zní, jako kdyby někdo jezdil na koloběžce, protože na co motorka, vždyť jemu to takhle stačí. Ale když jim to tak vyhovuje, tak proč jim do toho kecat, hlavně že to tak nemusím dělat já. 8)

Kit

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #32 kdy: 13. 03. 2016, 17:08:44 »
IDE nepoužívám, tak nevím, vi to jistí.

To myslíš vážně? Kite, vidíš to? Doufám, že nevyvíjíš i něco pro zákazníky, protože to bych jim nepřál :D

No a? Myslel sis snad, že jsem jediný, kdo vyvíví i pro zákazníky ve Vimu? Mám v něm vše potřebné - tak jak obyčejní vývojáři ve svém IDE.

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #33 kdy: 13. 03. 2016, 17:28:50 »
Myslel jsem, že není tolik patlalů na jednom fóru. Viděl jsem už hodně, takže jsem zvyklý. Ale Vim je taková stálice. Plus ještě Python jako dobrý jazyk na velké věci :D

čumil

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #34 kdy: 13. 03. 2016, 17:36:15 »
Rust a funkcionální ? EEHE? Nejblíž FP je dneska Haskell a Elm. A mimochodem, když ti chybí dědičnost, tak asi ani nechápeš o čem je FP a neměl by ses do něj srát. Každé paradigma má vlastní způsoby řešení problémů. FP a OOP jsou opravdu ale opravdu diametrálně odlišné. A ne na vše se hodí, někde je FP nejlepší volba a jindy je zas FP na skok z okna.

BTW, u nás v práci jsou lidi který používaj VIM k vývoji ... já mezi ně nepatřím, ale to je otázka preferencí


čumil

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #35 kdy: 13. 03. 2016, 17:38:30 »
A k tomu pythonu. Je to sračka jazyk ale budeš se divit, jsou v něm velký projekty. A jsou stejně nečitelný jako v jakémkoli jiném jazyku, jen takovej rejp pro vzývače hada.

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #36 kdy: 13. 03. 2016, 17:45:43 »
Divit se nebudu, protože jsem je viděl a bylo to tak na vyhození. Jenže dneska je to moderní. Přijdeš do cool startupu, tam jsou děti a milují Python. Když jim řekneš, že je to sračka, tak se budou divně dívat a nebude tě mít moc rádi :D Nejsou stejně nečitelný jako u jiných. Ukaž mi nějaký refactoring u projektu nad milion řádků ve Vimu. Jak ho budeš mít hotový, tak bych moc rád viděl debug složitějšího problému :D

blub

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #37 kdy: 13. 03. 2016, 18:29:17 »
jestli on neni for prave v tom, ze v Pythonu nepotrebujes milion radku na velkej projekt ;)

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #38 kdy: 13. 03. 2016, 18:38:57 »
:D Taky známé. V Pythonu jsou totiž i ty největší bankovní aplikace na 150 řádcích :D Pak si dovedu představit ten Vim i refactoring.

pavlix

  • ****
  • 253
    • Zobrazit profil
Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #39 kdy: 13. 03. 2016, 18:49:48 »
Při troše sebezapření by mi asi nějaké to IDE stačilo, ale proč se trápit, když můžu psát normálně ve vimu.

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #40 kdy: 13. 03. 2016, 18:52:07 »
Psát tam jde parádně, ale s programováním je to horší.

andy

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #41 kdy: 13. 03. 2016, 20:03:41 »
Mám třády ApplicationElement, UIElement, GenericStack, PartStack, kdy následující třída vždy dědí z předchozí.
V C++ žádný problém, ale v Rustu bych musel vše řešit buď kompozicí nebo traity.
U kompozice bych pak musel psát něco jako partStack.genericStack.uiElement.applicationElement pokud bych chtěl volat něco z implementace ApplicationElement a traitu je zase šílenost pro každou strukturu imlementovat všechny ty traity.

Evidentně dědičnost nějak rozumně nahradit nejde a jestli ano, tak za cenu flexibility => ve výsledku nemá cenu na něco se složitým datovým modelem používat funkcionální jazyk tohohle typu. Souhlasíte?
Pokud chceš používat FP, musíš se na problém "podívat jinak".  Často tě pak ten jiný pohled zavede směrem, kdy máš pocit, že dědičnost vůbec nepotřebuješ. Docela často nejde třeba o dědičnost, ale spíše o "Interface", a to už se dá implementovat docela jednoduše. Rust neznám, ale třeba tohle je docela hezký článek na téma dědičnost vs. haskell nebo elm.

https://github.com/Dobiasd/articles/blob/master/from_oop_to_fp_-_inheritance_and_the_expression_problem.md

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #42 kdy: 13. 03. 2016, 20:10:06 »
Pamatuju se na podobnou diskuzi, kde někdo psal, že OOP není přirozené pro naše myšlení, ale já jsem opačného názoru. Když přemýšlím nad tím, jak vytvořit abstrakci něčeho, tak přemýšlím nad chováním a nad vlastnostmi - v řeči OOP je to něco třída,  chování vyjádřeno metodami a vlastnosti pomocí datových členů.
To jsem byl možná já. Jo, nad chováním a nad vlastnostmi přemýšlíš, ale vytvářet z nich hierarchie je spíš záležitost školní než něco z reálného života. Víš, že psa i kočku můžeš drbat, ale nevytváříš si nějaký mentální model abstraktní skupiny Drbable :)

A pokud s nějakými vlastnostmi pracujeme jako s konstituenty nějakých množin, tak z nich nevytváříme hierarchie. Spíš vnímáme, že určité úplně rozdílné (nesouvisející) věci mají nějaké společné vlastnosti, jako třeba že ta věc je sešroubovaná šroubky, takže se dá otevřít pomocí šroubováku. A zároveň máš úplně jinou množinu věcí, které jsou třeba kovové. Obě vlastnosti konstituují nějakou abstraktní množinu (Šroubable a RedThings), ale nevytvářejí žádnou hierarchii a ani tu hierarchii nemůžeš vytvořit i kdybys chtěl.

Proto si myslím, že je daleko přirozenější pracovat s volně kombinovatelnými rozhraními/protokoly než s hierarchiemi tříd. Jediné, kde se s hierarchiemi extenzivně pracuje, je biologie: strunatci => savci => ... V normálním životě se to ale obvykle nedělá.

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #43 kdy: 13. 03. 2016, 20:15:48 »
Mám třády ApplicationElement, UIElement, GenericStack, PartStack, kdy následující třída vždy dědí z předchozí.
V C++ žádný problém, ale v Rustu bych musel vše řešit buď kompozicí nebo traity.
U kompozice bych pak musel psát něco jako partStack.genericStack.uiElement.applicationElement pokud bych chtěl volat něco z implementace ApplicationElement a traitu je zase šílenost pro každou strukturu imlementovat všechny ty traity.

Evidentně dědičnost nějak rozumně nahradit nejde a jestli ano, tak za cenu flexibility => ve výsledku nemá cenu na něco se složitým datovým modelem používat funkcionální jazyk tohohle typu. Souhlasíte?
Pokud chceš používat FP, musíš se na problém "podívat jinak".  Často tě pak ten jiný pohled zavede směrem, kdy máš pocit, že dědičnost vůbec nepotřebuješ. Docela často nejde třeba o dědičnost, ale spíše o "Interface", a to už se dá implementovat docela jednoduše. Rust neznám, ale třeba tohle je docela hezký článek na téma dědičnost vs. haskell nebo elm.

https://github.com/Dobiasd/articles/blob/master/from_oop_to_fp_-_inheritance_and_the_expression_problem.md
Akorát že FP je abstraktnější a málokdo chápe formální aparát za ním.

vim

Re:Rust vs. C++ (funkcionální vs. OOP)
« Odpověď #44 kdy: 13. 03. 2016, 20:19:40 »

To jsem byl možná já.

To zní zajímavě, ale pokud podívám na dnešní vývoj, tak tomu moc zapravdu nedává. V čem myslíš, že to je?

Ale jinak vím, že kočku i psa lze drbat, ale to mě samozřejmě u abstrakce tolik nebere jako třeba to, že jsou to v podstatě stejná zvířata. Detaily můžu mít pak v každé třídě, ne? Mně to přijde úplně normální. Mám auto a taky neřešim, jestli je sešroubavané a nebo z kovu, protože mě to až tak u auta nezajímá, ne?

Ten tvůj pohled se mi líbí, ale nemyslím, že je to až tak reálné. Nemáš nějaký lepší příklad?