Kezdőoldal » Számítástechnika » Programozás » Mik a Haskell előnyei más...

Mik a Haskell előnyei más nyelvekkel szemben?

Figyelt kérdés
Eddig még senki nem tudta nekem összefoglalni, hogy milyen gyakorlati előnyei vannak.
2017. febr. 3. 09:11
1 2
 1/13 anonim ***** válasza:

Pont, mint minden más nyelvnél vannak előnyei és hátrányai is a többi nyelvvel szemben, de sohasem általános előnyökről beszélünk.

A programozó is a feladathoz választ eszközt. A funkcionális nyelveket a hozzájuk passzoló feladatokhoz válassza.


A Haskell előnye: könnyen tanulható vele a funkcionális paradigma, szemben pl. a smalltalk-kal.

2017. febr. 3. 09:53
Hasznos számodra ez a válasz?
 2/13 anonim ***** válasza:
A funkcionális programozást helyezi előtérbe. Ez a legfőbb előnye és hátránya is.
2017. febr. 3. 11:21
Hasznos számodra ez a válasz?
 3/13 A kérdező kommentje:
Mit tudok benne megcsinálni, amit C++-ban nem vagy nehezebben?
2017. febr. 3. 13:18
 4/13 SimkoL ***** válasza:
Ha ismered a C++-t akkor nincs akadály, kismillió lib. létezik hozzá, a Windows szinte minden 'részét' C++-ben mutatja be. A Haskell vagy éppen más nyelv gyakorlati előnyeiről az tudna mesélni aki mindennap használja egy spec. feladatra. Elolvasva a nyelv leírását nem dobtam hátast, akkor inkább már az Eiffel :)
2017. febr. 3. 14:16
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:
Szóval továbbra is ott tartunk, hogy senki nem tudja igazolni, hogy a Haskell jó bármire is! :D
2017. febr. 3. 16:44
 6/13 anonim ***** válasza:

De, nagyon jól leírta #1-es. Gyakorlatban, könnyen tanulható vele a funkcionális paradigma, ezért is oktatják annyi helyen.


Ha azt kérdezed hogy mit lehet megcsinálni benne amit C++-ban nem, akkor azt mondom semmit. De visszakérdezek: mit lehet megcsinálni C++-ban amit Haskell-ben nem lehet? Csak két különböző nyelv, két különböző paradigma. Nem a végeredmény az ami számít, hanem a fejlesztési folyamat.


A funkcionális paradigma előnye az állapotmentesség, jó párhuzamosíthatóság, könnyű unit tesztelés. Nincsenek mellékhatások, csak gyors és stabil alkalmazás.


Napjainkban a scala talán a legnépszerűbb. Használatos:


- Nagy méretű adatfeldolgozásra (big data)

- Gépi tanulás, neurális hálózatok

- Modern web és mobilalkalmazás fejlesztés

- Stress tesztelési frameworkök

- Analízis és szimulációk

- Stb..

2017. febr. 3. 18:03
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:

Örülök, hogy valaki végre próbál is válaszolni, nem csak partvissal csapkodja a billentyűzetet.


"könnyen tanulható"

Ez gyakorlati alkalmazás szempontjából nem sokat jelent.


"Ha azt kérdezed hogy mit lehet megcsinálni benne amit C++-ban nem, akkor azt mondom semmit."

Ezért kérdeztem úgy, hogy: "C++-ban nem VAGY NEHEZEBB"


"A funkcionális paradigma előnye az állapotmentesség, jó párhuzamosíthatóság, könnyű unit tesztelés. Nincsenek mellékhatások, csak gyors és stabil alkalmazás."

Nem kötelező osztályokat használni C++-ban sem. De itt szerintem már csak arról szól a dolog, hogy milyen paradigma szerint akarjuk átláthatóbbá tenni a programot. Szerintem az objektumosítással többet nyerünk átláthatóság és biztonság szempontjából, mint amennyi vesztünk az állapotmentességgel és a párhuzamosíthatósággal. Mondjuk az utóbbi szerintem nem szükségszerű, hogy probléma legyen osztályokkal sem.


"Napjainkban a scala talán a legnépszerűbb. Használatos:


- Nagy méretű adatfeldolgozásra (big data)

- Gépi tanulás, neurális hálózatok

- Modern web és mobilalkalmazás fejlesztés

- Stress tesztelési frameworkök

- Analízis és szimulációk

- Stb.."

... marad a kérdés: miért?


De lehet jobb ha így kérdezem: Tegyük fel C++-ban programozok. Milyen feladattal kell szembesülnöm ahhoz, hogy azt mondjam "Azt hiszem ezt érdemesebb lenne haskell-ben leprogramoznom ezért meg ezért!".

2017. febr. 3. 18:38
 8/13 anonim ***** válasza:
100%

* "Ez gyakorlati alkalmazás szempontjából nem sokat jelent."


Pont annyit jelent amennyit kell annak jelentenie. Ugyan nem annak tervezték (és talán sokan megsértődnek ha ezt mondom) de szükség van oktató nyelvekre is. Ez igaz minden paradigmára. Ne próbáljunk már egy Pascal-t összehasonlítani egy JavaEE-vel a versenyszférában, mert nem lehet. Másra használatosak.


* "Ezért kérdeztem úgy, hogy: "C++-ban nem VAGY NEHEZEBB""


És ezért írtam le lentebb hogy főleg mire használják a funkcionális nyelveket, és milyen előnyei vannak. Ezek a területek azok, ahol jobban helytáll egy Haskell vagy bármilyen másik funkcionális nyelv. Próbáltál már C++-ban egy nagy kódbázisal rendelkező, sokszálas alkalmazást menedzselni (ha sebesség is szempont)? Ha igen akkor talán tudod hogy mennyi fejfájással tud járni az és ha sikerül is, egyszerűen nem tudod kihozni tesztekkel a bugokat, hiszen sokszor teljesen véletlenszerű hogy éppen két szál mikor olvassa ugyan azt az erőforrást, (főleg ha sokfelhasználós az alkalmazás), illetve ha lockokat használsz akkor mikor éheztethetik ki egymást a szálak, milyen terhelés mellett omlik össze az alkalmazás, hány szálat tudsz futtatni, van e benne deadlock, és bizonyos váratlan eseményeknek milyen mellékhatásai lehetnek.


De tekintsünk el a multithreadingtől mert ez csak egy példa a sok közül annak, hogy miért jó az állapotmentes alkalmazás. Ezekkel egyáltalán nem kell foglalkozni mert egyszerűen minden működik stabil, és gyors.


* "Nem kötelező osztályokat használni C++-ban sem. De itt szerintem már csak arról szól a dolog, hogy milyen paradigma szerint akarjuk átláthatóbbá tenni a programot."


Ennek semmi köze az osztályokhoz. Osztályok nélkül is vannak állapotok az imperatív nyelvekben, sőt, kb. lehetetlen állapotmentes alkalmazást készíteni, hiszen a stack mérte korlátos.


* "Szerintem az objektumosítással többet nyerünk átláthatóság és biztonság szempontjából, mint amennyi vesztünk az állapotmentességgel és a párhuzamosíthatósággal. Mondjuk az utóbbi szerintem nem szükségszerű, hogy probléma legyen osztályokkal sem."


Mi alapján mondod ezt? Mit nyersz objektumosítással és mitől lenne biztonságosabb egy objektum orientált kód? Pontosan az inkonzisztens állapotok idézik elő a biztonsági hibákat. Egyébként nem lesz sokkal átláthatóbb az objektum orientáltságtól a program. Annyi a különbség hogy OOP-ben az egységeket főnevekkel definiáljuk és osztályoknak nevezzük, funkcionális nyelvekben az egységek igék és függvények.


Ha leesik az alma a fáról akkor az OOP definiál egy almát aminek van egy lesés metódusa, az FP definiál egy leesést ami kaphat almát paraméterként. Ha bővítjük, akkor FP-ben a függvények átadunk egy másik függvényt ami átad egy almát, OOP-ben pedig egy másik osztály mezője, esetleg leszármazottja lesz az alma. Csak nézőpont kérése. Más gondolkodást igényel. Ez lehet előny is amelett hogy pontosan ezért nem lterjedt. Matekos problémákat szerintem könnyebb implementálni funkcionálisan hiszen ott is függvényekről és rekurzióról beszélünk.


* "De lehet jobb ha így kérdezem: Tegyük fel C++-ban programozok. Milyen feladattal kell szembesülnöm ahhoz, hogy azt mondjam "Azt hiszem ezt érdemesebb lenne haskell-ben leprogramoznom ezért meg ezért!"."


Azt hiszem pontosan erre próbáltam választ adni. Egyszerűen a fentebb felsorolt feladatokat egyszerűbb ellátni FP programozással. Meg lehet csinálni máshogy, de az esetek nagy százalékában az olyan is lesz. Nehéz elmondani valakinek aki talán soha nem dolgozott nagyobb FP és OOP projekteken. Még úgy is hogy kellett egy betanulási időszak a csapatomnak, minden gyorsabban és gördülékenyebben ment FP esetén és az eredmény is jobb lett.


Megjegyezném hogy az OOP programozási nyelvek is elmentek FP irányba. Java 8-ban már senki nem használ ciklusokat, ott van a Stream API és a lambda függvények, és ugyan ez igaz C#-ra is, C++11 is nagyot váltott ilyen irányba, Python pedig alapból tartalmaz minden ilyet már a megjelentése óta (lambda, generators, map, reduce, filter, list comprehension, parameter extension, stbstb)

2017. febr. 3. 20:51
Hasznos számodra ez a válasz?
 9/13 anonim ***** válasza:
Kérdező, a Facebook programozói csak tudják, hogy miért használtak Haskellt, kérdezd őket.
2017. febr. 3. 21:43
Hasznos számodra ez a válasz?
 10/13 A kérdező kommentje:
Köszi a kimerítő választ! De azthiszem jobban utána fogok járni, mert ez így még mindig nem áll össze nekem. C++-ban meg C#-ban is lépten-nyomon lambdákat használok, ezért is hangzik érdekesnek egy olyan nyelv, amiről azt írják, hogy a lambda az alapja. De most úgy érzem objektumok és template-ek nélkül meg lennék lőve. Jó érzés tud lenni, mikor több éves kódomhoz kell hozzá nyúlni és a 2 hétre betervezett munkát meglepetésemre megoldom 2 óra alatt, mert régen olyan szépen betartottam az OOP szabályokat. Tisztán funkcionális nyelvben ennek lehetőségét sem látom.
2017. febr. 3. 22:03
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!