newLisp: A better Lisp/Scheme Fusion...

Notiert, muss ich mir mal genauer angucken. Ich bin ja schon lange am Grübeln, was ich nach Python machen soll - Scheme wäre eine Alternative, aber irgendwie ist mir das nach meiner längeren Python-Zeit doch zu geschwätzig lachendes Gesicht

Irgendwie ein nicht ganz unwichtiger Faktor, der gerne in der Lisp-Community ignoriert wird: die Namen sollten nicht zu lang sein, sonst tippt man sich den Wolf. Klar, mit Makros kann man das dann kompakter machen, aber das ist nicht der Sinn der Makros. Eine Sprache mit Script-Orientierung sollte einem helfen schnell sein Programm zu formulieren. In scsh zum Beispiel ist das alles andere als der Fall.

Wenn ich mir allerdings so die Sprachdefinition ansehe, ein bischen strange ist die Sache ja schon. Viele Bereiche wirken etwas unfertig und un-lispig. Auch sind einige der Konzepte (z.B. das Exception-Handling) eher primitiv. Auch die Basis auf stark seiteneffektiges Programmieren (dadurch das Symbole als Aufhänger für alles und jedes benutzt werden) ist unschön. Und last but not least der Todesstoss: dynamisches Scoping. Zwar durch lexikalische Namespace-Zuordnungen abgefedert, aber trotzdem: dynamisches Scoping ist fast immer mehr Grund zu Ärger als zu Freude.

Andere Aspekte aber gefallen durchaus gut, vor allem der sehr schlanke Sprachumfang und die wenigen aber effizienten Grunddatentypen.

Die Syntax sollte etwas logischer werden - z.B. alle destruktiven Funktionen mit ! kennzeichnen, alle Eigenschaftsprüfungen mit ? kennzeichen - das ist kompakt zu schreiben und gut zu merken. Zum Beispiel die Wahl von set-nth für die nicht-destruktive und nth-set für die destruktive Variante das n-te Element einer Datenstruktur zu ändern ist nicht wirklich gut zu merken und schreit nach Verwechslern.

Alles in allem eine witzige Idee, aber wohl weniger der weite Wurf als der es dargestellt wird. Eher in der Klasse von Emacs-Lisp anzusiedeln - Script-Lisp, aber ein bischen hackig.

Bei Lambda the Ultimate - Programming Languages Weblog gibts den Originalartikel.

tags: Programmierung

Sept. 15, 2004, 12:01 p.m.

Kannte ich auch nicht, und muss ich mir auch mal genauer ansehen. Sie habe recht: mit dynamic scoping programmiert man vor allem eins: den eigenen Ärger. Die Frage der side effects muss ich in newLisp mal unter die Lupe nehmen. Wäre für einen Lisper natürlich unschön.

Cool wäre folgendes: jetzt mit IDEKit unter OS X eine echte IDE für newLisp schreiben...

Lutz Sept. 30, 2004, 2:52 a.m.

(1) 'nth-set' and 'set-nth' are both destructive, but 'nth-set' returns the replaced element, while 'set-nth' returns the whole changed list.

(2) I agree: it is a good idea to have all desctructive function names ending in '!' as predicates do already in '?'. I may make this consistent in a future version (some of the destructives may be changed to non-destructives). For now you can easily rename built-in functions, i.e.:

(constant (global 'nth-set!) nth-set)

now you can use 'nth-set!' just 'like nth-set' and there is no speed penalty.

(3) Dynamic scoping is not as bad as the Computer Science schoolbooks want to make you believe, it also has possibilities and once you are used to it, it feels natural ;)

(4)Look at some benchmarks and code comparisons to other languages at: http://newlisp.org/benchmarks/ or at: http://shootout.alioth.debian.org/lang/newlisp/ I copied my numbers from debian.org .

- Thanks for commenting on newLISP, und Entschuldigung, dass ich nicht in Deutsch geantworted habe, aber mein 'Computer/Software' Deutsch ist ein bischen rostig. Bin 1978 von Deutschland ausgewandert.

Lutz

hugo Sept. 30, 2004, 7:44 p.m.

Kein Problem, wir nehmen hier auch englische Kommentare ;-)

Allerdings lehne ich dynamic scoping nicht ab wegen irgendwelcher Computer Science Books, sonder _weil_ ich es zur Genüge kenne und hassen gelernt habe. Ich habe mal längere Zeit einen eigenen XLisp-Abkömmling programmiert und benutzt - da gabs nur dynamic scoping. Auch in anderen "einfachen" Lisp-Umgebungen und ähnlichen Sprachen habe ich mich immer wieder damit rumgeschlagen. Zu letzt in Perl - bei dem die beste Erfindung die my-Variablen - da lexikalisch gescoped - waren. Ich weiss also wovon ich rede. Dynamic Scoping bringt lauter witzige böse Bugs mit, die alle nicht vom Nutzen aufgewogen werden.

Klar, es gibt sinnvolle Anwendungen für dynamic scoping - in den Situationen benutzt man Dinge wie fluid-let oder äquivalentes (ich hab mir sowas sogar schon mal für Python programmiert, weil ich es brauchte - findet sich im PyDS wieder).

Aber als _Default_ Scoping ist Dynamic Scoping absolut und vollkommen böse. In kleinen Programmen ist es noch duldbar. Aber nicht bei grösseren Projekten. Und dummerweise wachsen alle sinnvollen kleinen Hacks irgendwann zu grösseren Projekten ...

Lutz Oct. 1, 2004, 11:20 p.m.

For bigger and multi-programmer projects in newLISP you could use contexts, these are lexically separated name-spaces.

I think that much of the dynamic <-> lexical scoping discussion is rather 'religous', like so many other discussions about programming languages. For me and many others it is more a personal issue of preference (as you relate in your own experience with Perl). People who use newLISP for their projects have never complained about the fact that is was dymamically scoped.

On a different Note: to brush up my computer German, are there any German language community sites similar to slashdot.org to recommend?

Lutz

hugo Oct. 2, 2004, 12:51 a.m.

Ich würd http://www.heise.de/ vorschlagen. Der Trollanteil in den Diskussionen ist ähnlich hoch wie bei Slashdot und die Themen sind auch ähnlich :-)

Lutz Oct. 3, 2004, 8:09 p.m.

Herzlichen Dank!