Archiv 11. März 2005

Poly/ML Home Page

Poly/ML ist eine sehr schnelle Implementation von Standard ML 97. Interessante Besonderheit (abgesehen von der Performance): das System orientiert sich weitaus stärker an Lisp-Systemen als an klassischen Kommandozeilencompilern. Man hat eine interaktive Arbeitsumgebung und ein Image das automatisch bei Beenden der Session gespeichert wird und somit alle Definitionen beim nächsten Lauf wieder verfügbar macht.

Der Vorteil dieser Arbeitsweise ist einfach das man sich sein System im Laufe der Zeit immer besser anpasst an die eigenen Bedürfnisse. Zusammen mit dem FFI und externen Libraries kann man sich so nach und nach eine schöne Umgebung zusammenstellen die genau für die anvisierten Ziele optimiert ist. Ausserdem spart man sich oft extra Objekt-Datenbanken: man speichert Werte (bzw. im Falle von ML dann Strukturen) einfach im Image und behält sie dort.

Dadurch das Poly/ML das Image einfach mittels mmap in den Adressraum hängt und nicht erst liest und später wieder schreibt ist das ganze auch recht fix - bei Image-Systemen stört ja häufig der Systemstart.

Oh, und Poly/ML läuft übrigens problemlos unter OS X ...

Die Geschwindigkeit des Compilers setzt sich leider im generierten Code nicht unbedingt fort, wie man aus diesem Vergleich sehen kann. Aber ähnlich wie bei OpenMCL ist die schnelle Umgebung gerade beim Prototyping durchaus von Vorteil. Man kann ja hinterher einen Compiler ansetzen der zwar länger braucht, aber dafür dann besser optimierten Code ausspuckt wie MLTon.

Ruby stuff for Macs

Ruby stuff for Macs ist ein fertiges DMG für sowohl Panther als auch Jaguar mit fertigem Ruby 1.8.2 und diversen Erweiterungen (unter anderem Rails und Rubygems!). Leider ist das 10.2 DMG kaputt - ich hab den Autor mal angeschrieben.

Man kann natürlich auch Ruby selber kompilieren, sonderlich kompliziert ist das nicht. Für OS X gibts das auch in den DarwinPorts. Nur zickt da der Port unter 10.2 rum und kann nicht sauber kompiliert werden. Irgendwas im iconv-Modul - Syntaxfehler.

Irgendwie mag mein System heute kein Ruby

Update: jetzt funktioniert das Paket.

The fate of reduce() in Python 3000

The fate of reduce() in Python 3000 - tja, dann wird es wohl wirklich Zeit für mich die Sprache zu wechseln. Denn wer so blöd ist sich von Lisp-Wurzeln zu lösen wird nichts weiter schaffen als die mächtigeren Möglichkeiten mit primitiven Mitteln nachzubauen. Ruby sieht auch sehr brauchbar aus und so langsam gewöhne ich mich an die Syntax ...

Anonyme Funktionen (lambda in Python, Blöcke in Ruby oder Smalltalk) sind weitaus mehr als nur obskure Lisp-Überbleibsel. Ich hab viele Programmstücke die genau davon leben das ich Codeblöcke anonym durchreichen kann - letzten Endes dient das dazu seine eigenen Programmstrukturen zu schreiben. In Smalltalk und ähnlichen Sprachen (und in gewissem Sinne auch in Ruby) kann man darüber eine Sprache selber erweitern und entwickeln - was gerade einer der Stärken von Lisp und seinen Freunden ist (und deshalb ja auch in Smalltalk und seinen Freunden sich wiederfindet - die Smalltalk-Entwickler hatten eine Menge Lisp-Know-How).

Sprachen die sich an der Stelle selber kastrieren und meinen das Iteratoren und List-Comprehension (im Prinzip nichts weiter als verkürzt geschriebene Schleifen) wirklich ein brauchbarer Ersatz dafür sind sich eigene Kontrollstrukturen und eigene Sprachmittel programmieren zu können sind für mich mitlerweile völlig uninteressant geworden. Ich mag keine Sprachdesigner die meinen schlauer als der spätere Programmierer zu sein und denen ein Sprachkorsett aufzwingen wollen.

UnCommon Web Tutorial

Der Artikel hyper-cliki : Web/Continuation beschreibt wie man mit dem Continuation-basierten Webframework UnCommon Web in Common Lisp Webanwendungen schreibt. Sehr interessant, da Common Lisp selber ja bei Continuations deutlich mehr gehandicaped ist als Scheme - in Scheme sind Continuations per Standard first-class Objekte, in Common Lisp nicht.

Continuation-basierte Webserver haben den Vorteil das der eigentliche Code sehr ähnlich klassischen Anwendungen strukturiert werden kann. Man muss sich viel weniger auf das Event-Modell der klassischen Webprogrammierung einlassen und hat viel seltener mit expliziten Session-Konstrukten zu tun, weil die Session bei einem continuation-basierten Websystem implizit ist.

Continuation-basierte Web-Frameworks gibt es für folgende Sprachen:

  • [Smalltalk][1]
  • [Common Lisp][2]
  • [Scheme][3] (leider kein direkter Link auf den Webserver selber)
  • [SISC Scheme][4]
  • [Ruby][5] gleich [zweimal][6]
  • [Python (über CherryPy und entweder Stackless oder StateSaver)][7]

Sicherlich gibt es noch mehr, aber das sind die die ich auf die Schnelle finden konnte.

WP: Gravatar Signup [ Tempus Fugit | TxFx.net ] ist ein kleines Plugin das die Anmeldung für einen Gravatar direkt aus dem Kommentarformular heraus erlaubt, um Leuten ohne Gravatar den Einstieg so einfach wie möglich zu machen (und damit Gravatare zu verbreiten). Witzige Idee.