Scheme ist eine der bedeutendsten Dialekte der Lisp-Familie und hat seit seiner Entstehung eine bemerkenswerte Reise durch verschiedene Standardisierungen erlebt. Die verschiedenen Versionen der Standards - R5RS, R6RS und R7RS - spiegeln die unterschiedlichen Ansätze und Meinungen der Scheme-Community hinsichtlich Sprache, Standardisierung und Praxis wider. Die Geschichte dieser Standards zeigt nicht nur die technische Entwicklung von Scheme, sondern auch die philosophischen und praktischen Debatten, die die Sprache geprägt haben. Der Ursprung von Scheme liegt in der ursprünglichen Veröffentlichung des Berichts "Report on the Algorithmic Language Scheme", welcher die Grundlagen legte. Daraufhin folgten mehrere Überarbeitungen, die traditionell mit einer doppelten Vorsilbe "Revised" bezeichnet wurden, wobei das Kürzel RnRS (Revised^n Report on Scheme) für die n-te Version des Standards verwendet wird.
Bis einschließlich R5RS wurden die Änderungen in der Sprache äußerst konservativ gehandhabt. Jede neue Version war eine behutsame Erweiterung der vorherigen und die Ratifikation erfolgte einstimmig durch das Scheme Steering Committee. So blieb die Sprache angenehm klein und elegant – der R5RS-Standard umfasst beispielsweise lediglich rund 50 Seiten. Diese Minimalistik führte dazu, dass die Sprache zwar leistungsfähig, aber im Vergleich zu modernen Programmiersprachen funktional eingeschränkt war, insbesondere in Bezug auf Standardbibliotheken. Praktisches Programmieren wurde dadurch erschwert, weil viele Implementierungen unterschiedliche Erweiterungen nutzten, was die Portabilität von Programmen beeinträchtigte.
Um diesem Problem zu begegnen, wurde das Konzept der Scheme Requests for Implementation (SRFI) eingeführt. SRFIs sind vergleichbar mit RFCs im Internet oder PEPs in Python. Mit ihnen können individuelle Funktionen vorgeschlagen und von der Community angenommen werden, ohne die Hauptstandards direkt zu ändern. Diese Struktur ermöglichte die parallele Entwicklung zahlreicher Zusatzfunktionen und deren breite Unterstützung in unterschiedlichen Scheme-Implementierungen. R6RS stellte einen Wendepunkt in der Geschichte von Scheme dar.
Ziel war es, ein umfangreicheres und praktischeres Sprachmodell bereitzustellen und damit die Portabilitätsprobleme zu beheben. Dazu wurde die Zustimmungspraxis des Steering Committees geändert: Wo vorher eine einstimmige Zustimmung nötig war, genügte nun eine einfache Mehrheit von etwa 60 Prozent. Das führte dazu, dass R6RS deutlich umfangreicher wurde – der Sprachbericht ist über 90 Seiten lang, dazu kommt eine 71 Seiten umfassende Spezifikation der Standardbibliotheken. Die Sprache wurde damit wesentlich mächtiger und für viele praktische Anwendungen besser geeignet. Allerdings spaltete R6RS die Scheme-Community.
Einige Anwender begrüßten die zusätzlichen Funktionen wie etwa standardisierte Hashtabellen, moderne Module und umfangreiche Bibliotheken. Andere kritisierten die vermeintliche Überfrachtung der Sprache, die Abweichung vom minimalistischen Geist von Scheme und Konflikte mit bestehenden SRFIs. Einige fühlten sich durch die feste Spezifikation eingeschränkt, da Innovationen nicht mehr so flexibel eingebracht werden konnten. Aus dieser Zwiespältigkeit heraus entstand die Entscheidung, den Standard in zwei Linien zu teilen. So wurde das R7RS-Projekt initiiert, das eine klare Trennung zwischen einem kleinen, minimalistischen Kern (R7RS-small) und einem größeren, optionalen Sprachumfang (R7RS-large) anstrebt.
R7RS-small wurde 2013 fertiggestellt und kehrt zur Philosophie des schlanken, leichtgewichtigen Scheme zurück, während R7RS-large weiterhin entwickelt wird um eine breitere funktionsreiche Umgebung zu bieten. Die Debatte um R6RS und R7RS repräsentiert tiefere Differenzen in der Auffassung darüber, wie Scheme als Sprache verstanden und weiterentwickelt werden soll. Einige Entwickler bevorzugen einen umfassenden Standard, der möglichst viele Funktionen direkt abdeckt, um größtmögliche Portabilität und Benutzerfreundlichkeit zu gewährleisten. Andere sehen in den SRFIs die geeignete Plattform für Innovationen und Erweiterungen und möchten den Kernstandard möglichst klein halten, um die Sprache flexibel und übersichtlich zu erhalten. Ein praktisches Beispiel ist die Frage der Hashtabellen.
R6RS standardisierte Hashtabellen direkt in der Sprache. R7RS dagegen vertraut auf SRFI 69, eine spezialisierte Erweiterung dafür. Für Nutzer von Implementierungen wie CHICKEN Scheme sind SRFIs natürliche und direkt nutzbare Erweiterungen. Andere Nutzer bevorzugen eine direkte Integration in den Hauptstandard. Insgesamt lässt sich sagen, dass die Scheme-Standardisierung ein Balanceakt zwischen Minimalismus und praktischer Verwendbarkeit ist.
Während R5RS den Grundstein mit einem kleinen und eleganten Kern legte, bemühte sich R6RS um eine genauere Spezifizierung und eine umfassendere Bibliothek. R7RS versucht, beide Ansätze zu vereinen, indem es einen schlanken Kern bewahrt und gleichzeitig auf eine modulare Erweiterbarkeit setzt. Diese Entwicklung unterstreicht auch die Besonderheit von Scheme als Sprache mit einer aktiven Community, die sich neben technischen Fragen auch intensiv mit den Prinzipien und der Philosophie des Sprachdesigns auseinandersetzt. Die Diskussionen und Standardisierungen spiegeln das Bestreben wider, Scheme als flexible, moderne Programmiersprache relevant zu halten, ohne seine minimalistische Herkunft aufzugeben. Für Programmierer, die sich mit Scheme beschäftigen, ist es wichtig, die Unterschiede zwischen den Standards zu verstehen und abzuwägen, welche Version und welche Erweiterungen am besten zur jeweiligen Anwendung passen.
Implementierungen variieren stark in ihrem Support der Standards und SRFIs, was bei der Wahl der Entwicklungsumgebung berücksichtigt werden sollte. Zusammenfassend ist die Geschichte der Scheme-Standards ein lebendiges Beispiel für die Herausforderungen und Chancen in der Weiterentwicklung einer Sprache, die sowohl Tradition als auch Innovation in sich vereint. Von dem kleinen und minimalistischen R5RS bis hin zur Aufspaltung in R7RS-small und R7RS-large dokumentiert sie die Bemühungen der Community, den Spagat zwischen Eleganz, Funktionalität und Portabilität zu meistern.