2008-09-19 24 views
13

Gibt es eine funktionale Sprache, die gute Unterstützung und Tools zum Erstellen von Webdiensten bietet? Ich habe Scala (die auf die JVM kompiliert und kann die Java-Bibliotheken verwenden) und F # (das ist .NET), aber diese sind jung und haben einige Ineffizienzen. Scala unterstützt insbesondere keine Tail-Call-Eliminierung außer in selbstrekursiven Funktionen, was die Art der Komposition einschränkt, die Sie ausführen können (dies ist eine grundlegende Einschränkung der JVM). F # ist sehr neu und scheint noch nicht vollständig unterstützt zu sein, was es risikoreicher macht als eine konventionellere Sprache.Was ist eine gute funktionale Sprache, um einen Webservice zu erstellen?

Ist es möglich, einen Webdienst mit Haskell, ML oder einer der traditionelleren Funktionssprachen zu erstellen, oder wäre es besser, mit Scala oder F # zu arbeiten? Irgendwelche anderen Vorschläge?

+0

http://stackoverflow.com/questions/105834/does-the-jvm-prevent-tail-call-optimizations fragt nach Ihrer Behauptung re: tail recursion. Kannst du hier oder dort arbeiten? – rcreswick

+0

Abstimmung zu schließen als Tool-Empfehlung und zu breit. –

+1

@Ciro Santilli - Ich stimme zu, vor allem jetzt, dass es eine Programmierer-Tauschbörse für Fragen wie diese gibt. – Sam

Antwort

10

Wenn .NET eine Option für die Plattform ist, rate nicht F # wegen seiner Jugend. Wenn es näher an ein offizielles Produkt herankommt, wird es immer besser in Visual Studio integriert und erbt alle Vorteile von .NET.

Es gibt auch aktive und zugängliche Unterstützung von Microsoft und einer enthusiastischen Community.

0

Obwohl ich es nicht empfehlen kann, weil ich immer noch damit spiele, ist Erlang sehr mächtig.

2

Wenn Sie dies zum Spaß tun, und nicht für Robustheit oder Arbeitsplatz, könnten Sie ARC untersuchen. Es ist eine unvollendete Sprache mit den Vor- und Nachteilen.

Haftungsausschluss: nicht mit dem Unternehmen assoziiert ARC oder Paul Graham

8

Ocaml hat Ocsigen/Eliom ... Ich kann nicht sagen, dass ich es, wenn auch benutzt habe. Es ist auch in seinen frühen Phasen.

+1

Ich benutze Ocsigen seit ein paar Wochen und kann dafür bürgen, dass es recht gut funktioniert. Es ist jetzt auch bei 1.2, also sind sie zumindest selbstsicher genug, um ihm eine echte Versionsnummer zu geben. –

5

Erlang, mit Yaws. Es ist eine lustige, mächtige Sprache, skaliert bemerkenswert gut und macht die Verwendung von 100 oder 1000 Prozessen sicher und einfach. Und Spaß.

(ich denke auch, es ist ziemlich.)

4

diese Einleitung Bitte lesen Sie auf F# and ASP.NET, die Ihnen einen guten Start geben.

Es gibt mehrere Beispiele im Internet, in denen F # in Webanwendungen verwendet wird. Einer von ihnen ist zum Beispiel der autocompleter von Tomas Petricek, den er als eine illustrative Anwendung zu seinem Artikel "F# Web Tools: Ajax applications made simple" gebaut hat. Ich habe F # auch als Teil eines Webservice benutzt und ich garantiere Ihnen, dass es gut funktioniert :).

-1

Die vorherige Generation funktionaler Sprachen hat Werkzeuge wie Ocsigen (für OCaml) und HApps (für Haskell), aber sie haben praktisch keine Benutzer: sie sind völlig unerprobte Software.

Im Gegensatz dazu bauen Scala und F # auf sehr gut getestetem Code aus Java und .NET auf. Insbesondere wurde F # im letzten Jahr von Microsoft sehr stark entwickelt, weil es produktiviert wird. Keine andere funktionale Sprache hat jemals diese Ebene der Unterstützung erhalten, und folglich ist F # bereits sehr brauchbar (und weit vor Sprachen wie Haskell in Bezug auf Entwicklungstools).

+0

F # ist den Entwicklungswerkzeugen von Haskell weit voraus? FUD. – alternative

1

Sie könnten Clojure in Erwägung ziehen - es ist eine sehr neue Sprache, sieht aber vielversprechend für skalierbare gleichzeitige Anwendungen aus und hat den Vorteil einer sehr guten JVM-Integration und Zugriff auf alle Java-Bibliotheken (genau wie Scala).

Clojure hat auch eine ganze Reihe von Design-Merkmale, die um die Endrekursion Ausgabe erhalten (spezielle recur Konstrukts sind viele Kernfunktionen iterativ usw. implementiert)

0

Ich muss mit der Empfehlung für Clojure übereinstimmen. Ich habe gerade einen Belastungstest von news feed service written in Clojure abgeschlossen, der 80 Posts für ausgehende Aktivitäten pro Sekunde für einen Clojure-Webserver aufrechterhält, der auf einer m1.medium-EC2-Instanz läuft.