Reale Implementierung der funktionalen Programmierung? [geschlossen]

9

Ich versuche mich mit verschiedenen Arten von Sprachen vertraut zu machen, um die Bereiche zu verstehen, in denen jeder von ihnen extrem gut ist. Bisher habe ich mich mit C beschäftigt - einer prozeduralen Sprache, C ++ & Java - statisch typisierten objektorientierten Sprachen und groovig - einer dynamisch typisierten objektorientierten Sprache.

Jede Programmiersprache wurde wahrscheinlich gestartet, um einem Bedarf gerecht zu werden. Und ich gehe davon aus, dass jede Sprache in mindestens einer Sache extrem gut ist, weshalb sie in einem bestimmten Bereich oder Bereich zum Standard wird. Wie C ist C ++ in Bereichen wie der Browser- oder Spieleentwicklung zum Standard geworden. Python in der Linux-Welt für seine einfache Skriptfähigkeit, Java in der Unternehmenswelt usw.

Jetzt bin ich daran interessiert, eine funktionale Programmiersprache wie Clojure oder Lisp zu lernen. Wo werden funktionale Programmiersprachen in realen Szenarien verwendet? Ich glaube nicht, dass man Clojure oder Lisp für die Entwicklung von Anwendungen oder Benutzeroberflächen verwenden würde. Welche Art von Projekten sollte ich nach Abschluss der grundlegenden Tutorials und Lernressourcen durchführen, um ein kurzes Verständnis für die Implementierung der funktionalen Programmierung zu erhalten? Und empfehlen Sie dringend eine bestimmte Sprache, wie z. B. Clojure?

Vamsi Emani
quelle
5
"Und ich gehe davon aus, dass jede Sprache in mindestens einer Sache extrem gut ist, weshalb sie in einem bestimmten Bereich oder Bereich zum Standard wird." Das stimmt im Allgemeinen nicht. Es ist eine gefährliche Annahme zu glauben, dass Sprachen irgendwie "spezialisiert" sind. Einige Sprachen haben Nischen, aber das stimmt im Allgemeinen nicht.
S.Lott
6
"Ich weiß nicht, wie und wo ich anfangen soll." Was hindert Sie daran, mit den Tutorials zu beginnen? Können Sie erklären, warum die Tutorials für diese Sprachen nicht hilfreich oder nützlich sind?
S.Lott
"C ++ & Java" haben sehr, sehr wenig miteinander zu tun.
DeadMG
Darf ich Ihnen sagen, was Sie wirklich fasziniert hat, Clojure oder Lisp zu lernen, abgesehen von dem Grund, warum sie dem Paradigma der funktionalen Programmierung folgen?
Maxood
3
Wenn Sie "Echtzeit" sagen, meinen Sie damit zufällig "reale Welt"? Das scheint im Kontext dieser Frage etwas sinnvoller zu sein.
sepp2k

Antworten:

13

Sie sagen, reale funktionale Programmierung, denke ich, Erlang.

Erlang ist eine Programmiersprache, mit der massiv skalierbare weiche Echtzeitsysteme mit Anforderungen an die Hochverfügbarkeit erstellt werden. Einige seiner Anwendungen sind Telekommunikation, Bankwesen, E-Commerce, Computertelefonie und Instant Messaging.

http://www.erlang.org/

Robert Harvey
quelle
3
+1 Korrecto! Außerdem würde ich gerne hinzufügen, dass für Anfänger im funktionalen Land die "reinste" funktionale Sprache Haskell ist :)
Yati Sagade
5

Es gibt eine großartige Vorlesungsreihe über funktionale Programmierung von der Stanford University. Sie können sie auf YouTube überprüfen.

Ich würde Ihnen raten, sich eher mit Schema als mit LISP zu befassen. Scheme ist eine modifizierte Version von Lisp mit weiteren Verbesserungen. Das Programm wird hauptsächlich für akademische und Ausbildungszwecke verwendet. Es ist eine großartige Sprache, wenn Sie in der theoretischen Informatik forschen möchten.

Anwendungen :

Google App Inventor für Android verwendet Scheme, wobei Kawa verwendet wird, um den Scheme-Code in Byte-Codes für die Java Virtual Machine zu kompilieren, die auf Android-Geräten ausgeführt wird. Elk Scheme wird von Synopsys als Skriptsprache für seine Technologie-CAD-Tools (TCAD) verwendet.

Zu Ihrer Information: Verwendung des Schemas

Maxood
quelle
Ich frage
1
Und es gibt dieses (kostenlose! Und online!) LISP-Buch: gigamonkeys.com/book. Es behandelt "praktische" Projekte wie einen ID3-Tag-Parser, Webprogrammierung und Spam-Filterung.
FrustratedWithFormsDesigner
5

Bryan O'Sullivan, Gründer von mailrank.com (das von Facebook übernommen wurde), hat die gesamte Serverseite dieser Software in Haskell erstellt. Er präsentierte dies auf der Strange Loop 2011, Videos und Folien sind online verfügbar.

Der gleiche Typ schrieb ein Buch namens Real World Haskell . Einige Leute erwähnten Programmier-Tutorials. Dieser mag Ihren Interessen durchaus angemessen sein (ich mag auch den Erlang-Vorschlag).

Barend
quelle
4

Ich weiß von Freunden im Finanzbereich, dass die quantitative Handelsfirma Jane Street OCaml verwendet, um ihre Handelsstrategien umzusetzen. Sie haben eine Seite, auf der sie über das Warum sprechen, zusammen mit Links zu Vorträgen zu diesem Thema.

Geoff Oxberry
quelle
2

Hier ist eine Liste der Erfolgsgeschichten von Common Lisp:

http://wiki.alu.org/Industry%20Application

http://www.franz.com/success/

http://www.lispworks.com/success-stories/index.html

Obwohl Common Lisp nur teilweise funktionsfähig ist (es unterstützt auch OOP und prozedurale Funktionen sowie alles, was Sie selbst oder mit einer Bibliothek implementieren möchten), ist es eine sehr pragmatische Sprache und in den Händen eines kompetenten Programmierers äußerst leistungsfähig. Ich benutze es tatsächlich, um Web-Apps mit dem hervorragenden RESTAS- Framework zu schreiben .

Und das kommerzielle Python-Projekt, an dem ich gerade arbeite, wird irgendwann durch in lisp geschriebene Dienste ergänzt (RESTAS, wie der Name schon sagt, eignet sich hervorragend für RESTful-Dienste).

Pavel Penev
quelle
1

Ich würde vorschlagen, in die Compiler einzutauchen (entweder für Allzwecksprachen oder für DSLs) - hier ist die funktionale Programmierung am besten. Es gibt viele interessante und nützliche Dinge zu entdecken, von ADTs und Pattern Matching auf der einen Seite eines Spektrums bis zu den Lisp-Makros auf der anderen Seite.

SK-Logik
quelle
0

Vielleicht möchten Sie einen Blick auf Hume werfen .

Auf der Seite The Hume Programming Language :

Hume (Unified Meta-Environment höherer Ordnung) ist eine stark typisierte, meist funktionale Sprache mit einem integrierten Tool-Set zum Entwickeln, Testen und Bewerten gleichzeitiger sicherheitskritischer Systeme. Hume zielt darauf ab, die Grenzen des Sprachdesigns für ressourcenbeschränkte Systeme, einschließlich eingebetteter und sicherheitskritischer Echtzeitsysteme, zu erweitern, indem neue Ebenen der Abstraktion und Beweisbarkeit eingeführt werden.

Von der Wikipedia Hume Seite:

Hume ist eine funktional basierte Programmiersprache, die an der University of St. Andrews und der Heriot-Watt University in Schottland entwickelt und nach dem Philosophen David Hume aus dem 18. Jahrhundert benannt wurde. Es zielt auf eingebettete Echtzeitsysteme ab und zielt darauf ab, ein Design zu erstellen, das sowohl sehr abstrakt ist als auch eine präzise Extraktion der Zeit- und Raumausführungskosten ermöglicht, sodass Programme geschrieben werden können, die unter garantierten zeitlichen und räumlichen Einschränkungen ausgeführt werden.

Hume ist ungewöhnlich darin, funktionale Programmierideen mit Ideen aus endlichen Automaten zu kombinieren . Automaten werden verwendet, um Kommunikationsprogramme in eine Reihe von "Boxen" zu strukturieren, wobei jede Box Eingaben auf rein funktionale Weise unter Verwendung von High-Level-Pattern-Matching auf Ausgaben abbildet . Es ist auch ungewöhnlich, als eine Reihe von Ebenen strukturiert zu sein, von denen jede unterschiedliche Maschineneigenschaften aufweist, was sehr ungewöhnlich ist.

Mark Booth
quelle