# S (Programmiersprache)

S ist eine Programmiersprache für statistische Berechnungen und Grafiken, die ursprünglich von Richard A. Becker (Rick Becker), John M. Chambers und Allan R. Wilks an den Bell Laboratories (heute Teil von Alcatel-Lucent und somit Nokia) entwickelt wurde.
Heute sind die beiden S-Implementierungen R (Open Source) und S-PLUS verfügbar, die weitgehend, jedoch nicht vollständig, kompatibel sind. R wird im TIOBE-Index auf Platz 9 aufgeführt, S-PLUS taucht dagegen unter den 100 verbreitetsten Programmiersprachen nicht mehr auf.

## Geschichte
### Ursprünge (bis 1976)

Zur Zeit der ersten Entwicklung von S gab es keine statistische Programmiersprache. Für statistische Berechnungen war es oft nötig, Fortran-Routinen direkt aufzurufen. Mit S sollten Prozesse, die in der interaktiven Arbeit von Statistikern mit Daten wiederkehren, wie die explorative Datenanalyse und die Erstellung passender Grafiken, schneller möglich und flexibel programmierbar sein. 1969 veröffentlichte John M. Chambers die Grundzüge einer statistischen Sprache. Nach seinen Worten lag das Ziel von S darin, Ideen schnell und sinngetreu in Software umzuwandeln.
   “S is a programming language and environment for all kinds of computing involving data. It has a simple goal: To turn ideas into software, quickly and faithfully.”
   „S ist eine Programmiersprache und Umgebung für alle Arten von Berechnungen unter Einbeziehung von Daten. Sie hat ein einfaches Ziel: Ideen schnell und sinngetreu in Software umzuwandeln.“

### S1 (1976–1980)

Die erste S-Implementierung (S1) auf Basis von Fortran wurde 1976 intern in den Bell Labs veröffentlicht. S hatte Schnittstellen zu Routinen der numerischen linearen Algebra, Zufallszahlen und ein paar Modellen. S lief dabei auf Honeywell-Großrechnern unter dem Betriebssystem GCOS. 1979 wurde die Sprache nach Unix portiert, was für Weiterentwicklungen einfacher war, zumal auch Unix in den Bell Labs seine Ursprünge hat. Grafiken wurden plattformunabhängig erstellt.

### S2 (1980–1988)

1980 erschien die zweite Version von S (S2). Die Bell Labs gehörten während der Entwicklung von S zu AT&T, die sich in der Position eines regulierten Monopols befanden und Zugriff auf Entwicklungen der Bell Labs hatten. Sie vergaben erstmals Lizenzen für die Nutzung von S an Bildungseinrichtungen und für kommerzielle Zwecke.

### S3 (1988–1998)

Durch die Einführung von S3 im Jahre 1988 wurden fundamentale Änderungen in S und seiner Syntax eingeführt, sodass die Sprache nicht mehr lediglich eine Schnittstelle mit Makros für existierende Routinen war, sondern diese als Funktionen darstellte. Neben Fortran wurde C zur Erstellung verwendet; beide Sprachen konnten zudem aufgerufen werden um den Funktionsumfang zu erweitern. Unter anderem erlaubte die neue Version die Formulierung statistischer Modelle. Der Data frame wurde als Klasse eingeführt um Datensätze zu speichern. Variablen und Funktionen werden als Objekte in der Arbeitsumgebung gespeichert. Im S3-Klassensystem gehören Methoden nicht zu Objekten oder Klassen, sondern zu Funktionen; sie entsprechen somit generischen Funktionen. Die generische Funktion entscheidet darüber, welche Methode aufgerufen wird. Es gibt keine formale Beschreibung einer Klasse.
Nach der Aufteilung von AT&T 1984 war es den Bell Labs möglich S zu verkaufen. Das Unternehmen Statistical Sciences entwickelte eine kommerzielle Implementierung von S mit erweiterten Funktionen und veröffentlichte 1988 S-PLUS. Einige Zeit später im Jahr 1993 wurde mit R als GNU-Projekt eine freie Version von S veröffentlicht. Die Mehrzahl der Programme, die für S-PLUS geschrieben wurden, sind unter R lauffähig und umgekehrt. Unterschiede bestehen etwa in der Implementierung komplexer Graphiken.

### S4 (seit 1998)

S4 führte 1998 ein neues, erheblich erweitertes Objekt- und Klassenmodell als Erweiterung der S3-Klassen ein. Die Funktionsweise ist ähnlich, sodass Methoden zu Funktionen gehören. Klassen haben jedoch formale Definitionen, welche die Felder und Vererbungsstrukturen (Basisklasse) beschreiben. Eine S4-Klasse besteht aus drei Eigenschaften: der Name zur Identifizierung der Klasse, eine Liste der Felder um Namen der Felder und zugelassene Klassen zu definieren sowie eine Zeichenkette mit der Klasse, von der sie abgeleitet ist. Mit S4-Klassen ist eine mehrfache Vererbung möglich. Es gibt Hilfsfunktionen um Methoden und generische Funktionen zu definieren. Das S4-Klassensystem implementiert Multimethoden, sodass generische Funktionen Methoden auf Grundlage der Klassen mehrerer Argumente auswählen können. Mit dem At-Zeichen (@) können Felder von einem S4-Objekt extrahiert werden. Objekt und Methode werden im Funktionsaufruf durch einen Punkt getrennt. Benutzerdefiniert können neue Klassen erstellt oder bestehende umdefiniert werden. R übernahm die S4-Klassen.
2001 nannte sich Statistical Sciences in Insightful um und erwarb 2004 die Rechte an S für 2 Millionen US-Dollar. 2008 wurde Insightful für 25 Millionen US-Dollar an TIBCO verkauft und S-PLUS als Bestandteil von Spotfire Analytics aufgenommen.

## Auszeichnungen

Die Association for Computing Machinery zeichnete 1998 John Chambers für die Entwicklung von S mit dem ACM Software System Award aus.