# GT.M

GT.M besteht aus einer MUMPS-Datenbank die für die Transaktions-Verarbeitung optimiert ist und Compiler für die ISO-Standard-M-Programmiersprache, auch bekannt als MUMPS nach ISO/IEC 11756.
GT.M, eine Abkürzung für Greystone Technology Mumps und wurde ab 1980 bei Greystone Technology Corp entwickelt. Es ist eine Implementierung des ANSI-Standard M für IBM AIX, HP-UX, OpenVMS, Linux und SUN Solaris. Zusätzlich zu den traditionellen, standardmäßigen M-Funktionalitäten, offeriert GT.M auch einen Compiler, der direkt Maschinencode erzeugt.
1998 wurde GT.M von Sanchez Computer Associates aufgekauft, dieses Unternehmen wurde dann 2002 von Fidelity Information Services (FIS) – dem weltweit größten Finanzdienstleister – übernommen. Bereits davor wurde GT.M im Jahre 2000 als Open Source für Linux und OpenVMS veröffentlicht. Die kommerziellen Versionen für HP-UX und Solaris wurden 2015 von FIS als Produkte aufgelassen. 2017 wurde von einem GT.M Entwickler-Spinnoff die Datenbank YottaDB als Open-Source Produkt – mit Schwerpunkt auf Integration anderer Sprachen – für Linux veröffentlicht.
GT.M wird bei der FIS-Profile-Banken Anwendung verwendet, die bei den Banken in den USA, Kanada, Spanien, Frankreich, Italien, Holland und Großbritannien im Einsatz steht. Ebenso ist GT.M als Backend von WorldVistA – einer weltweit verwendeten Open-Source-Krankenhaus-Anwendung – in Verwendung.

## Technischer Überblick

GT.M besteht aus einer Programmiersprache, die über einen Compiler realisiert wurde. Die Sprache MUMPS – ab 1993 auch M genannt – besteht immer aus einer Datenbank und einer Programmiersprache.

### Datenorganisation und Typisierung

Mumps kennt den Datentyp String. Ein String ist eine beliebige Zeichenkette. In der Sprache selbst wird bei logischen und mathematischen Operationen der String zu einem Zahlenwert interpretiert, indem der String vom Anfang bis zum ersten nichtnumerischen Zeichen als Zahl gesehen wird. Zum Beispiel entspricht die Zeichenfolge „1234.12abcdege“ der Zahl 1234.12, wenn damit gerechnet wird oder logische Operationen ausgeführt werden.

### Datenbank

Informationstechnologisch ist M ein Datenspeicherungssystem basierend auf String-Adressierung und B*-Bäumen (balanced trees) mit Schlüsselkomprimierung. Es werden nur belegte Knoten gespeichert („sparse arrays“). Eine M – Datenbank ist grundsätzlich selbstreorganisierend und reorganisationsfrei. B*-Bäume zeichnen sich durch extreme Effizienz und Geschwindigkeit im Datenzugriff aus. Sie sind gut geeignet für Applikationen mit online Transaktionsverarbeitung (OLTP). Sie sind auch geeignet jedes andere Datenbanksystem – auch relationale – zu modellieren.
Werte der Datenbank und auch lokale Variablen können als String in Form eines multidimensionalen Arrays mit 32 Knoten gespeichert. Wobei die Indexwerte dieses Arrays Strings sein können. Die Daten sind ohne Typ, bzw. Strings.
Zum Beispiel, wenn jemand die Liste der Hauptstädte der Vereinigten Staaten repräsentieren möchte:
Variablen werden bei der ersten Zuweisung bei Bedarf erzeugt. Der erste Set-Befehl oben erzeugt die Variable Hauptstadt. Variablen sind Bestandteil der Programmiersprache und sind sogenannte lokale Variablen. Ein Datenbankzugriff schaut wie ein Array-Zugriff aus, zum Beispiel:
aber das Exponentialzeichen (^) bedeutet einen Datenbankzugriff. Variablen in der Datenbank haben einen globalen Bereich und sind natürlich persistent und werden von allen Prozessen gemeinsam benutzt. Es sind sogenannte globale Variablen. Die ersten 31 Zeichen eines Variable variable Namen sind signifikant.
Der KILL Befehl wird benutzt, um Unterbäume der Variablen zu löschen.
Zahlen in GT.M sind 18 Digits genau (vor oder nach dem Komma). Die wissenschaftliche Notation werden bei größeren Zahlen verwendet.
GT.M benutzt den Unicode (ISO/IEC-10646).

### Integrierte Datenbank

Die logische Datenbank eines GT.M-Prozesses enthält einen oder mehrere Globale-Variablen-Namensbereiche, jeder hat eine unbegrenzte Anzahl globaler Variablen. Eine Datenbankdatei besteht bis zu 224M (276,168,704) Datenblöcken. Eine globale Variable kann bis zu 1,792 GB groß werden.
Die Datenbank unterstützt Transaktionen. Der folgende Code implementiert eine ACID-Transaktion:

### Integrierte Programmiersprache

Mit GT.M beinhaltet die komplette Implementierung des ISO-Standard MUMPS mit wenigen proprietären Erweiterungen.
Lokale Variablen können bis zu einem Megabyte groß werden. Die GT.M-Laufzeitumgebung benutzt dynamische Speicherzuteilung und Garbage Collection. GT.M-Routinen werden vor der Ausführung dynamisch kompiliert und gelinkt.
Das M-Programm kann C-Code aufrufen und umgekehrt, das heißt, als Hauptprogramm kann ein normales C-Hauptprogramm (main) genutzt werden.

## Plattformen

GT.M unterstützt die folgenden Plattformen:
* AIX auf IBM System p
* GNU/Linux auf IBM System z, Itanium-, x86-64- und IA-32-Architekturen
* HP-UX auf Itanium bis 2015
* Solaris auf SPARC bis 2014
* z/OS auf IBM System z
GT.M ist auch für die folgenden Plattformen verfügbar:
* HP-UX auf HP 9000 (PA-RISC) bis 2015
* OpenVMS auf Alpha/AXP bis 2015
* Tru64 UNIX auf Alpha/AXP

## Lizenzen

Für GNU/Linux und OpenVMS ist GT.M als Free / Open Source Software (FOSS) veröffentlicht. Lizenz: GNU Affero General Public License, version 3.
Die anderen Plattformen sind proprietär. Es gibt diverse Erweiterungen für spezielle SQL Overlays diese werden als kommerzielle Produkte angeboten.