Limbo (Programmiersprache) - LinkFang.de





Limbo (Programmiersprache)


Limbo ist eine höhere Programmiersprache, die im Betriebssystem Inferno zur Programmierung von Anwendungsprogrammen verwendet wird. Am Design der Sprache beteiligten sich bekannte Entwickler aus der Unix-Welt wie z. B. Rob Pike und Dennis Ritchie, der schon die erfolgreiche Programmiersprache C entwickelte.

Module

Limbo wird in Bytecode übersetzt, der auf jeder Maschine, unabhängig vom Prozessortyp, ausgeführt werden kann. Limbo-Programme sind Module, die andere Limbo-Module in Limbo laden und deren Funktionalität verwenden können. Module werden vom Betriebssystem Inferno bei Bedarf geladen und später wieder entfernt.

Datentypen

Limbo ist eine streng typisierte Sprache, die auf den ersten Blick der Programmiersprache C ähnelt. Die Schöpfer von Limbo behaupten, dass sie die Möglichkeiten von Java und C++ bietet, jedoch wesentlich einfacher zu erlernen und zu beherrschen sei. Sie unterstützt wenige, genau definierte Datentypen, zum Beispiel vorzeichenlose 8-Bit Zeichen und 32 Bit Integer mit Vorzeichen. Sie unterstützt Parallelbearbeitung. Daneben existieren Kommunikationskanäle als Datentypen.

Limbo und das Betriebssystem Inferno

Inferno verwendet Dateinamen für nahezu alles: Prozessinformationen, Netzwerkverbindungen, Pipes usw. Dateinamen sind Verweise auf mit dem Protokoll Styx erreichbare Dateien, Ressourcen und Geräte. Es spielt keine Rolle, ob diese lokal oder nur über das Netzwerk erreichbar sind. Limbo verwendet diese Dateinamen für die Kommunikation mit der Außenwelt. Dabei kann ein Limbo-Modul eine Datenstruktur erzeugen, die über Styx kommuniziert. Die Methoden und Funktionen eines Moduls werden von diesem in Styx umgesetzt. Dies braucht ein Programmierer jedoch nicht zu wissen. Er muss nur die abstrakten Methoden eines Moduls kennen, ohne genau zu wissen, wie diese auf das niedrigere Styx-Protokoll umgesetzt werden.

Referenzzähler und automatische Speicherbereinigung

Zeiger werden durch Referenzen ersetzt, die die referenzierten Strukturen dynamisch allozieren und deallozieren. Dazu werden sowohl Referenzzähler, als auch eine automatische Speicherbereinigung (garbage collection) eingesetzt. Durch die Referenzzähler ist garantiert, dass nach Aufgeben der letzten Referenz die Datenstruktur auch freigegeben wird. Dies ist wichtig, wenn die Struktur andere Ressourcen wie offene Dateien enthält, die spätestens beim Freigeben geschlossen werden.

Verwendet man ausschließlich die automatische Speicherbereinigung, so kann die Freigabe verzögert, gegebenenfalls auch gar nicht vor Programmende durchgeführt werden. Der Zeitpunkt der Freigabe ist nicht vorhersagbar. Referenzzähler dagegen geben zyklische Datenstrukturen wie Ringlisten, Bäume mit Rückwärtsreferenzen usw. nicht zuverlässig frei. Es können Strukturen übrig bleiben, die niemals freigegeben werden, weil sie sich gegenseitig referenzieren, auf die aber auch nicht mehr zugegriffen werden kann.

Limbo verwendet eine einfache Methode, zyklische Datenstrukturen normalerweise auszuschließen: Wenn in der Definition eine Referenz auf eine Datenstruktur auftaucht, bevor die eigentliche Struktur bekannt ist, darf die Struktur nur insgesamt, jedoch keine Teile daraus dereferenziert werden. Damit können keine zyklischen Datenstrukturen erzeugt werden. Referenzzähler sorgen dann dafür, dass die Struktur beim letzten Auftreten der Referenz und damit zu einem genau vorhersagbaren Zeitpunkt freigegeben wird.

Das Schlüsselwort cyclic hebt die Restriktion auf und erlaubt die Definition aller Datenstrukturen. Zur Freigaben von diesen Strukturen wird eine automatische Speicherbereinigung verwendet.

Beispiele

Hallo-Welt-Programm

implement Command;
 
include "sys.m";
    sys: Sys;
 
include "draw.m";
 
include "sh.m";
 
init(nil: ref Draw->Context, nil: list of string)
{
    sys = load Sys Sys->PATH;
    sys->print("Hallo Welt!\n");
}

Weblinks


Kategorien: Programmiersprache

Quelle: Wikipedia - http://de.wikipedia.org/wiki/Limbo (Programmiersprache) (Vollständige Liste der Autoren des Textes [Versionsgeschichte])    Lizenz: CC-by-sa-3.0

Änderungen: Alle Bilder mit den meisten Bildunterschriften wurden entfernt. Ebenso alle zu nicht-existierenden Artikeln/Kategorien gehenden internen Wikipedia-Links (Bsp. Portal-Links, Redlinks, Bearbeiten-Links). Entfernung von Navigationsframes, Geo & Normdaten, Mediadateien, gesprochene Versionen, z.T. ID&Class-Namen, Style von Div-Containern, Metadaten, Vorlagen, wie lesenwerte Artikel. Ansonsten sind keine Inhaltsänderungen vorgenommen worden. Weiterhin kann es durch die maschinelle Bearbeitung des Inhalts zu Fehlern gerade in der Darstellung kommen. Darum würden wir jeden Besucher unserer Seite darum bitten uns diese Fehler über den Support mittels einer Nachricht mit Link zu melden. Vielen Dank!

Stand der Informationen: August 201& - Wichtiger Hinweis: Da die Inhalte maschinell von Wikipedia übernommen wurden, ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.de nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein, bitten wir Sie darum uns per Support oder E-Mail zu kontaktieren. Wir werden uns dann innerhalb von spätestens 10 Tagen um Ihr Anliegen kümmern. Auch ohne Anliegen erfolgt mindestens alle drei Monate ein Update der gesamten Inhalte.