Ich habe ein bisschen Haskell und Prolog als Teil einiger Uni-Kurse programmiert, aber das war es auch schon. Und ich habe noch nie gesehen, dass es in der Industrie verwendet wird (nicht, dass ich anfangs viel Berufserfahrung gesammelt habe, aber ich habe noch nie eine Anzeige gesehen, in der Sie sie kennen müssen).
Sollten wir also häufiger funktionale und / oder logische Programmiersprachen verwenden? Gibt es Vor- oder Nachteile für die Verwendung oder Nichtverwendung?
Zuallererst - weil der Compiler viel mehr tun muss. Wenn Sie einen imperativen Compiler erstellen möchten, können Sie fast eine 1-1-Transformation zum Assembler durchführen, und der erzeugte Code hat eine akzeptable Geschwindigkeit (sicher - es könnte viel zu tun sein, aber es handelt sich im Grunde genommen um 1-1-Kompilierung + Optimalisierung). Funktionale Compiler MÜSSEN mit starkem Inlineing, Tail-Call-Optimalisierung usw. umgehen. Daher war die Implementierung funktionaler Sprachen in der Vergangenheit viel langsamer als in C / C ++ / ... (sie gewinnen jedoch mit jeder Iteration viel an Geschwindigkeit, da Compiler besser werden).
Zweitens - Programmierer sind es so gewohnt zu sagen, dass sie den Ansatz "Es gibt keinen Spoo ... State" nicht akzeptieren können. Sicher - der Mangel an Staat ist nicht in jeder Bedingung nützlich, aber der Mangel an (globalem) Staat bedeutet nicht den Mangel an lokalem Staat.
Drittens - funktionale Programmierung hat keine schöne Geschichte. Die OOP haben eine schöne Geschichte, da die Objekte Substantiven zugeordnet sind und wie intuitiv sie sind. Danach wissen Sie , dass es nicht so einfach ist , weil Sie nicht eine Klasse erstellen kann
Manager
als Unterklasse vonEmployee
wieEmployee
bekommen fördern kann ,Manager
und Sie müssen Dekorateure rumspielen. Die Funktionsprogramme haben eine Geschichte in der Mathematik, die meiner Meinung nach nützlicher, aber weniger marktfähig ist.Wie intern aus der Computerperspektive gibt es keinen Unterschied zwischen parallelem und gleichzeitigem Rechnen. Viele Programmierer sehen keinen Unterschied, und viele Sprachen haben dieselben Grundelemente, um beide zu handhaben. Dank des Mangels an lokalem Status und einfachen Threads in funktionalen Programmiersprachen ist die Parallelisierung des Algorithmus viel einfacher. Die gleichzeitige Programmierung wird jedoch nicht automatisch vereinfacht, da es bei der Parallelität um den globalen Status geht.
Schließlich gibt es viele ältere Programme, die inperativ geschrieben sind. Selbst die Portierung von der imperativen Sprache zur imperativen Sprache ist viel einfacher als zur funktionalen.
Soweit ich weiß, beginnen Investmentbanken, die Funktionsprogramme intern zu übernehmen, damit sie in XXI c. (in sehr wichtigen, wenn auch versteckten Bereichen) - damit sie an Dynamik gewinnen.
PS. Obwohl ich glaube, dass funktionale Programme "besser" sind, was bedeutet, dass sie die Komplexität besser verbergen als andere Ansätze, bedeutet dies nicht, dass es keine Bereiche wie Skripte gibt, die von Natur aus zwingend erforderlich sind.
quelle
Eine Programmiersprache ist eine Form der Darstellung von Informationen. In diesem Fall müssen die Anweisungen für den Computer befolgt werden. Die Darstellung ist jedoch auch für die Zielgruppe (dh die Programmierer) wichtig.
Funktionale / logische Konzepte werden im täglichen Leben nicht so häufig verwendet wie prozedurale Konzepte. Wenn Sie Anweisungen lesen (z. B. wie Sie Ihren Fernseher oder DVD-Player verwenden oder Möbel von IKEA bauen), werden diese meist prozedural geschrieben (wenn auch in natürlicher Sprache).
Daher sind viele Leute, die sich nicht sehr intensiv mit Mathematik oder Naturwissenschaften beschäftigen, mit solchen Verfahrenskonzepten oft weitaus besser vertraut als mit den logischen oder funktionalen.
Ich denke, dies hat einen großen Einfluss auf die Wahl der verwendeten Programmiersprachenklasse. Am Ende sind die Probleme, die mit einer solchen Programmiersprache gelöst werden können, ziemlich gleich (solange sie alle vollständig sind).
Viele prozedurale Sprachen erhalten jedoch immer mehr Facetten anderer Konzepte. Python kann Lambda-Kalkül und Verschlüsse machen, auch Rubin. Javascript, das in der Industrie häufig verwendet wird, ist eigentlich eine funktionale Sprache (selbst die meisten Leute "missbrauchen", indem sie es eher prozedural verwenden). Daher ist es wirklich die Aufgabe des Programmierers, diese Funktionen dort zu verwenden, wo sie passen.
quelle