Inferno Programmer's Guide / Руководство программиста по ОС Inferno: Chapter 3 - Limbo Programming
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Программирование на Limbo rapidfx 30.04.09 в 09:23 |
|
|
Обзор rapidfx 30.04.09 в 09:23 |
||
|
В этой главе делается обзор возможностей, которые важны как для Limbo-программирования, так и в программном окружении Inferno.
rapidfx 30.04.09 в 09:26 |
||
|
Модули rapidfx 30.04.09 в 09:26 |
||
|
В Limbo модули - основной строительный материал для программ. Про каждую программу можно сказать - это "модуль".
wuffur 30.04.09 в 13:38 |
||
|
Интерфейс и реализация j1m 30.04.09 в 09:41 |
||
|
Limbo-модули могут сочетать интерфейс и реализацию. Программа Greet (приветствие!) показанная в программном листинге 2-1 на странице 2-2 - пример этого. В данном случае только функция init объявлена в объявлении модуля и поэтому, ей можно пользоваться вне ее.
wuffur 30.04.09 в 13:48 |
||
|
Inferno Reference API иллюстрирует мощь этого на Limbo. Функциональность групп программного интерфейса (API) описывается в небольших подгружаемых модулях. У них хорошо определен интерфейс, который содержится в файлах интерфейса модуля. Исполняемый код содержится в файле реализации. wuffur 30.04.09 в 13:53 Inferno Reference API иллюстрирует мощь этого в Limbo. API группирует функциональность в небольшие загружаемые модули, с хорошо определенными интерфейсами содержащимися в файлах-интерфейсах модулей. Исполняемый код содержится в файле реализации rapidfx 04.05.09 в 18:21 |
||
|
Файл интерфейса модуля j1m 30.04.09 в 10:27 |
||
|
Интерфейс public доступа к модулю содержится в файле его интерфейса, они по соглашению с имеют расширение ".m". Это аналогично заголовочным файлам на C/C++ (.h).
wuffur 30.04.09 в 14:12 |
||
|
1 Greet: module { j1m 30.04.09 в 10:24 |
||
|
Это объявление одной функции - init. rapidfx 30.04.09 в 17:13 |
+2 | |
|
1 Rand: module wuffur 30.04.09 в 14:24 |
||
|
Здесь определена строковая константа PATH, в которой содержится путь к скомпилированному файлу реализации и трем функция init, rand и big rand. Строковая константа PATH - соглашение в Limbo-модулях. wuffur 30.04.09 в 14:27 |
||
|
Файл реализации j1m 30.04.09 в 10:25 |
||
|
Реализация модуля содержится в его файле реализации, который по соглашению находится в файле с расширением .b. Это исполняемый оператор программы. Также он может называться файлом с исходниками. Пример файлов реализации находится в ветке /appl.
wuffur 30.04.09 в 14:29 |
||
|
Файл реализации содержит определение функции, которое объявлено в файле интерфейса модуля.
wuffur 30.04.09 в 14:43 |
||
|
1 implement Rand;
j1m 30.04.09 в 10:26 |
||
|
В этом файле находятся определяние трех public членов, init, rand и big rand, также как и private члены, такие как rsalt или MASK. wuffur 30.04.09 в 14:53 |
||
|
Исполняемый файл j1m 30.04.09 в 10:27 |
||
|
Скомпилированный файл реализации - это исполняемый файл с расширением (.dis) по соглашению находится в директории /dis. wuffur 30.04.09 в 14:57 |
||
|
Структура модуля j1m 30.04.09 в 10:27 |
||
|
Основная структура Limbo-модулей включает следующее: wuffur 30.04.09 в 14:59 |
||
|
Секция Implementation j1m 30.04.09 в 10:28 |
||
|
Секция реализации внутри Limbo-модуля определяет, какой модуль реализуется. Вначале находится оператор implement, как здесь:
wuffur 30.04.09 в 15:05 |
||
|
Объявление интерфейса модуля j1m 30.04.09 в 10:28 |
||
|
Объявление интерфейса модуля определяет public доступную часть модули. Она включает все public типы и функции. Если у модуля есть отдельный файл модуль интерфейса - .m файл, то он содержит объяление этого интерфейса. Например:
wuffur 30.04.09 в 15:12 |
||
|
Здесь говориться, что Greet - модуль. Интерфейс public доступа происходит через функцию init, которая принимает два аргумента. wuffur 30.04.09 в 15:28 |
||
|
Определение функций j1m 30.04.09 в 10:29 |
||
|
Определение функции которая объявлена в модуле интерфейса и в файле реализации. В не зависимости, является ли модуль интерфейса отдельным файлом, или он находится в файле реальзации, определение функции остается тем же самым. rapidfx 30.04.09 в 17:25 |
+1 | |
|
init(ctxt: ref Draw->context, argv: list of string) { j1m 30.04.09 в 10:30 |
||
|
Использование модулей j1m 30.04.09 в 10:30 |
||
|
Данные модуля и члены функции доступные путем включения файла модуля-интерфейса и загрузки файла-реализации в код программы Limbo. rapidfx 30.04.09 в 17:28 |
||
|
Оператор include j1m 30.04.09 в 10:30 |
||
|
Как упоминалось ранее, в Limbo, слово include является зарегистрированным, а не директивой препроцессора. Выражение include указывает файл модуля-интерфейса (.m) который вы хотите включить в свою программу. Это необходимо сделать перед тем как вы загрузите или воспользуетесь данными этого модуля или функциями-членами . rapidfx 30.04.09 в 17:36 |
||
|
Оператор load j1m 30.04.09 в 10:30 |
||
|
Перед вызовом функций модуля приложение должно загрузить модуль.
wuffur 30.04.09 в 20:19 |
||
|
Как показано в модулях из Inferno Reference API, соглашение об объявлении константы PATH находится в модуле, который содержит явный путь к файлу реализации. (Более подробно об Inferno Reference API смотрите Inferno Reference Manual)
wuffur 01.05.09 в 04:44 |
||
|
sys := load Sys Sys->PATH;
wuffur 01.05.09 в 19:16 |
||
|
Оператор import j1m 30.04.09 в 10:31 |
||
|
Это необходимо для уточнения имен модуля соответствующим дескриптором модуля.
wuffur 01.05.09 в 19:27 |
+1 | |
|
По соглашению оператор statement следует за оператором include или оператором объявления дескриптора. Так у импортируемых данных или функции внутри модуля область видимости становится глобальной (доступны все функциям внутри модуля). Например, мы можем изменить программу Greet для импорта функции print.
wuffur 01.05.09 в 19:31 |
||
|
1 implement command;
j1m 30.04.09 в 10:31 |
||
|
На 7ой строке, оператор import следует за объявлением дескриптора модуля Sys (строка 6). Далее функция может быть доступна как локальная, без квалификатора дескриптора модуля (строки 16 и 18). wuffur 01.05.09 в 19:37 |
||
|
Ввод-вывод (I/O)
wuffur 01.05.09 в 19:53 |
||
|
Другой модуль, буферизованный модуль ввода-вывода (bufio.m), предоставлеят фнкции буферизованного ввода-вывода которые похожи на функции стандарта ANSI C.
wuffur 01.05.09 в 20:02 |
||
|
Базовый ввод-вывод j1m 30.04.09 в 10:31 |
||
|
Базовый ввод-вывод - это стандартное средство ввода-вывода на Limbo. Существует восемь основных функций из модуля Sys показанных в таблице 3-1. wuffur 01.05.09 в 20:05 |
||
|
create Создание файла
wuffur 01.05.09 в 20:09 |
||
|
Файловые дескрипторы j1m 30.04.09 в 10:32 |
