Lisp? Nicht ohne Grund ist es im Schatten anderer Sprachen geblieben und vielfach unterbewertet. Wie der Autor es schon richtig erkennt, handelt es sich um eine Sprache die heute nicht mehr viel zu bieten hat. Also weg damit und widmen wir uns den wirklich wichtigen Themen
Für Emacs spielt LISP noch ne wichtige Rolle. Außerdem wird es (neben Prolog) in der KI eingsetzt. Und bei uns werden die Erstsemester damit geschockt (zusammen mit Haskell). Und es gab mal ein CVS-ähnliches System, dass in Lisp (oder war's jetzt Hasell?) implementiert wurde. Und ....
Denke schon, dass solche Sprachen ihre Daseinsberechtigung haben...
> Wie der Autor es schon richtig erkennt, handelt es sich um eine Sprache die heute nicht mehr viel zu bieten hat.
Im Gegenteil, ich habe sehr viel davon gelernt weil alle Mainstream-Sprachen das nicht haben was Common Lisp hat. (Lisp Makros, komplett Objektorientiert, ein Objektsystem wie CLOS, maechtige Konstrukte wie format oder loop, etc.) Selbst wenn man nicht praktisch darunter programmiert, gesehen sollte man es schon mal haben.
Lohnt sich schon zu lernen.
Das Buch ist zwar im Artikel schon genannt, aber sollte man hier nochmal erwaehnen - das lohnt sich fuer den CL Einstieg: http://www.gigamonkeys.com/book/
Ich konnte mich zwar bis jetzt nicht durchringen mich in (C)Lisp einzuarbeiten, aber ich denke auch dass es durchaus eine Daseinsberechtigung hat. Bei SAP sind übrigens auch einige Teile in Lisp programmiert, und werden auch noch in Lisp weiterntwickelt.
Achso. Sony, Electronic Arts und Nintendo (und weitere grosse) verwenden dann ein 3D-Grafiksystem was alt und langsam ist (Nichimen)? Tjo, 3D-Engine und in Lisp und die grossen kaufen es... stimmt, Lisp muss einfach alt und langsam und unbrauchbar sein.
RvB, trotz deines guten Artikel's kann mann sich nicht des Eindurcks erwehren, dass eine kaum/wenig genutze Sprache "hochgelobt" werden soll. C++ ist mit Sicherheit genauso gut oder teilweise besser und schneller als LISP.
LISP ist nicht die einzige Sprache, in der Objekte abgebildet werden können - der Standard ist C++ und wird es wohl auch atm bleiben.
> C++ ist mit Sicherheit genauso gut oder teilweise besser und schneller als LISP.
Damit vergleichst du zwei unterschiedliche paar Schuhe miteinander. C++ ist eine statisch getypte low-level Sprache und Lisp eher eine dynamisch/statisch getypte high-level Sprache mit (im Sprachstandard) automatischer Garbage Collection und einer groesseren Standardbibliothek. (wenn auch mit Luecken)
Wie du "mit Sicherheit genauso gut" bewertest ist eine sehr subjektive Sache denn jeder entscheidet die Kriterien unterschiedlich. Eine gute LISP-Implementierung kann mindestens genauso effizienten Code erzeugen.
>LISP ist nicht die einzige Sprache, in der Objekte abgebildet werden können Es geht nicht um das ob, sondern um das wie. Dass Lisp Dinge hat die ein Mainstream Java/C++ Only Programmierer nie sehen wird, davon wollen wir gar nicht reden...
> C++ ist mit Sicherheit genauso gut oder teilweise besser und schneller als LISP.
Du hast dich offenbar noch nicht mit LISP beschäftigt. LISP hat seine Stärken besonders im KI-Bereich. Daten und Programme sind ein und dasselbe, deshalb können zur Laufzeit Programme generiert werden, was C++ z.B. nicht kann. Außerdem kann mittels Makros der Sprachumfang von LISP zur Laufzeit erweitert werden (z.B. Infix-Notation für mathematische Berechnungen). Auch das kann C++ nicht. Und wenn dir der Begriff Closures ein Begriff ist: Das sind quasi "eingefrorene" Objekte, die je nach Bedarf wieder benutzt werden können. Eine ausgeklügelte Speicherverwaltung wie LISP hat C++ auch nicht.
LISP ist eine der ältesten Sprachen überhaupt und hat sich trotzdem bis heute gehalten. Zu Recht, wie ich finde. Neuere Sprachen wie Python und Ruby sind elegant, aber nicht sehr performant. LISP ist teilweise nicht mal halb so langsam wie C und ADA, siehe http://dan.corlan.net/bench.html (schau mal auf Ruby. Python und Perl). Und wenn man den LISP-Dialekt Scheme nimmt, dann kann man mit Tools wie Scheme2C aus dem Lisp-Code nativen C-Code erstellen, der mit einem gewöhnlichen C-Compiler übersetzt wird.
Du siehst also, hinter LISP und seinen Dialekten steckt sehr viel mehr, als man auf den ersten Blick erkennt. Es gibt natürlich viele Anwendungen, wo C++ besser geeignet ist (z.B. GUI-Desktop). Es gibt aber auch etliche Anwendungen, wo LISP besser geeignet ist als C++. Ich finde es schade, dass gerade solche eleganten Sprachen wie Scheme nur ein Nischendasein führen (z.B. GIMP). Die meisten Entwickler erkennen das Potential nicht, die stören sich schon an den vielen Klammern.
Genau das ist aber das Problem bei der Sprache. Mag sein, daß ein Klammerloses Lisp (Scheme) mehr verbreitung gefunden hätte. Aber die Klammern machen die Sprache einfach grausam.
Finde nicht. Im Gegenteil, sie machen den Code eigentlich sogar besser lesbar. Man gewöhnt sich schnell daran. Grausam ist nur, die Klammern eingeben zu müssen
Ich find C# eigentlich eine recht gelungene Programmiersprache. Die Sprachredundanzen aus C++ entfernt, vermengt mit Java aber ohne alle Beschränkung dieser Sprache mitzuschleifen. Und dann das ganze noch mit Ideen aus Delphi, Eiffel und Phyton angereichert. Für das Entwickeln größerer Softwaresysteme ist C# eine ziemlich produktive Programmiersprache.
Das sich Lisp auf breiter Front nie so richtig durchgesetzt hat, liegt wohl an der eigenwilligen und leider nicht immer gut lesbaren Syntax. Außerdem wurden Massen von Programmierern bisher immer mit rein imperativen Programmiersprachen herangezogen. Die Motivation mit einer ganz anderen Programmiersprache zu arbeiten ist da meist nicht sonderlich hoch. Trotzdem ist Lisp eine der mächtigsten und flexibelsten Programmiersprachen überhaupt, da sie nahezu beliebig erweitert werden kann. Nicht nur bei KI-Leuten ist sie beliebt, sondern auch bei genetischen Algorithmen bietet Lisp Interessantes. (sich selbst modifizierender Code, Metaprogrammierung, ...). Quasi die Grundlage für "lebende" Software.
Boo ist ziemlich cool. C# meets Phyton würd ich sagen. Nette Sachen wie "Yield return" und "Closures" wird's ja auch im 2.0 Standard von C# geben. Es gibt ja auch teilweise recht abenteuerliche Erweiterungen von C#: http://research.microsoft.com/Comega/ Was man mit einer Programmiersprache anstellt, die relationale und objektorientierte Paradigmen mischt sei mal dahingestellt ...
Eclipse (www.eclipse.org) ist eine plugin-basierte Java-IDE, die auch andere Sprachen unterstützt (Python, C++, sogar Exoten wie Cobol etc.). Screenshot z.B. http://www.oio.de/public/opensource/entwicklung/eclipse.jpg
Unter einem "richtig" guten Debugger verstehe ich einen,
- der in den Editor (GUI) integriert ist
- wo man die (konditionalen) Breakpoints direkt an den Quellcodezeilen setzen kann und nicht umständlich über Zeilennummern wie bei Emacs
- wo lokale Variableninhalte bei jedem Zeilendurchlauf (step) automatisch angezeigt und aktualisiert werden
Ich habe mir Lisp gerade mal angeschaut. Die Syntax gewöhnungsbedürftig und leider hilft sie nicht besonders beim Lesen des Codes. Man muß sich Stückchen für Stückchen durch den Code hangeln, vor allem bei stark verschachtelten Befehlsfolgen kann man schnell den Faden verlieren bei all den Klammern. Richtig verwirrend wird es wenn man am Ende einer Zeile 20x) stehen hat.
Von René van Bevern am Mo, 25. Juli 2005 um 14:42 #
Um die Klammern kümmert sich der Editor, die kann man fast ignorieren. Und so groß ist der Unterschied zwischen "funktion(parameter, anderefunktion(parameter2), parameter3);" in C und "(funktion parameter (anderefunktion parameter2) parameter3)" in Lisp auch nicht, man braucht hier sogar weniger Interpunktion.
Ich habe mir eine Zeitung gerade mal angeschaut. Die Syntax gewöhnungsbedürftig und leider hilft sie nicht besonders beim Lesen des Textes. Man muß sich Stückchen für Stückchen durch den Text hangeln, vor allem bei den ganzen aneinander gereihten Sätzen kann man schnell den Faden verlieren bei all den Punkten und Leerzeichen. Richtig verwirrend wird es wenn man in einer Zeile 20 Buchstaben stehen hat. :)
Naja, auch wenn er von Lisp keine Ahnung hat, die Klammern halten auch die Lisp-Freunde zumindest "ein wenig suboptimal für Menschen geeignet", trotzdem sind diese aber nunmal elementares Konzept von Lisp. Nichtzuletzt die Lisp Anwender kommen doch mit dem Joke, "Lisp" stände für "Lots of Irritating & Silly Parenthesis"...
Hach, ich liebe diese Flame-Wars über Programmiersprachen! Die gibt es ja schon ewig, da hat sogar schonmal jemand ein Lied drüber gemacht: The eternal Flame (der ewige Flame )
Der Distri-War, die ewigen Editor-Diskussionen, Meiner (Interpreter) ist größer als Deiner, ... das wird nie ein Ende nehmen. Bereiten wir uns also darauf vor, damit auch noch die nächsten Jahre zu leben, aber bitte mit einem Lächeln:
Solche Flame-Wars führen aber letztlich zur Weiterentwicklung. Überspitzt gesagt; Ohne solche hitzigen Diskussionen wären wir wohl noch alle bei Fortran-77
Ich denke, es hat keinen Sinn, den Leuten generell Unwissen unterstellen zu wollen.
Manche Leute sind einfach wahnsinnig stur, verhalten sich "wie Kinder". Ich selbst habe gerade eine Diskussion über XHTML 1.1/2.0 im IM ("alles ohne IFrames ist untragbar") und meine Argumente werde einfach ignoriert, mir werden meine Positionen verdreht, sodass sie unsinnig erscheinen müssen, nur um die eigene Sicht aufrecht erhalten zu können ...
Es ist schlichtweg egal, ob es vernünftig ist oder nicht, was man gewohnt ist bzw. annehmlich findet, muss einfach so bleiben und aus.
nur gut das viele lisps nen (native code) compiler haben, sonst waere lisp so langsam wie jene interpretierte sprachen...
Also weg damit und widmen wir uns den wirklich wichtigen Themen
Denke schon, dass solche Sprachen ihre Daseinsberechtigung haben...
Sevice-Wüste, Studien-Wüste Deutschland.
Küss die Hand
DARCS Version System
http://abridgegame.org/darcs/
Im Gegenteil, ich habe sehr viel davon gelernt weil alle Mainstream-Sprachen das nicht haben was Common Lisp hat. (Lisp Makros, komplett Objektorientiert, ein Objektsystem wie CLOS, maechtige Konstrukte wie format oder loop, etc.) Selbst wenn man nicht praktisch darunter programmiert, gesehen sollte man es schon mal haben.
Lohnt sich schon zu lernen.
Das Buch ist zwar im Artikel schon genannt, aber sollte man hier nochmal erwaehnen - das lohnt sich fuer den CL Einstieg: http://www.gigamonkeys.com/book/
Bei SAP sind übrigens auch einige Teile in Lisp programmiert, und werden auch noch in Lisp weiterntwickelt.
Gruss Moe
trotz deines guten Artikel's kann mann sich nicht des Eindurcks erwehren, dass eine kaum/wenig genutze Sprache "hochgelobt" werden soll.
C++ ist mit Sicherheit genauso gut oder teilweise besser und schneller als LISP.
LISP ist nicht die einzige Sprache, in der Objekte abgebildet werden können - der Standard ist C++ und wird es wohl auch atm bleiben.
Damit vergleichst du zwei unterschiedliche paar Schuhe miteinander. C++ ist eine statisch getypte low-level Sprache und Lisp eher eine dynamisch/statisch getypte high-level Sprache mit (im Sprachstandard) automatischer Garbage Collection und einer groesseren Standardbibliothek. (wenn auch mit Luecken)
Wie du "mit Sicherheit genauso gut" bewertest ist eine sehr subjektive Sache denn jeder entscheidet die Kriterien unterschiedlich. Eine gute LISP-Implementierung kann mindestens genauso effizienten Code erzeugen.
>LISP ist nicht die einzige Sprache, in der Objekte abgebildet werden können
Es geht nicht um das ob, sondern um das wie. Dass Lisp Dinge hat die ein Mainstream Java/C++ Only Programmierer nie sehen wird, davon wollen wir gar nicht reden...
Du hast dich offenbar noch nicht mit LISP beschäftigt. LISP hat seine Stärken besonders im KI-Bereich. Daten und Programme sind ein und dasselbe, deshalb können zur Laufzeit Programme generiert werden, was C++ z.B. nicht kann. Außerdem kann mittels Makros der Sprachumfang von LISP zur Laufzeit erweitert werden (z.B. Infix-Notation für mathematische Berechnungen). Auch das kann C++ nicht. Und wenn dir der Begriff Closures ein Begriff ist: Das sind quasi "eingefrorene" Objekte, die je nach Bedarf wieder benutzt werden können. Eine ausgeklügelte Speicherverwaltung wie LISP hat C++ auch nicht.
LISP ist eine der ältesten Sprachen überhaupt und hat sich trotzdem bis heute gehalten. Zu Recht, wie ich finde. Neuere Sprachen wie Python und Ruby sind elegant, aber nicht sehr performant. LISP ist teilweise nicht mal halb so langsam wie C und ADA, siehe http://dan.corlan.net/bench.html (schau mal auf Ruby. Python und Perl). Und wenn man den LISP-Dialekt Scheme nimmt, dann kann man mit Tools wie Scheme2C aus dem Lisp-Code nativen C-Code erstellen, der mit einem gewöhnlichen C-Compiler übersetzt wird.
Du siehst also, hinter LISP und seinen Dialekten steckt sehr viel mehr, als man auf den ersten Blick erkennt. Es gibt natürlich viele Anwendungen, wo C++ besser geeignet ist (z.B. GUI-Desktop). Es gibt aber auch etliche Anwendungen, wo LISP besser geeignet ist als C++. Ich finde es schade, dass gerade solche eleganten Sprachen wie Scheme nur ein Nischendasein führen (z.B. GIMP). Die meisten Entwickler erkennen das Potential nicht, die stören sich schon an den vielen Klammern.
Genau das ist aber das Problem bei der Sprache. Mag sein, daß ein Klammerloses Lisp (Scheme) mehr verbreitung gefunden hätte. Aber die Klammern machen die Sprache einfach grausam.
- denn sie wissen nicht was sie tun -
Das sich Lisp auf breiter Front nie so richtig durchgesetzt hat, liegt wohl an der eigenwilligen und leider nicht immer gut lesbaren Syntax. Außerdem wurden Massen von Programmierern bisher immer mit rein imperativen Programmiersprachen herangezogen. Die Motivation mit einer ganz anderen Programmiersprache zu arbeiten ist da meist nicht sonderlich hoch. Trotzdem ist Lisp eine der mächtigsten und flexibelsten Programmiersprachen überhaupt, da sie nahezu beliebig erweitert werden kann. Nicht nur bei KI-Leuten ist sie beliebt, sondern auch bei genetischen Algorithmen bietet Lisp Interessantes. (sich selbst modifizierender Code, Metaprogrammierung, ...). Quasi die Grundlage für "lebende" Software.
Die Entwicklung geht weiter. Schau mal hier:
http://boo.codehaus.org/Language+Features
Nette Sachen wie "Yield return" und "Closures" wird's ja auch im 2.0 Standard von C# geben.
Es gibt ja auch teilweise recht abenteuerliche Erweiterungen von C#:
http://research.microsoft.com/Comega/
Was man mit einer Programmiersprache anstellt, die relationale und objektorientierte Paradigmen mischt sei mal dahingestellt ...
Unter einem "richtig" guten Debugger verstehe ich einen,
- der in den Editor (GUI) integriert ist
- wo man die (konditionalen) Breakpoints direkt an den Quellcodezeilen setzen kann und nicht umständlich über Zeilennummern wie bei Emacs
- wo lokale Variableninhalte bei jedem Zeilendurchlauf (step) automatisch angezeigt und aktualisiert werden
- wo der aktuelle Traceback angezeigt wird
etc.
Die Syntax gewöhnungsbedürftig und leider hilft sie nicht besonders beim Lesen des Codes. Man muß sich Stückchen für Stückchen durch den Code hangeln, vor allem bei stark verschachtelten Befehlsfolgen kann man schnell den Faden verlieren bei all den Klammern. Richtig verwirrend wird es wenn man am Ende einer Zeile 20x) stehen hat.
Die Syntax gewöhnungsbedürftig und leider hilft sie nicht besonders beim Lesen des Textes. Man muß sich Stückchen für Stückchen durch den Text hangeln, vor allem bei den ganzen aneinander gereihten Sätzen kann man schnell den Faden verlieren bei all den Punkten und Leerzeichen. Richtig verwirrend wird es wenn man in einer Zeile 20 Buchstaben stehen hat. :)
Cheers,
GNU/Wolfgang
The eternal Flame (der ewige Flame )
Danke
Echte Programmierer meiden Pascal
Instructions on how to shoot yourself in the foot in various computer languages and system interfaces
Ich vermute, daß die Hitzigkeit direkt proportional zum Unwissen der Hitzköpfe ist.
Manche Leute sind einfach wahnsinnig stur, verhalten sich "wie Kinder".
Ich selbst habe gerade eine Diskussion über XHTML 1.1/2.0 im IM ("alles ohne IFrames ist untragbar") und meine Argumente werde einfach ignoriert, mir werden meine Positionen verdreht, sodass sie unsinnig erscheinen müssen, nur um die eigene Sicht aufrecht erhalten zu können ...
Es ist schlichtweg egal, ob es vernünftig ist oder nicht, was man gewohnt ist bzw. annehmlich findet, muss einfach so bleiben und aus.