Was lernen? Lisp oder OCaml oder ...?
Ich hab schon ein paar Sprachen unter meinem Gürtel (in einer groben Reihenfolge der expertise): Python, C, C++, PHP, Javascript, Haskell, Java, MIPS, x86-assembler. Aber es ist schon fast 2 Jahre, da lernte ich eine neue, und ich fange an den Juckreiz. Ich habe ein paar Kriterien:
- Muss (repeat: muss) eine Kostenlose Linux-Implementierung
- Sollte anders sein als die Sprachen, die ich bereits kenne. In anderen Worten, es sollten Funktionen, die mich denken über die Lösung von Problemen in einer neuen Weise.
- Sollte etwas potential für den praktischen Einsatz. Es muss nicht der nächste Java, aber diese Regeln Brainf* und Shakespeare 🙂 ich weiß nicht wirklich, wie viele Jobangebote gibt es, aber real-world-apps und libraries sind ein plus.
- Sollte zumindest gerade genug freien Lernmaterialien, um mich in der it angefangen.
Ich dachte Lisp (CL? etwas anderes?) oder OCaml. Ich habe bereits einige Erfahrungen mit funktionalen Sprachen in Haskell (ja, ich weiß, dass Lisp/OCaml sind multi-Paradigma). Ich bin kein Experte - z.B. Teile des Codes aus Real World Haskell kann noch verdrehen mein Gehirn, aber ich verstehen die grundlegenden Konzepte und einige fortgeschrittene (funktoren, Monaden).
Welches man wählen? Alle anderen Sprachen, die ich übersehen habe? Auch könnten Sie bitte ein paar nützliche links, gute Bücher/tutorials etc.
InformationsquelleAutor der Frage oggy | 2009-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide Common Lisp und Ocaml sind sicherlich nützlich, um zu lernen. Wenn Sie bereits wissen, Haskell, CL könnte je mehr verschiedene Erfahrungen.
SBCL und Clozure CL sind beide sehr nützlich, Implementierungen von Common Lisp unter Linux. (Überblick über verschiedene Implementierungen: Common Lisp-Umfrage.)
Als Ausgangspunkt würde ich empfehlen zu Peter Seibel ' s ausgezeichnetes Buch Practical Common Lispdas ist sowohl online verfügbar ist und ausgedruckt werden.
Gemeinschaft Zeiger sind hier: CLIKI.
InformationsquelleAutor der Antwort Rainer Joswig
Weder lispeln noch OCaml ist super weit Weg von dem, was Sie bereits wissen. Hier sind vier Vorschläge ausgewählt, teilweise für intrinsische Interesse und teilweise, um Strecken Sie Ihre Horizonte.
Einen Logik-Programmiersprache, wahrscheinlich Prolog. Ich habe nicht gefunden, gute Materialien online, aber das Buch Die Kunst der Prolog von Sterling und Shapiro ist ausgezeichnet. Das Basis-lehrbuch von Clocksin und Mellish ist auch gut. Der wichtigste Punkt von Interesse ist Programmierung mit Beziehungen, nicht Funktionen.
Einen rein Objekt-orientierte Spracheentweder
Smalltalk oder Selbst. Wenn Sie nur benutzt habe-hybrid-objektorientierte Sprachen, Sie werden staunen, wie schöne, Reine Objekt-Orientierung werden kann. Ich habe Zusammenhang mit der Quietschen Implementierung von Smalltalk. Ich persönlich würde empfehlen, zu lernen, Smalltalk, bevor Sie sich Selbst; es ist eine sehr große und aktive community und die software ist gut entwickelt. Selbst steht auf Smalltalk Schultern und ist sogar noch mehr inspirierende design, aber die community ist viel kleiner. Für diejenigen, die Zugriff auf die ACM Digital library empfehle ich die ausgezeichneten Vortrag von Dave Ungar bei HOPL-III; das Papier ist auch ziemlich gut.
Den Icon programming language hat zwei große Dinge, die für es; eine kraftvolle und ungewöhnliche Evaluierung des Modells mit impliziten backtracking, und ein Benutzer-erweiterbare Modell der string-Verarbeitung, die beats von regulären Ausdrücken alle hohl. Tut mir Leid zu sagen, dass Icon hat nie ganz Schritt gehalten mit der Zeit, und alle meine Empfehlungen, es ist die am wenigsten praktisch. In der Tat fürchte ich, die Sprache ist in Vergessenheit Gerät. Aber es wird Strecken Sie Ihre Geist-fast so viel wie in Haskell, und in völlig unterschiedliche Richtungen. Symbol ist immer noch sehr nützlich für string-Bearbeitung der Aufgaben von bescheidener Größe.
Lesen Sie über Icon-string-Verarbeitung in ein Artikel von Ralph Griswold von Computer-Zeitschrift.
Den Lua-Programmiersprache ist meine Letzte und am wenigsten Radikale Vorschlag. Sein Interesse liegt nicht so sehr in der neuartigen Funktionen der Sprache oder Paradigmen, sondern in der hervorragender Technik der Sprache und Ihre Umsetzung. Lua nimmt eine Reihe von Nischen, einschließlich scripting, gaming -, string-Verarbeitung, und leicht die funktionale Programmierung. Aber seine wichtigste Punkt von Interesse ist die nahtlose integration mit Cund um in den vollen Genuss, sollten Sie die bind-C-Bibliothek in Lua.
Den HOPL-III web-site enthält auch einen ausgezeichneten Vortrag und Papier über Lua.
InformationsquelleAutor der Antwort Norman Ramsey
Prolog kann das sein, was du suchst.
Bearbeiten
Der erste Kommentator hat Recht, meine Antwort war Recht kurz und nicht sehr nützlich, also:
Meine bevorzugte Implementierung ist SWI-Prolog. Ich persönlich erfuhr von Prolog-Programmierung für Künstliche Intelligenz. Es ist Stil ist ziemlich klar, und es enthält viele Beispiele, aber ich besitze keine anderen Buch über Logik-Programmierung (es ist eine Schande, wirklich 🙂 so habe ich keine Grundlage für den Vergleich.
InformationsquelleAutor der Antwort fishlips
Erlang ist ziemlich interessant zu erfahren, wegen seiner super-effiziente concurrency-Modell und die Leichtigkeit, mit der Sie schreiben können, verteilte Systeme (für ein Beispiel dafür, CouchDB wurde geschrieben in Erlang). Es ist eine dynamisch typisierte, funktionale Sprache, aber Sie können auch code schreiben, der in einer prozeduralen Mode. Das tutorial habe ich gelernt, es heisst "Erste Schritte mit Erlang"die deckt nur etwa jeder Teil der Sprache.
InformationsquelleAutor der Antwort Sasha Chedygov
Werde ich etwas empfehlen, das ich noch nicht ausprobiert, aber planen, so müssen Sie für sich selbst beurteilen diese. Es ist diese Sprache, genannt IOdie insbesondere in der Prototypen-basiert, wie JavaScript, aber auch leiht Konzepte aus vielen anderen Sprachen. Ihren job Markt ist es wahrscheinlich gar nicht, aber ich dachte ich erwähne diese Sprache.
Sonst, eine Sprache aus der Lisp-Familie kann ziemlich Verschieden von, was Sie bereits wissen. In dieser Hinsicht würde ich empfehlen,Farbschemadas ist, meiner Meinung nach, mehr elegant als Common Lisp. Das neue Konzept, dass Sie vielleicht interessant finden in Schema Fortsetzungen.
Wenn Sie die Schema-Pfad, einige Zeit zu beobachten, diese videos von 1986. Sie sind erstaunlich.
InformationsquelleAutor der Antwort Ionuț G. Stan
Haben Sie einen Blick auf Smalltalk ! Entweder Cincom VWST oder Smalltalk/X - dont bother mit dem Quietschen, das interface ist schrecklich). WEITE ist auch gut, aber wirklich nur die Windows-centric. Und kümmern Sie sich nicht über die Skeptiker, die pore Hohn auf Smalltalk-Sie arent zu verwenden, und stecken noch im Morast der Bearbeiten-run-debug Zyklus Sprachen und mehrere dispirt verlinkten Bibliotheken. 🙂
Warum diese Smalltalks - gut, Sie kommen komplett wth ausgezeichnete IDE, GUI-tools vordefiniert, am besten debugger, die Sie je sehen, online-Hilfe, und ist völlig unabhängig von der zugrunde liegenden Betriebssystems. Eg a ST/X-Programmierung unter Linux übertragen werden können ( Quell-code), um die Windows-ST/X und es ausführen sollte.
ST/X ist frei, nur eine sehr geringe licience Einschränkungen, Cincom bieten eine Kostenlose NC ( Nicht Kommerzielle ) version, die NICHT eingeschränkt werden. Ich benutze ST/X, da ich lieber die Standard look & feel
es bietet. Ihre IDE-Schnittstellen sind sehr ähnlich.
Sprachen ohne IDE & GUI-tools sind nur verschwenden Sie Ihre Zeit, wie die Welt wirklich ist, GUI, egal, wie toll die zugrunde liegende Sprache ist. ZB Ruby ist toll, aber keine IDE oder einfache GUI-tools, es ist wirklich frustrierend.
Smalltalk ist nicht einfach, in zu erhalten, und es ist nicht perfekt(was ist Sprache?) aber sehr befriedigend, zu lernen, & verwenden. Und jetzt, dass die hardware und die Betriebssysteme schließlich holte Smalltalks muss . sehr effizient ist.
InformationsquelleAutor der Antwort
Wenn Sie möchten, machen Sie Gebrauch von Ihrem Java und funktionale Programmierung-Kenntnisse, und Sie will lernen, Lisp, dann versuchen Clojure.
Die Umsetzung ist kostenlos und cross-Plattformen, einschließlich Linux, weil es läuft auf der JVM. Ein Lisp ist, ist es unterschiedlich genug (in nützliche und wunderbare Möglichkeiten) von den meisten anderen Sprachen, um die Dinge interessant. Einige Funktionen wie der unveränderliche Datenstrukturen, multimethods, Metadaten-Unterstützung, Fokus auf sichere Parallelität, etc. sind ziemlich ungewöhnlich im Vergleich zu den Sprachen, die Sie aufgelistet. Clojure orientiert sich stark in Richtung eine praktische und nützliche Sprache eher als eine Akademische. Es ist eine funktionale Sprache, die aber nicht "rein", das ist wohl eine gute Sache. Sie können auch trivial jedem Java-Bibliothek innerhalb von Clojure.
Clojure ist eine neue Sprache, also das einzige Buch bisher ist Programming Clojureaber es ist eine ziemlich gute. Es gibt auch eine wikidie vielleicht nicht ganz up-to-date, denn die Sprache ist immer noch sehr schnell entwickelnden. Die Mailingliste und dem IRC-Kanal sind sehr freundliche, einladende Orte, um Fragen zu stellen. Die offizielle website ist auch eine gute Quelle, natürlich.
InformationsquelleAutor der Antwort Brian Carper
Ich zweite Rainer ist Common Lisp Empfehlung.
CL hat all die Dinge, die Sie suchen und bieten eine wirklich neue Erfahrung, die auch Ihre Codierung Bemühungen und Ansätze in anderen Sprachen besser.
Aber bringen Sie Geduld und Ausdauer, die Sie haben zu begreifen, eine Menge von Konzepten, die scheinbar Fremd auf den ersten.
InformationsquelleAutor der Antwort skypher
C# ist eine freie Implementierung in Linux unter der Mono Projekt, und es ist wohl ein sehr marktfähigen Fähigkeiten, es sei denn, du bist völlig anti-Microsoft.
Mein Favorit C# - Buch ist Pro C# 2008 und dem .NET 3.5 Plattform, Vierte Auflage.
Wenn Sie wirklich wollen, exotisch, F# ist eine OCaml-style-Sprache, die läuft auf der .NET-Plattform und mono, und wird immer eine Menge Aufmerksamkeit in diesen Tagen.
http://msdn.microsoft.com/en-us/fsharp/default.aspx
Bücher für F#:
http://www.amazon.com/s/ref=nb_ss_gw?url=search-alias%3Daps&field-keywords=f%23
InformationsquelleAutor der Antwort Robert Harvey
Könnten Sie versuchen, Tcl. Es war so unterschiedlich, verursachen eine negative Reaktion in meinem Gehirn, also kann ich nicht wirklich sagen, wie ich fand es anders, aber es gibt eine Menge gute Sachen geschrieben (vielleicht heute weniger als früher).
InformationsquelleAutor der Antwort David Thornley
Vorschläge, die ich bisher gesehen habe, ich mag Lisp (siehe Secko) und Smalltalk (siehe brett), da beide gibt dir eine andere Sicht auf Sprachen. Prolog sogar noch mehr.
Anderen Sprache unterscheidet, ist Erlang-ich hatte noch keine Gelegenheit, es zu lernen, aber es Griffe Parallelität in einer anderen Weise. Der beste link, den ich dir geben kann, ist die Haupt-website.
In Bezug auf die Empfehlungen, Lisp ist gut, weil es momentan verwendet wird, und weil es schon sehr alt ist. Die anderen müssen Sie Blick auf Quellen und sehen, welche Rechtsmittel die meisten.
InformationsquelleAutor der Antwort Kathy Van Stone
Versuchen, FORTRAN, dann? Ich höre, dass es noch aktiv genutzt werden, das wissenschaftliche und mathemematical Gemeinschaften, plus sollte es sein, die unterschiedlich genug sind, um eine Lern-Herausforderung.
Compiler:
http://gcc.gnu.org/wiki/GFortranBinaries
http://www.g95.org/
http://www.fortran.com/compilers.html
http://www.thefreecountry.com/compilers/fortran.shtml
IDEs:
http://www.eclipse.org/photran/
http://force.lepsch.com/ (FORTRAN 77 nur)
Tutorials:
Einführung in die Moderne FORTRAN: http://www-uxsup.csx.cam.ac.uk/courses/Fortran/
FORTRAN-90-Tutorial: http://www.cs.mtu.edu/~shene/COURSES/cs201/NOTES/fortran.html
Könnten Sie auch lernen, Visual Basic.NET in Fall, dass Sie jemals gezwungen, Sie zu pflegen. Offenbar mono hat eine Linux-Umsetzung davon:
http://www.mono-project.com/Visual_Basic
InformationsquelleAutor der Antwort Coding With Style
Faktor ist ziemlich radikal von allem unterscheidet, was Sie sagten, Sie wissen, und auch alles andere aufgeführt. Es ist stack-basiert, wie Weiter, aber hat eine ziemlich umfangreiche Bibliothek und eine Menge interessanter features.
Ada ist sehr praktisch-es gibt eine compiler basiert auf gcc-aber auch ganz anders als die anderen imperativen Sprachen, die Sie kennen. Ich finde den Typ system ein bisschen stickig, aber es war es Wert, etwas zu lernen über.
InformationsquelleAutor der Antwort
Lisp ist eine große HLL, es hat alles, die anderen Sprachen fehlen. Meiner Meinung nach ist dies eine sehr gute Sprache, das "befriedigen" jeder Programmierer braucht.
Perl ist auch eine HLL wie Lisp, es ist interessant und lustig zugleich. Es ergibt sich aus C, so dass Sie abholen können, wie Sie gehen. Es kann manchmal hart sein und manche Menschen dazu neigen, sich zu verirren, während das lernen, aber es lohnt sich zu wissen.
Beide Sprachen sind frei von Einsatz und kommen mit Linux.
Links
Lisp:
Wenn Lisp ist so toll
Eine Einführung und Anleitung für Common Lisp
Perl:
PERL-Practical Extraction and Report Language
Bücher
Auf Lisp - Tolles Buch von Paul Graham auf der Lisp-Programmiersprache. Es ist kostenlos und Sie können es herunterladen hier.
InformationsquelleAutor der Antwort Secko
Scala war sehr gut, für mich sehen die Programmierung in einem neuen Licht. Ich habe nicht verwendet es für alles, was worklike noch, aber es ist immer noch betroffen, wie ich den code schreiben, in den anderen Sprachen - nicht nur Java, sondern in PHP. Ich schrieb vor kurzem einen einfachen parser für ein WordPress-plugin und der code wird erheblich mehr funktionale und unveränderlich, als hätte es vor sechs Monaten gewesen, und es besser für ihn, trotz des Mangels an Durchsetzung in der PHP.
Nur andere Sprache zu haben, beeinflusst die Art, wie ich arbeiten, so dramatisch ist Perl, fast ein Jahrzehnt früher. Perl hat viel beigetragen zu der Art, wie ich pseudo-code, auch wenn ich berühren Sie niemals die Sprache selbst.
Viele Menschen vergleichen die funktionalen Aspekte von Scala, Haskell. Sie kann sich sogar vorstellen, dass das wissen, Haskell bedeutet, dass Sie bereits wissen, allen Scala beibringen könnte, aber ich glaube das nicht. Die Art und Weise Scala vereint OO und die Funktion hat, einen Weg, um es scheinen, wie das ist, tatsächlich die wahrste form der beiden.
InformationsquelleAutor der Antwort Marcus Downing
Wie Sie, habe ich über ein Dutzend Sprachen unter meinem Gürtel. Während des Einkaufs für etwas zum spielen für das schreiben eines cross-compiler, lief ich über ML und Familie. Viele sehr gute Ideen gibt, und Sie haben mich gelehrt, code zu schreiben, ist eine ganz andere Art und Weise; zum Beispiel, meine JavaScript-jetzt hat eine dezidiert funktionale gebogen.
Nachdem liebäugelt mit OCaml unter Windows eine Weile (und frustriert mit Fragen der Stabilität), lief ich über F#, ein Nachkomme von OCaml. Die beiden sind ziemlich ähnlich (können cross-kompilieren eine Menge code), aber OCaml hat offenbar einen wirklich guten makro-system (P4) und Typ-Klassen (Unterstützung des Schreibens "stark typisiert" Betreiber gegen eine generische Typen), während F# hat eine hervorragende Unterstützung für asynchrone und parallele Vorgänge, die Monaden, Einheiten-von-Messen für numerische Datentypen, sowie saubere OO-syntax und genial IDE-integration (VS2008 & wird veröffentlicht in-the-box mit VS2010). Ich bevorzuge F# diese Tage, da habe ich Zugriff auf das ganze .NET-runtime und jede Menge 3rd-party-Bibliotheken. In der Tat, ich Schreibe die meisten meiner one-off-und-Dienstprogramm-code in F#, für mich seine in der Regel viel produktiver als C++, JavaScript, C#, PowerShell, oder irgendetwas anderes.
F# funktioniert Recht gut unter Mono auf Linux und hat eine gute folgenden. Der compiler und die Laufzeit wird als open Source veröffentlicht, sobald stabil (veröffentlicht mit VS2010), und die Entwickler betrachten Mono-Unterstützung genug für Sie Priorität, um ernsthaft erwogen werden, für die nicht von Microsoft verwenden.
InformationsquelleAutor der Antwort James Hugard