A Limbo programozási nyelv

Fordítók, Futtatás

A Limbo program

A Limbo program taszkok végrehajtása céljából együttműködő modulok halmaza.
A forrásszövegben a modul deklarációs és implementációs részből áll.
A deklarációs rész határozza meg a publikus interfészt: függvényeket, absztrakt adattípusokat, mások számára is elérhető konstansokat tartalmaz..
Az implementációs rész tartalmazza az aktuális kódot.
Konvenciók szerint a deklarációs rész egy külön, .m kiterjesztésű fájlban helyeszkedik el, így importálhatják más modulok. Az implementációs rész egy .b kiterjesztésű fájlban tárolódik. Egy modulnak több implementációja is lehet, ezeket külön fájlokban tároljuk.

Futási időben a modulok dinamikusan töltődnek be, a load utasítás tölti be a kódot, és elvégzi a futás idejű típus- ellenőrzést. A modul egyszeri betöltődése után hívhatók a függvényei.

A Limbo erősen típusos nyelv, a programok ellenőrzése fordításkor és a modul betöltésekor is végrehajtódik. A Limbo fordító minden forrásfájlt egy gépfüggő byte kódú .dis kiterjesztésű fájlra fordít le, mely futás időben betölthető.
Példa:

implement Command; include "sys.m"; include "draw.m"; sys: Sys; Command: module { init: fn (ctxt: ref Draw->Context, argv: list of string); }; # Általános "Hello world" program init(ctxt: ref Draw->Context, argv: list of string) { sys = load Sys Sys->PATH; sys->print("hello world\n"); for (; argv!=nil; argv = tl argv) sys->print("%s ", hd argv); sys->print("\n"); }

Fordítás

Inferno shell promptból a Limbo fordítót a limbo utasítással hívhatjuk meg.
Például:

inferno$ limbo hello.b inferno$

Ha nincs szintaktikai hiba, a fordító létrehozza a futtatható Dis fájl, például: hello.dis.

A compiler opciókról a http://www.vitanuova.com/inferno/man/1/limbo.html címen tudhatunk meg többet.

Futtatás

Gépeljük be a fordító által generát futtatható fájl nevét (a .dis kiterjesztést is ki kell írni) a shell promptba. Például:

inferno$ hello.dis hello world inferno$