Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Limbo14 мая 2011Оглавление: 1. Limbo 2. Unicode 3. Пример программы Особенности Язык Limbo близок Си и Java, результатом компиляции является байт-код, что обеспечивает переносимость. Переносимость же лежит в основании самой ОС Inferno, доведенная до состояния приложения, запускаемого поверх хост-операционной системы: Plan 9, FreeBSD, Irix, Linux, Mac OS X, Solaris, Windows NT. Limbo имеет встроенный механизм межпроцессного взаимодействия под названием «channels». Среди встроенных типов:
Типы данныхПомимо обычных числовых типов, структур и union, Limbo поддерживает строки и несколько более специфических типов данных: списки, массивы, tuples и каналы. Все эти типы данных это first-class variables, т.е. их можно сохранять в переменных, передавать через каналы, etc. Обычные числовые типы можно преобразовывать друг в друга, кроме того строки тоже можно преобразовывать в числа и наоборот. Но все преобразования должны указываться явно, неявных преобразований типов нет. СтрокиСтроки можно преобразовывать в массивы байт, и наоборот. Кроме этого строки поддерживают срезы, т.е. можно обратиться к конкретному символу или последовательности символов, например: my_string. Спискиlist это последовательность элементов одного типа оптимизированная для стеко-подобных операций). Для работы со списками есть три оператора:
Пример: 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; // удаляем из него первый элемент Массивыarray содержит фиксированное кол-во элементов одного типа. Размер массива указывается при его создании/инициализации, а не при объявлении типа переменной - т.е. массивы можно динамически создавать в любой момент. Фактически в Limbo только два способа динамически выделить память: создать array указав требуемый размер через переменную, и добавить новый элемент в начало list. Естественно, массивы тоже поддерживают срезы. TuplesTuple - это список из 2-х и более элементов любых типов. И это не просто список, а такой же тип данных, как и другие - тип самого Tuple фактически определяется по тому, каких типов элементы и в каком порядке он содержит. Пример: i_s : ; i_s = ; // тип i_r_s_s это i_r_s_s := ; Tuple можно раскладывать на составляющие присваивая его в список обычных переменных: // создаёт переменные i типа int и s типа string и // инициализирует их значениями 5 и "five" := i_s; Обмен значений двух переменных на Limbo: = ; КаналыКаналы позволяют организовывать IPC между локальными процессами передавая атомарно объекты заданного типа. Чтение/запись канала это блокирующая операция. c := chan of int; // создаёт канал c <-= 10; // отправить в канал i := <-c; // принять из канала int <-c; // принять и проигнорировать значение c = nil; // уничтожить канал Каналы бывают буферизированные. Запись в буферизованные каналы не блокируется пока не будет заполнен буфер. Буфер работает как FIFO очередь. Для мультиплексирования каналов в Limbo есть целых два средства - можно читать из массива каналов, а можно использовать специальный оператор alt для выбора канала. alt { i := <-inchan => sys->print; outchan <-= "message" => sys->print; } Составные типыarray of chan of Это массив хранящий каналы, по которым передаются tuple состоящие из int и списка строк. Размер массива здесь не определяется, он будет задан в процессе выполнения, при инициализации массива. Просмотров: 2575
|