29 Stimmen

Was soll ich lernen? Lisp oder OCaml oder...?

Ich habe bereits einige Sprachen gelernt (in einer groben Reihenfolge der Kenntnisse): Python, C, C++, PHP, Javascript, Haskell, Java, MIPS, x86-Assembler. Aber es ist schon fast 2 Jahre her, dass ich eine neue Sprache gelernt habe, und langsam juckt es mich in den Fingern. Ich habe ein paar Kriterien:

  1. Muss (ich wiederhole: muss) eine freie Linux-Implementierung haben
  2. Es sollte anders sein als die Sprachen, die ich bereits kenne. Mit anderen Worten, sie sollte Funktionen haben, die mich dazu bringen, Probleme auf eine neue Art und Weise zu lösen.
  3. Das sollte ein gewisses Potenzial für den praktischen Einsatz haben. Es muss nicht das nächste Java sein, aber das schließt Brainf* und Shakespeare aus :) Es ist mir egal, wie viele Stellenausschreibungen es hat, aber praktische Anwendungen und Bibliotheken sind ein Plus.
  4. Es sollte zumindest genügend kostenloses Lernmaterial vorhanden sein, damit ich damit anfangen kann.

Ich dachte an Lisp (CL? etwas anderes?) oder OCaml. Mit Haskell habe ich bereits einige Erfahrung mit funktionalen Sprachen (ja, ich weiß, dass Lisp/OCaml multiparadigmatisch ist). Ich bin kein Experte - z.B. können Teile des Codes von Real World Haskell immer noch mein Gehirn verwirren, aber ich verstehe die grundlegenden Konzepte und einige fortgeschrittene (Funktoren, Monaden).

Welche soll ich wählen? Gibt es noch andere Sprachen, die ich übersehen habe? Könnten Sie bitte auch einige nützliche Links zu guten Büchern/Tutorials usw. angeben?

32voto

Norman Ramsey Punkte 193087

Weder Lisp noch OCaml sind sehr weit von dem entfernt, was Sie bereits kennen. Hier sind vier Vorschläge, die zum Teil aus Eigeninteresse ausgewählt wurden und zum Teil, um Ihren Horizont zu erweitern.

  • Eine logische Programmiersprache, wahrscheinlich Prolog. Ich habe online keine guten Materialien gefunden, aber das Buch Die Kunst des Prologs von Sterling und Shapiro ist ausgezeichnet. Das eher grundlegende Lehrbuch von Clocksin und Mellish ist auch gut. Der wichtigste Punkt von Interesse ist Programmierung mit Beziehungen, nicht mit Funktionen .

  • A rein objektorientierte Sprache entweder Smalltalk o Selbst . Wenn Sie bisher nur hybride objektorientierte Sprachen verwendet haben, werden Sie erstaunt sein, wie schön reine Objektorientierung sein kann. Ich habe den Link zum Quietschen Implementierung von Smalltalk. Ich persönlich würde empfehlen, Smalltalk zu lernen, bevor ich mich mit Self beschäftige; es gibt eine sehr große und aktive Gemeinschaft und die Software ist gut entwickelt. Self steht auf den Schultern von Smalltalk und ist ein noch inspirierenderes Design, aber die Gemeinschaft ist viel kleiner. Für diejenigen, die Zugang zur ACM Digital Library haben, empfehle ich die ausgezeichneter Vortrag von Dave Ungar bei HOPL-III ; das Papier ist auch ziemlich gut.

  • Le site Icon Programmiersprache hat zwei große Vorteile: ein leistungsfähiges und ungewöhnliches Bewertungsmodell mit implizitem Backtracking und eine vom Benutzer erweiterbare Modell der Zeichenkettenverarbeitung, das reguläre Ausdrücke weit übertrifft . Es tut mir leid, sagen zu müssen, dass Icon nie ganz mit der Zeit Schritt gehalten hat und von all meinen Empfehlungen die am wenigsten praktische ist. Ich fürchte sogar, dass die Sprache im Sterben liegt. Aber sie wird Ihren Verstand fast genauso stark beanspruchen wie Haskell, und zwar in ganz andere Richtungen. Icon ist immer noch sehr nützlich für String-Verarbeitungsaufgaben von bescheidenem Umfang.

    Sie können über die Verarbeitung von Icon-Strings lesen in ein Artikel von Ralph Griswold aus Computer Zeitschrift .

  • Le site Programmiersprache Lua ist mein letzter und am wenigsten radikaler Vorschlag. Sein Interesse gilt nicht so sehr neuen Sprachmerkmalen oder Paradigmen, sondern den Hervorragendes Engineering der Sprache und ihrer Umsetzung . Lua besetzt eine Reihe von Nischen, darunter Scripting, Spiele, String-Verarbeitung und leichtgewichtige funktionale Programmierung. Aber sein Hauptinteresse ist seine nahtlose Integration mit C und um den vollen Nutzen daraus zu ziehen, sollten Sie eine C-Bibliothek in Lua einbinden.

    Le site HOPL-III Website enthält auch einen ausgezeichneten Vortrag y Papier über Lua.

26voto

Rainer Joswig Punkte 131198

Sowohl Common Lisp als auch Ocaml sind sicherlich nützlich zu lernen. Wenn Sie bereits Haskell kennen, könnte CL die etwas andere Erfahrung sein.

SBCL y Clozure CL sind beide sehr nützliche Implementierungen von Common Lisp unter Linux. (Überblick über die verschiedenen Implementierungen: Common Lisp-Umfrage .)

Als Ausgangspunkt würde ich Peter Seibels ausgezeichnetes Buch empfehlen Praktisches Common Lisp die sowohl online als auch in gedruckter Form verfügbar ist.

Hinweise zur Gemeinschaft finden Sie hier: CLIKI .

9voto

fishlips Punkte 796

Prolog könnte das sein, wonach Sie suchen.

bearbeiten

Der erste Kommentator hat recht, meine Antwort war ziemlich kurz und nicht sehr nützlich:

Meine bevorzugte Implementierung ist SWI-Prolog. Ich persönlich habe von Prolog Programming for Artificial Intelligence gelernt. Der Stil ist ziemlich klar und es enthält viele Beispiele, aber ich besitze kein anderes Buch über Logikprogrammierung (das ist wirklich schade :), so dass ich keine Vergleichsgrundlage habe.

8voto

Sasha Chedygov Punkte 121566

Erlang ist ziemlich interessant zu lernen, weil es ein super effizientes Gleichzeitigkeitsmodell hat und es so einfach ist, verteilte Systeme zu schreiben (ein Beispiel dafür ist CouchDB wurde in Erlang geschrieben). Es handelt sich um eine dynamisch typisierte funktionale Sprache, aber man kann auch prozeduralen Code schreiben. Das Tutorium, mit dem ich es gelernt habe, heißt "Erste Schritte mit Erlang" , die nahezu alle Bereiche der Sprache abdeckt.

6voto

Brian Carper Punkte 68444

Wenn Sie Ihre Java- und funktionalen Programmierkenntnisse nutzen und Lisp lernen wollen, dann versuchen Sie Clojure .

Die Implementierung ist frei und plattformübergreifend, einschließlich Linux, da sie auf der JVM läuft. Da es sich um eine Lisp-Sprache handelt, unterscheidet sie sich (auf nützliche und wunderbare Weise) genug von den meisten anderen Sprachen, um die Dinge interessant zu machen. Einige Funktionen wie unveränderliche Datenstrukturen, Multimethoden, Metadatenunterstützung, Fokus auf sichere Gleichzeitigkeit usw. sind im Vergleich zu den von Ihnen genannten Sprachen ziemlich neu. Clojure ist stark darauf ausgerichtet, eine praktische und nützliche Sprache zu sein und nicht eine akademische Sprache. Es ist eine funktionale Sprache, aber nicht "rein", was wohl eine gute Sache ist. Außerdem kann man in Clojure trivialerweise jede Java-Bibliothek nutzen.

Clojure ist eine neue Sprache, und das einzige Buch, das bisher erschienen ist, ist Clojure programmieren aber es ist ein ziemlich gutes Stück. Es gibt auch eine wiki die möglicherweise nicht ganz auf dem neuesten Stand sind, da sich die Sprache noch sehr schnell weiterentwickelt. Die Mailingliste und der IRC-Kanal sind sehr freundliche, einladende Orte, um Fragen zu stellen. Die offizielle Website ist natürlich auch eine gute Quelle.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X