Limbo (язык программирования)
Последнее изменение этой страницы: 02:39, 22 мая 2016.
Парадигма | параллельный |
---|---|
Разработчики | Шон Дорвард, Фил Винтерботтом, Роб Пайк |
Первый появившийся | 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");
}
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.