scheme

part-cw/lambdanative. Interessant - eine Cross-Plattform Programmierumgebung mit Zielen auf Android, iOS, OSX, Linux, Windows und BSD. Basierend auf Gambit-C, einem ziemlich guten (und schon recht lange verfügbaren, also auch "erwachsenen") Scheme Compiler.

Moby ist ein Paket für Racket mit dem man Android Programme erzeugen kann. Integriert in DrRacket hat man auch gleich eine passende IDE in der das meiste auch getestet werden kann. So viel auszuprobieren, so wenig Zeit.

Whalesong: a Racket to JavaScript compiler. Schon lange keinen Link zur besten Scheme Implementation des Netzes gehabt. Ok, Racket nennt sich nicht mehr Scheme, aber Scheme ist noch haufenweise drin. Und jetzt gibt es mit Whalesong ein Backend, das aus dem Racket Code JavaScript produziert - und sogar standalone HTML Files erzeugen kann, die dann einfach im Browser laufen.

What Is Inside A Cat. Ein sehr interessantes Dokument, das die Implementierung von Wraith Scheme sehr detailliert beschreibt, speziell auch die Implementierung der parallelen Prozesse.

dyoo/moby-scheme. Noch eine interessante Sache für Android: ein PLT Scheme (also Racket) Dialekt und eine passende Toolchain um aus Racket Advanced Student Language + World Primitives (ASL ist ein schon recht weit gehender Scheme-Dialekt in Racket und die World Primitives sind für reaktives Programmieren in Scheme) erstellte Anwendungen in JavaScript laufen zu lassen und diese dann zu Androit-Anwendungen zu bündeln. Also Programmierung von Android-Handys in einem reaktiven Scheme-Dialekt. Oder noch kürzer: Klammern für Android.

spock - The Chicken Scheme wiki. Wem Dylan auf JavaScript nicht passt, wie wäre es mit Scheme? Interessant hieran ist die Verbindung zu Chicken Scheme - chicken scheme ist eine der interessanteren Scheme-Implementierungen der letzten Zeit die sich speziell der Integration in normale Systemumgebungen widmet (FFI und einfaches Linken mit C-Libs), von daher lässt das auch ein bischen was von Spock in Bezug auf JavaScript erwarten. Und die dokumentierten Funktionen schauen auch schon recht gut aus - nicht einfach nur eine Spielzeugimplementierung, sondern scheinbar schon eine Menge von Funktionalität.

IronScheme. Interessant - ein Scheme für .NET. Und im Gegensatz zu einigen toten Projekten die ich gefunden habe, scheint hier auch noch was zu passieren. Ok, ich selber tendiere warscheinlich eher zu IronPython, F# oder wenn es Lisp sein soll, Clojure für .NET (davon gibts mitlerweile auch recht aktuelle binäre Pakete zum Ausprobieren, leider wohl derzeit nur Windows, jedenfalls spuckt es unter Mono Fehler aus).

Genau. Wenn man schon sowas langweiliges wie "warum generic functions und nicht single-object-dispatch" erklären will, dann mit solchen Beispielen:

A short example: Imagine you have a class human which is inherited by a class male and female. Now as we all have an urge to reproduce where to put a method for having sex? Create a method haveSex in the human class, duplicate it in male or female? What would the argument to such a class be? What about having sex with people of the same sex, toys, animals, buildings...

via /dev/random - Random Thoughts On Programming In Parentheses - Coops - An introduction to chicken scheme's object system.

JazzScheme - huch? Scheint komplett an mir vorbeigegangen zu sein - es gibt eine IDE für Gambit Scheme die auf mehreren Plattformen läuft und Binaries für OS X, Windows und Linux erstellen kann.

JEmacs - the Java/Scheme-based Emacs - nur so for future curiosity geblogmarkt.

PLT Scheme Blog: Futures: Fine Grained Parallelism in PLT - das beste Scheme auf dem Markt bekommt jetzt auch Microthreads. Im Moment noch recht frisch, aber das wird sicherlich auf Dauer in den Standardumfang wandern.

Continue: Web Applications in PLT Scheme - und weil ich natürlich nicht auf Scheme verweisen kann, ohne auf die beste Scheme-Umgebung aller Zeiten zu verweisen, hier ein Link auf ein Tutorial zur Programmierung von Webanwendungen mit PLT-Scheme.

JazzScheme - interessante "neue" (nicht wirklich, schon 12 Jahre auf dem Buckel, aber jetzt demnächst Open Source) Scheme-Umgebung. Leider nur X11 unter OSX bisher. Aber die GUI-Screenshots sehen sehr interessant aus.

More: Systems Programming with PLT Scheme - nettes Tutorial wie man mit PLT Scheme einen Webserver baut.

PLT Scheme Blog - die neue Version ist jezt raus! Und eines der netten neuen Features: typed-scheme ist integriert.

PLT Scheme version 4.0 is Coming Soon - vom besten Scheme-System der Welt gibts bald ne neue Version mit vielen neuen Features und einigem an Umarbeiten im Hintergrund. Klingt sehr vielversprechend.

XML Transformation in Scheme - kleines Beispiel wie man mit PLT Scheme und XML rumspielt.

impromptu - eine Scheme Umgebung explizit zur Nutzung von AudioUnits. Computergenerierte Musik, mit Hilfe von Haufen von Klammern.

ETOS Compiler - compiliert Erlang Source nach Scheme (Gambit-C).

(The Scheme Way): Erlang or Gambit-C/Termite? A practitioner's perspective - Erlang gewinnt den Vergleich. Einige gute Punkte - speziell die Infrastruktur von Erlang ist einfach besser und ausgereifter.

Scheme 48 - neues Release 1.6. Sehr interessante Elemente für die Programmierung mit Threads. Sieht so aus, als ob da jemand in allen möglichen Konzepten wildern gegangen ist.

Object Debugger - neues Spielzeug für das beste Scheme-System der Welt: DrScheme. Diesmal ein sehr interessantes Debugging-Werkzeug für objekt-orientierte Programme, das den eh schon eindrucksvollen Werkzeugkasten erweitert.

DrScheme - von der besten Scheme-Implementation der Welt gibts jetzt die neue Version 350. Diese hat - neben diversen anderen Änderungen - einen Just-in-Time-Compiler für Intel und PPC.

Scsh PhotoBase - ist eine Foto-Verwaltungs-Software ala iPhoto, aber in Scheme geschrieben und für Benutzung über das Web. Bisher nur eine Ankündigung, aber der Source soll definitiv released werden.

Cocoa für Klammerfetischisten

Es gibt doch tatsächlich eine Objective-C Bridge für das zweitbeste Scheme der Welt. Und ich hab das noch nicht vorher gesehen. Sieht sehr interessant aus, der Autor hat ein nettes Tutorial online, in dem er mit Scheme sein iTunes steuert. Und noch jede Menge anderer Source-Samples für Chicken-Scheme, unter anderem den obligatorischen Currency-Converter. Allerdings braucht man da eine neuere Chicken-Scheme-Version (also einen aktuellen Snapshot), sonst ist der -objc Schalter nicht unterstützt.

Wenn die noch weiter so produktiv sind, wird Chicken bald das beste Scheme von seinem Platz verdrängen

Die Installation ist allerdings ziemlich haarig, daher hier ein paar Notizen wie ich es gemacht habe:

Chicken Scheme 2.3 ist Minimum

libffi aus den Darwinports installieren: sudo port install libffi

objc Egg installieren:

sudo chicken-setup -c "-I/opt/local/include -L/opt/local/lib" objc

Gauche:ObjectiveCBridge - auch für Gauche Scheme gibt es eine Objective-C Bridge. Allerdings weniger ausgefeilte Beispiele.

Just-In-Time-Scheme

plt-scheme bekommt einen JIT Compiler - was dann nochmal einen deutlichen Schub für DrScheme, das beste Scheme der Welt, bieten sollte. Bisher war es ja ein rein interpretiertes System, mit einer eigenen virtuellen Maschine - und die war schon verdammt flott. Aber ein JIT Compiler kann gerade bei grösseren Stringbergen oder Listenfressereien und Zahlenverwurstelungen einiges bringen. Es wird spannend, wie das sich dann gegen z.B. Gambit-C und Chicken darstellt.

Bill Clementson's Blog: Update on Termite (A Lisp for Concurrent/Parallel Programming) - Infos zu Termite, einem auf Gambit-C aufbauenden Scheme mit den Concurrency-Features von Erlang. Klingt sehr interessant das ganze, mal anschauen, wenn der Code released ist.

Gambit Scheme - eine neue Beta

Vom drittbesten Scheme der Welt - Gambit Scheme System - gibt es eine neue Beta für die Version 4.0. Besonders interessant an Gambit-C ist - neben der hohen Performance des Codes - die wirklich geniale Threading-Implementation. Es werden normale Scheme Continuations benutzt und darauf dann ein Dispatcher aufgesetzt. Als Ergebnis brauchen Threads unter Gambit-C fast keinen Speicher (in einer 2G Maschine kann man ohne Probleme über eine Million Threads laufen haben) und Resourcen (und ja, das Switchen bei der Million von Threads ist ebenfalls recht ordentlich). Als Ergebnis ist Gambit-C für massives Multithreading auf Single-Prozessor-Systemen die absolute Nummer 1 - und Webserver lieben viele Threads.

Und bevor jemand fragt: das beste Scheme ist natürlich PLT Scheme (Dr. Scheme) und das Zweitbeste ist Chicken Scheme - denn Chicken Scheme hat immer noch nach PLT Scheme die beeindruckendste Library an mitgelieferten Code. Gambit-C könnte sich da gut einiges abgucken und mehr Libraries mitliefern, denn Libraries sind erst das, was die Sprache wirklich benutzbar macht. Im Moment ist es da bei Gambit-C doch noch arg duster.

Übrigens ist auch die Lizenz endlich gelöst: man kann jetzt bei Gambit-C zwischen LGPL und Apache Lizenz wählen, was wirklich alle Lizenzdiskussionen erübrigen sollte.

Download DrScheme v300 - eine neue Version des besten Scheme-Systems der Welt ist raus. Greift es euch, so lange es frisch ist. Jetzt mit Unicode!

Common Scheme

Common Scheme ist eine Implementation eines gemeinsamen Modul-Standards für verschiedene Scheme-Implementationen inklusive eines Paketinstallers der seine Sachen aus dem Netz holen kann. Dazu kommen eine Reihe von ersten Modulen die darüber verteilt werden. Könnte sowas wie CPAN für Scheme werden.

Ähnliche Ansätze gabs schon öfter, aber leider immer nur für einzelne Schemes (z.B. MZScheme hat sowas). Eine Scheme-übergreifende Lösung könnte auf Dauer doch einiges einfacher machen - und Scheme etwas aus der akademischen Ecke holen. Verdient hätte die Sprache es.

Und das beste: Gambit-C und Chicken sind bei den unterstützten Schems dabei

Leider fehlt MZScheme in der Liste der unterstützten Schemes - es wäre schon ziemlich cool seine Programme mit DrScheme zu entwickeln und dann hinterher einfach durch Chicken zu jagen um sie schnell zu bekommen ...

The CHICKEN Scheme Compiler

Eine häufig (auch von mir) übersehene Scheme-Implementation ist der CHICKEN Scheme Compiler. Das besondere an dieser Implementation: nebem dem interaktiven Interpreter gibt es einen Compiler der portables C produziert und mittels C-Compiler in ladbare Module kompiliert. Dadurch ist dieser Compiler besonders gut bei der Integration von C-Libraries. Im Prinzip ist das noch recht ähnlich zu Gambit-C, einer anderen Scheme-Implementierung die auf C als Zwischensprache aufsetzt.

Aber Chicken geht beim generierten C-Code noch über Gambit-C hinaus - das System ist explizit darauf ausgelegt das es mit C gemixt wird, wärend Gambit-C einfach nur C als portablen Assembler benutzt. In Chicken sind die FFIs (Foreign Function Interfaces) wesentlich einfacher. Das zeigt sich dann in fertigen Interfaces zu diversen Datenbanken wie metakit (wird im Python Desktop Server benutzt), PostgreSQL und sqlite.

Zusätzlich hat Chicken mit den Eggs eine nette Infrastruktur an über das Netz installierbaren Erweiterungen bekommen - mit Webserver, Datenbank und vielen anderen Schmankerln. Das hilft natürlich ungemein bei der Programmierung - ich hab eine solche Infrastruktur an fertigem Code mit MZScheme, Python und Perl lieben gelernt.

Chicken kompiliert auch unter Mac OS X. Im Moment rödelt gerade bei mir der Compiler im Hintergrund

FramerD ist eine Objektdatenbank (ok, ein Framestore - ist aber was ähnliches) mit integriertem DB-Server, CGI-Interface und Scheme-Scriptsprache. Ideal um Wissensdatenbanken aufzubauen, da FramerD auf die dabei anfallenden pointerlastigen Strukturen optimiert ist. Aber auch so sehr spannend, da man ein Scheme mit Server und ODB bekommt. Muss ich unbedingt mal mit spielen, zumal es auch auf OS X kompilieren soll (was es bei mir aber derzeit nicht tut). Und es ist unter GPL lizensiert. Und für die Schlangenbeschwörer unter den Klammeraffen gibts auch eine experimentelle Pythonlibrary zum Zugriff auf FramerD...

SISC - Second Interpreter of Scheme Code

SISC Scheme ist ein in Java geschriebener, sehr vollständiger Scheme-Interpreter und Compiler. Besonders interessant: es gibt ein continuation-basiertes Webframework dafür.

Weitere interessante Eigenschaften sind die gute Integration in die Java-Welt durch das Java-Scheme-Interface. Im Prinzip stehen alle Bibliotheken aus der Java-Welt auch in Scheme zur Verfügung.

SISC Scheme unterstützt auch SLIB (eine Erweiterungsbibliothek für Scheme mit vielen nützlichen Modulen) und diverse SRFIs (Scheme Requests for Implementation - der formale Weg zur Erweiterung der Scheme Sprache mit Standardmodulen).

upcoming change in PLT Scheme v300 - lambda, filter und fold raus. Jawoll. Schliesslich hat das der Python-Guido ja auch schon gefordert.

DrScheme 300er Serie

freshmeat.net: Project details for DrScheme: Yeeeehaaaa!!!! DrScheme wird Unicode-tauglich. Sehr schön. Ok, die anderen Features klingen auch sehr gut, vor allem die über Threads portablen Continuations - gibt ganz neue Möglichkeiten für Schweinereien im Code

Auf jeden Fall gehts bei der besten Scheme-Umgebung weiter und sie wird noch besser.

ETOS Compiler - Erlang-nach-Scheme Compiler der speziell für Gambit 4.0 ausgelegt ist

Gambit Scheme System - effizientes Scheme das mittels C-Compiler native Code erzeugt

Psyche - Noch ein Scheme in Python. Hatte ich glaub ich schon mal

schemon - Scheme in Python mit guter Integration der Sprachen

MrEd Designer - GUI Builder für PLT Scheme

WebHome - Cookbook - s c h e m a t i c s : c o o k b o o k - Kochbuch für praktische Scheme-Anwendung

Project Schematics - Diverser Scheme-Code für MzScheme, unter anderem Datenbanktreiber, Wiki, PDF-Writer ...

spgsql - PostgreSQL Treiber der komplett in Scheme geschrieben ist

thunk webserver - interessanter Webserver komplett in Scheme - zur Portierung von TooFPy geeignet?

Bigloo homepage - Bigloo ist eine der mächtigsten Scheme Implementierungen mit verschiedenen Codegeneratoren (.NET, JVM und C-Code)

Psyche - Ein Scheme in Python, das mit Python-Funktionen erweitert werden kann

QScheme - kompaktes und schnelles Scheme auf Basis einer eigenen VM

Schemix - Scheme als Kernel Modul im Linux Kernel

Datenbanken und Scsh - PostgreSQL-Client in Scheme