Wie kann ich funktionale Programmierung in der realen Welt verwenden? [geschlossen]


103

Funktionale Sprachen sind gut, weil sie Fehler vermeiden, indem sie den Status beseitigen, aber auch, weil sie für Sie einfach automatisch parallelisiert werden können, ohne dass Sie sich um die Anzahl der Threads kümmern müssen.

Kann ich als Win32-Entwickler Haskell für einige DLLs meiner Anwendung verwenden? Und wenn ja, gibt es einen echten Vorteil, der automatisch für mich genutzt würde? Wenn ja, was gibt mir diesen Vorteil, der Compiler?

Parallelisiert F # Funktionen, die Sie über mehrere Kerne und CPUs schreiben, automatisch für Sie? Würden Sie jemals sehen, wie sich die Anzahl der Threads im Task-Manager erhöht?

Grundsätzlich ist meine Frage, wie ich Haskell auf praktische Weise einsetzen kann und ob ich dann wirklich einige Vorteile sehe, wenn ich dies tue?


2
Persönlich würde ich mich mit erlang befassen - aber das bin ich.
Jason Bunting

2
Zur Verdeutlichung habe ich bereits Erfahrung mit einigen verschiedenen funktionalen Programmiersprachen und weiß, wie sie funktionieren und welche Unterschiede sie aufweisen. Diese Frage lautet jedoch speziell: Wie bringe ich sie in eine reale Welt?
Brian R. Bondy

1
mögliches Duplikat von Warum funktionale Sprachen?

Antworten:


41

Es scheint, dass das Buch Real World Haskell genau das ist, wonach Sie suchen. Sie können es kostenlos online lesen:

http://book.realworldhaskell.org/


Ich warte darauf, dass es gedruckt wird. Es scheint, dass es eines der besseren Bücher sein wird. Ich wette, es wird die Leute, die an Haskell interessiert sind, besser bedienen als Practical Ocaml für Ocaml
Friedrich

25

F # enthält keinen magischen Pixie-Staub, der Funktionen an verschiedene CPUs oder Maschinen weitergibt. F # / Haskell und andere funktionale Programmiersprachen erleichtern Ihnen das Schreiben von Funktionen, die unabhängig von dem Thread oder der CPU verarbeitet werden können, auf dem sie erstellt wurden.

Ich fühle mich nicht richtig, hier einen Link zu einem Podcast zu posten, an dem ich teilnehme, scheint ein wenig anders zu sein, aber in der Herding Code-Episode, in der wir mit Matt Podwysocki gesprochen haben, haben wir dieselbe Frage gestellt und er hat einige interessante Antworten gegeben. In dieser Folge gibt es auch viele gute Links zur funktionalen Programmierung. Ich habe einen Link mit dem Titel " Why Functional Programming Matters " gefunden, der Ihnen einige Antworten geben kann.


21
Dann werde ich für Sie posten : herdingcode.com/?p=45 :)
Brian R. Bondy


14

Dies könnte auch interessant sein: " Real World Functional Programming "

Beispiele sind in F # und C #, aber die Theorie ist ziemlich allgemein. Nach dem, was ich gelesen habe (Vorabversion), ist es definitiv interessant, aber bisher denke ich, dass es mich dazu bringt, immer mehr bei C # zu bleiben und Bibliotheken wie Parallel Extensions zu verwenden.


Haben Sie immer noch das Gefühl, "immer mehr bei C # bleiben zu wollen"? F # bietet einige interessante Funktionen. Der größte Schub, den ich bekommen habe, ist weniger Tippen (was weniger Reibung beim Ausdrücken von Lösungen in Code bedeutet).
Daniel

1
@ Daniel in gewisser Hinsicht, noch mehr; p Die Tools, an denen ich arbeite, sind jedoch möglicherweise untypisch.
Marc Gravell

8

Sie haben nicht erwähnt, aber ich gehe davon aus, dass Sie C ++ verwenden. Ein potenziell einfacher Weg, um funktionsfähig zu werden, ist über C ++ / CLI zu F #. C ++ enthält "Magic Pixie Dust" (genannt IJW: It Just Works), mit dem Sie verwalteten Code aufrufen und verlassen können. Damit ist das Aufrufen von F # -Code fast so einfach wie von C #.

Ich habe dies in einem Programm (FreeSWITCH) verwendet, das vollständig in C / C ++ geschrieben ist. Mit einer einzigen verwalteten C ++ / CLI (verwenden Sie den Schalter / clr) geht sie auf magische Weise in verwalteten Code über, und von dort aus kann ich meine F # -Plugins laden und ausführen. Um die Bereitstellung noch einfacher zu gestalten, kann F # alle Abhängigkeiten statisch verknüpfen, sodass Sie die F # -Runtime-Dateien nicht bereitstellen müssen. Eine andere Sache, die CLR-Code attraktiv macht, ist, dass Sie verwalteten Code (Delegaten) an C-Code übergeben können und die Laufzeit automatisch einen Thunk für Sie macht.

Wenn Sie sich für Haskell entscheiden, suchen Sie nach FFI: Foreign Function Interface. Ich glaube jedoch nicht, dass Sie den gleichen Integrationsgrad wie C ++ / CLI mit F # erhalten.


6

Ich lerne gerade Haskell selbst. Wenn Sie anfangen, es zu lernen, scheint es nicht sehr faszinierend zu sein, da die Lernerfahrung NICHTS mit dem Erlernen einer Sprache wie C # vergleichbar ist. Es ist eine ganz neue Welt, aber ich habe festgestellt, dass ich sehr, sehr komplex schreiben kann Ausdrücke in nur wenigen Codezeilen, als ich auf den Code zurückblickte, war er viel prägnanter, klein und eng. Ich liebe es absolut! Sie können in der Tat reale Programme schreiben, die kleiner, einfacher zu warten und viel komplexer sind, als es die meisten anderen Sprachen zulassen. Ich stimme dafür, dass Sie sie lernen !!

Viel Glück.


4

Da Sie Win32 und DLLs erwähnen, arbeiten Sie vermutlich mit nicht verwaltetem Code. In diesem Fall funktioniert GHC sehr gut für Sie. Ende letzten Jahres schrieb ich einen DDE-Server unter Windows unter Verwendung von FFI, um mit den MS DDE-Bibliotheken zu sprechen, und überraschenderweise war es eine äußerst angenehme Erfahrung (insbesondere, da ich ein Unix-Typ bin). Haskells FFI ist leistungsstark (unterstützt sogar z. B. Rückrufe in Haskell-Funktionen aus C oder anderen Bibliotheken), und die Überprüfung des Typs von Haskell beim Schreiben von Code auf C-Ebene ist wie ein wahr gewordener Traum.

Dieser letzte Punkt ist einer der Hauptvorteile von Haskell: Das Typensystem ist erstaunlich. Das heißt, es ist wie jedes mächtige Werkzeug; Es braucht Zeit und Mühe, um es gut zu nutzen.

Ja, es ist möglich, kleine Code-Teile in Haskell zu schreiben, die mit dem Rest Ihres Codes verknüpft sind (obwohl es möglicherweise einfacher ist, mit kleinen Haskell-Programmen zu beginnen, die mit Ihrem anderen Code verknüpft sind), und es lohnt sich, diese auszugeben eine ganze Menge Zeit, um dies zu lernen und es zu verwenden, wo immer Sie können. Sie könnten wie ich enden und ein ziemlich großes Projekt planen, das eng in Windows-Code (in meinem Fall ein ausgeklügeltes Excel-Add-In) in Haskell integriert ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.