Limbo (язык программирования)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 02:39, 22 мая 2016.
Limbo
Парадигма параллельный
Разработчики Шон Дорвард, Фил Винтерботтом, Роб Пайк
Первый   появившийся 1995
Печать дисциплины строгая
Лицензия Open source
Портал: limbo
Под влиянием
CSP, Pascal, C, Alef, Newsqueak
Влияние
Stackless Python, Go, Rust

Limbo - это язык программирования для написания распределенных систем и является язык, используемый для написания приложений для операционной системы Inferno. Он был разработан в Bell Labs Шон Дорвард, Фил Уинтерботтом, и Роб Пайк. Компилятор Limbo генерирует архитектурно-независимый код объекта, который затем интерпретируется виртуальной машиной Dis или скомпилирован непосредственно перед выполнения для повышения производительности. Поэтому все приложения Limbo полностью переносимы для всех платформ Inferno.

Языковые особенности

Limbo поддерживает следующие функции:

  • модульного программирования
  • параллельное программирование
  • сильный проверка типа при компиляции и во время выполнения
  • межпроцессного связь по типизированных каналов
  • автоматический сбор мусора
  • простые абстрактные типы данных

Встроенных типы

  • byte (8-разрядное целое беззнаковое число),
  • int (32-разрядное целое число со знаком),
  • big (64-разрядное целое число со знаком),
  • real (64-разрядное число с плавающей запятой),
  • array (массив со слайсами),
  • string
  • adt (Абстрактный тип данных)
  • tuple (Кортеж),
  • modul

Подсчет ссылок и сбор мусора

Указатели заменяются ссылками , которые динамически выделяют ссылки структур. По счетчиком ссылок гарантируется , что после отказа от последней ссылки также будет освобождена и структура данных. Это важно , если структура содержит другие ресурсы , такие как открытые файлы, которые закрываются позднее после освобождения. Если используется только сбор мусора, освобождение может быть отложено, а также не должно проводиться до завершения программы. Сроки выпуска не предсказуемы. Счетчик ссылок с другой стороны дают циклическим структурам данных, таким как списки, деревья и т.д., обратные ссылки не свободно достоверные. Структуры могут быть оставлены, но это никогда не произойдет, потому что они ссылаются друг на друга, но уже не могут быть доступны. Лимбо использует простой метод, циклические структуры данных обычно не выполняются.

Примеры

Limbo использует определения ада-стиля:

 name := type value;
 name0,name1 : type = value;
 name2,name3 : type;
 name2 = value;

Пример списка:

l : list of int;
l   = 10 :: 20 :: 30 :: nil; // создаём список из 3-х элементов
l   = 5 :: l;                // добавляем в начало ещё один
i  := hd l;                  // получаем int равный 5, список не изменился
l2 := tl l;                  // получаем новый список 10 :: 20 :: 30 :: nil
l2  = tl l2;                 // удаляем из него первый элемент

Программа "Hello world":

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

Ссылки

  1. Vita Nuova page on Limbo
  2. A Descent into Limbo
  3. The Limbo Programming Language
  4. Inferno Programming with Limbo