Limbo (Programmiersprache)

Limbo (Programmiersprache)

Limbo ist eine höhere Programmiersprache, die im Betriebssystem Inferno zur Programmierung von Anwendungsprogrammen verwendet wird. Beim Design der Sprache waren bekannte Entwickler der erfolgreichen Programmiersprache C wie Dennis Ritchie und Rob Pike beteiligt.

Inhaltsverzeichnis

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 derefenziert 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


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Limbo (Begriffsklärung) — Limbo bezeichnet: einen Brauch und Tanz, siehe Limbo einen Film von John Sayles aus dem Jahr 1999, siehe Wenn der Nebel sich lichtet – Limbo eine Programmiersprache, siehe Limbo (Programmiersprache) ein Web Content Management System, siehe… …   Deutsch Wikipedia

  • Limbo CMS — Mambo Übersicht der Globalkonfiguration von Mambo Basisdaten Entwickler: Mambo Foundation …   Deutsch Wikipedia

  • Go (Programmiersprache) — Go Basisdaten Paradigmen: nebenläufig, imperativ, strukturiert, modular Erscheinungsjahr: 2009 …   Deutsch Wikipedia

  • Liste der Programmiersprachen — A A (Programmiersprache) A# A+ A 0 A 1 A 2 A 3 A9 AACC AADL AAIMS aal AAPL Aardappel AARDVARK Abacus ABACUS 10 ABACUS/X ABAP ActionScript Ada ADbasic AgentSpeak(L) Agilent VEE AHDL Aleph ALGOL (ALGOL 60, ALGOL W, ALGOL 68) Amber …   Deutsch Wikipedia

  • Byte-Code — In der Informatik ist Bytecode eine Sammlung von Befehlen für eine virtuelle Maschine. Bei Kompilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen, wie z. B. Java, wird nicht direkt Maschinencode sondern ein Zwischencode, der… …   Deutsch Wikipedia

  • Java-Bytecode — In der Informatik ist Bytecode eine Sammlung von Befehlen für eine virtuelle Maschine. Bei Kompilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen, wie z. B. Java, wird nicht direkt Maschinencode sondern ein Zwischencode, der… …   Deutsch Wikipedia

  • KoeSubmit — Mambo Übersicht der Globalkonfiguration von Mambo Basisdaten Entwickler: Mambo Foundation …   Deutsch Wikipedia

  • Koesubmit — Mambo Übersicht der Globalkonfiguration von Mambo Basisdaten Entwickler: Mambo Foundation …   Deutsch Wikipedia

  • Mambo Open Source — Mambo Übersicht der Globalkonfiguration von Mambo Basisdaten Entwickler: Mambo Foundation …   Deutsch Wikipedia

  • XMambo — Mambo Übersicht der Globalkonfiguration von Mambo Basisdaten Entwickler: Mambo Foundation …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”