Inferno OS Wiki
Регистрация
Advertisement

История[]

Язык программирования Limbo был разработан сотрудниками Компьютерного Научного Исследовательского Центра (CSRC) при Bell Laboratories, разработчиками и исследователями компании Lucent Technologies. CSRC ответственна за разработку операционной системы UNIX, языков программирования C и C++, и за многие инновации в области компьютерной науки.

Язык Limbo развивался год за годом опираясь на исследования, строясь на концептах из более ранних языков с намерением предоставить полный, ясный, безопасный и переносимый язык программирования для ОС Inferno.

Многие языки оказали влияние на дизайн и реализацию Limbo:

  • C - Синтаксис, структура,управляющие структуры
  • Pascal - Объявления
  • Alef - Каналы и Абстрактные типы данных (ADT)
  • Newsqueak - Процессы
  • CSP - Процессы, Взаимодействие
  • ML - ADT, модули, проверка типов во время компиляции, сборка мусора

Цели[]

Limbo предназначен для создания приложений для сетевой операционной системы Inferno и работает в тесной кооперации с ней. Так что цели его создания были теми же:

  • Легко портируемая, независимая от аппартаной платформы ОС Inferno предназначена для работы на широком спектре платформ, как в родном, так и в гостевом режиме, так что ее приложения должны одинково работать на этих платформах не требуя модификации.
  • Компактность и низкий оверхед. Исполняемый код длжен быть компактным и эффективным чтобы исполняться на практически любом устройстве, в особенности в условиях ограниченного объема памяти и ресурсов.
  • Сетецентричность. Язык должен способствовать созданию приложений, которые эффективно взаимодействуют посредством сети. Любой сети.
  • Законченность. Любая задача программирования должна быть решаемой с использованием Limbo, гибкого, но достаточно мощного для создания комплексных приложений.

Характерные черты[]

У Limbo есть множество особенностей, некоторые из которых являются прямым следствием особенностей Inferno:

  • Знакомый, простой в освоении
  • Переносимый
  • Компактный
  • Безопасный
  • Интерпретируемый
  • Встроенная поддержка сети
  • Встроенные многопоточность и межпоточное взаимодействие
  • Масштабируемый

Знакомый, простой в освоении[]

Limbo, хотя и совершенно новый язык, имеет схожий с Си синтаксис и способ объявления переменных, заимствованный из Pascal. Поэтому любой, кто знаком с Си, Pascal или схожим по структуре языком, не будет испытывать больших трудностей изучая Limbo. Limbo также имеет языковые структуры, которые можно найти в таких популярных языках как C++, Java, Smalltalk и Lisp.

Limbo поддерживает стандартные типы данных, типичные для языков Си и Pascal, а также как и несколько высокоуровневых типов, таких как списки, кортежи, строки, динамические массивы и некоторые абстрактные типы данных.

Переносимый[]

Limbo компилируется в аппаратно независимый бинарный образ для выполнения на виртуальной машине Dis. Один и тот же двоичный файл может быть выполнен на любой платформе, на которой работает Inferno и Dis VM.

Inferno Reference API предоставляет набор стандартный системных вызовов, который полностью абстрагирует программиста от низлежащей архитектуры.

Реализаций языка Limbo никак не привязана к нижлежащей архитектуре. Так, Limbo явно определяет размер примитивных типов данных для всех платформ.

Встроенный в Inferno коммуникационный протокол Styx изолирует программиста от физической реализации сети так же как виртуальная машина делает это для аппаратной архитектуры.

Компактный[]

Полезные приложения на Limbo могут нормально функционировать даже при минимально доступном объеме памяти. Через использование динамических модулей приложения могут выборочно загружать и выгружать части приложения в зависимости от среды и доступных к использованию ресурсов.

Безопасный[]

Limbo проверяет типы данных во время компиляции и запуска. Например, использование указателей гораздо больше ограничено, чем в Си, а согласованность типов динамически подгружаемого модуля проверяется во время его загрузки.

// TODO for j1m: разобраться Эти специальный особенности по безапасности доступно для Limbo программ и могут безопасно запускаться на машине с защищенным режимом работы памяти. В добавок ко всему, все данные и программные объекты в Limbo управляются сборщиком мусора, который встроен внутрь системы поддержки исполнения программ языка Limbo. Виртуальная машина полностью управляет временем жизни выделенных ресурсов с помощью связанных окон, сетевых соединений, и файловых дескрипторов, что обрабатывается сборщиком мусора. Например, если приложение делает графическое окно, память выделяется для этого окна и освобождает как только на нее больше никто не ссылается. Inferno Reference API предоставляет утилиты ,демоны и набор модулей из библиотек безопасности. Алгоритмы и протоколы доступные в приложении на Limbo предоставляет высокий уровень безопасности, и могут легко быть доступны из других программ, работать по сети, и легко изменяться и заменяться, соответсвуя требованиям.

Интерпретируемый[]

Limbo - интерпретируемый язык, как Java. Компилятор Limbo генерирует машинно независимый бинарный образ, который выполняется на виртуальной машине Dis.

Приложения на Limbo могут интерпретироваться во время исполнения на виртуальной машине или компилироваться с помощью JIT-компилятора (производит оптимизацию байт-кода программы во время выполнения) в родной для данной машины код. У каждого из этих подходов есть свои преимущества и недостатки, так что программист может сам выбрать используемый метод исполнения.

В Limbo нет компоновщика. Совместимость типов проверяется во время компиляции. Исполняемый код динамически подгружается и компонуется во время исполнения.

Встроенная поддержка сети[]

Встроенный в Inferno протокол взаимодейтсвия Styx изолирует прикладного программиста от физической реализации сети. Это означает, что программы на Limbo не содержат специфичный для реализации поддержки конкретной сети код. Программист на Limbo использует набор функций для доступа к файлу независимо от того, локальный ли это файл или доступ к нему осуществляется посредствам сети. Поддержка для существующих, только появляющихся или будущих сетевых протоколов может быть добавлена в ОС Inferno и нет необходимости переписывать или перекомпилировать приложения на Limbo.

Встроенные многопоточность и межпоточное взаимодействие[]

Поддержка многозадачности и многопоточности встроена в язык Limbo. Программа может породить новый независимо планируемый поток исполнения из любой функции. Этот новый поток может управлять ресурсами, наследованными от родительского потока, такими как файловое пространство имен, открытые дескрипторы файлов и текущий рабочий каталог.

Межпоточное взаимодействие также встроено в язык. Limbo использует каналы в качестве интерфейса для передачи сообщений между потоками. Используя тип данных channel, потоки могут отправлять и принимать типизированные данные. Канал передает типизированные данные машиннонезависимым способом, поэтому сложные структуры данных (и даже сами каналы) могут передаваться между потоками Limbo или через файлы в пространстве имен, что позволяет обмениваться данными между различными машинами. Каналы предоставляют эффективный механизм для контроля согласованности действий программы и синхронизации процессов. Канал может быть использован для обмена данными или сигналов, контроллирующих выполнение определенных задач.

Масштабируемый[]

Через широкое использование модулей и комуникационных возможностей системы исполнения, приложения на Limbo могут быть динамически распределены между клиентом(-ами) и сервером(-ами).

Модель программирования[]

Модули Limbo - это самодостаточные единицы с хорошо определенным интерфейсом, содержащим функции и структуры данных определяемые модулем для доступности из другого модуля. Благодаря гибкости модульной структуре размер типичных модулей приложений Limbo мал, и они отлично адаптируемы.

Модульное программирование[]

Модуль Limbo:

  • имеет хорошо определенный интерфейс, который предоставляет доступ к модулю
  • имеет тип, определенный через этот интерфейс
  • отделяет интерфейс от реализации
  • логически группирует функции и данные

Типичное приложение Limbo является набором взаимодействующих модулей, содержащих данные и функции. Inferno Reference API это набор Limbo модулей, который иллюстрирует хороший стиль программирования в Limbo. Inferno API играет важную роль в программировании на Limbo, поскольку предоставляет доступ к возможностям операционной системы.

Модули Limbo имеют несколько общих черт с классами объектно-ориентированных языков и динамическими разделяемыми библиотеками, однако существенно отличаются и от тех и от других.

В отличии от библиотек, каждая Limbo-программа является модулем и динамически взаимодействует с другими зависимыми и независимыми модулями. В отличии от классов, Limbo-модули не имеют подклассов, наследования или полиморфизма.

Разделяемые, Динамические Модули[]

В Inferno Reference API перечислен набор модулей и приведен пример совместно используемых динамических модулей на Limbo. Дополнительные модули для специфических или обычных задач, если они нужны, могут быть созданы и распространены.

В Limbo модули могут загружаться вызывающей программой во время исполнения, а не во время компиляции. Они не часть скомпилированного выполняемого файла, а отдельные объекты. Преимущество в том, что модули могут быть вызваны и использованы неограниченным числом программ (другими модулями) без дублирования кода модуля (каждый загруженный модуль содержит свой сегмент данных). Модули также могут быть модифицированы без перекомпилированния вызывающих их приложений.

Модули не нужно держать на одной машине с вызывающей их программой. Программа может загрузить модули для каждой машины через сеть. Это неотъемлемое свойство пространства имен Inferno, и, поэтому не нужно дополнительного специфичного для данной архитектуры программирования когда модули созданы, загружены или используются.



Далее

Inferno-Programmers_Guide_Chapter_02

Advertisement