Инструменты пользователя

Инструменты сайта


bb:lessons:first-module

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
bb:lessons:first-module [2014/11/14 19:49]
admin
bb:lessons:first-module [2020/10/29 07:08] (текущий)
Строка 1: Строка 1:
 ====== Урок первый. Модуль, компиляция, вывод в журнал ====== ====== Урок первый. Модуль, компиляция, вывод в журнал ======
 +
 +[[bb:lessons|]]
  
 В этом уроке вы узнаете: как выглядит строительный блок компонентного каркаса, что происходит при компиляции и посмотрите, как делается вывод информации в бортовой журнал.  В этом уроке вы узнаете: как выглядит строительный блок компонентного каркаса, что происходит при компиляции и посмотрите, как делается вывод информации в бортовой журнал. 
Строка 23: Строка 25:
 ===== Компиляция ===== ===== Компиляция =====
  
-Откройте новый документ Ctrl+N, наберите в нём текст пустого модуля и нажмите Ctrl+K (или меню //Dev, Compile//):+Откройте новый документ //Ctrl+N//, наберите в нём текст пустого модуля и скомпилируйте нажатием //Ctrl+K// (или меню //Dev, Compile//):
 {{:bb:lessons:bb_first_compile.png?nolink |}} {{:bb:lessons:bb_first_compile.png?nolink |}}
  
  
-Как видите, Блэкбокс запрашивает разрешения на создание подкаталога My\Sym. Далее он точно так же спросит про подкаталог My\Code. И этот момент надо рассмотреть поподробнее.+Как видите, Блэкбокс запрашивает разрешения на создание подкаталога //My\Sym//. Далее он точно так же спросит про подкаталог //My\Code//. И этот момент надо рассмотреть подробнее.
  
-Имя нашего модуля **MyModule**. Это двойное имя, которое содержит название подсистемы //My// и название модуля в ней, //Module//. Внутри этой подсистемы Блэкбокс создаст ещё две папки, одна из которых Sym (для символьных файлов), а другая Code (для кодовых).+Имя нашего модуля **MyModule**. Это двойное имя, которое содержит название подсистемы //My// и название модуля в ней, //Module//. Внутри этой подсистемы Блэкбокс создаст ещё две папки, одна из которых //Sym// (для символьных файлов), а другая //Code// (для кодовых). Подробее о подсистемах вы можете узнать в [[http://oberoncore.ru/_media/blackbox/tut-tot.ru.pdf|учебнике]]. 
 + 
 +Сохранять документы с исходными текстами следует в папке //Mod// вашей подсистемы, эту папку придётся создать вручную
  
 Символьные файлы нужны только для совместной компиляции разных модулей. Кодовые, они же исполняемые файлы, нужны только для загрузки и выполнения. После создания символьного и кодового файлов нашего модуля, компилятор завершит работу и выведет сообщение в журнал. Символьные файлы нужны только для совместной компиляции разных модулей. Кодовые, они же исполняемые файлы, нужны только для загрузки и выполнения. После создания символьного и кодового файлов нашего модуля, компилятор завершит работу и выведет сообщение в журнал.
Строка 41: Строка 45:
  
 А второй маркер стоит после непонятного слова. Компилятор не понимает, что это слово означает, потому что его словарь не содержит этого слова. Компилятор понимает только специальные символы и особые зарезервированные слова (всё, что понимает компилятор, перечислено в Сообщении об Языке, см. меню //Help, Contents//, раздел //Component Pascal, Language Report//, пункт //3. Vocabulary and Representation//) А второй маркер стоит после непонятного слова. Компилятор не понимает, что это слово означает, потому что его словарь не содержит этого слова. Компилятор понимает только специальные символы и особые зарезервированные слова (всё, что понимает компилятор, перечислено в Сообщении об Языке, см. меню //Help, Contents//, раздел //Component Pascal, Language Report//, пункт //3. Vocabulary and Representation//)
 +===== Вывод в журнал =====
 +
 +Попробуем теперь написать небольшую программу, выводящую в журнал приветствие "Hello, world!".
 +
 +<code>MODULE MyModule;
 +
 + IMPORT Log;
 +
 + PROCEDURE Do*;
 + BEGIN
 +  Log.String('Hello, world!'); Log.Ln
 + END Do;
 +
 +END MyModule.</code>
 +
 +Итак, что же тут написано?
 +
 +Со словом MODULE в первой строчке мы уже знакомы.
 +На следующей строчке слово IMPORT объявляет блок импорта других модулей, а слово Log означает, что мы будем использовать возможности модуля Log. Это то самое место, где кирпичики Лего соединяются, чтобы работать вместе.
 +
 +Дальше идёт объявление процедуры. Звёздочка после имени Do означает, что эта процедура будет видна другим модулям. Между словами-скобками BEGIN и END находится тело процедуры (отметьте, что после END продублировано имя процедуры, это нужно для чёткой границы между скобками процедуры и скобками других операторов).
 +
 +Ну а внутри процедуры мы видим последовательные вызовы процедур String и Ln модуля Log. Обратите внимание, что перед именем каждой процедуры стоит квалификатор модуля Log, это жёсткое правило языка Компонентный Паскаль (и, в общем, всех Оберонов). Благодаря обязательному квалификатору вы никогда не запутаетесь, откуда вызвана та или иная процедура или переменная.
 +
 +===== Команды =====
 +
 +В нашем модуле объявлена процедура Do. Она ещё и доступна для других модулей, а это значит, что мы можем вызвать эту процедуру, - как будто отдать команду Блэкбоксу, - в любой момент.
 +
 +{{:bb:lessons:bb_first_do.png?nolink |}}
 +В любом месте любого текстового документа (хоть в журнале, хоть в исходнике нашего модуля) поставьте коммандер с помощью кнопок //Ctrl+Q// или меню //Tools, Insert Commander//. После коммандера (он выглядит как чёрный кружок с восклицательным знаком внутри) напишите команду //MyModule.Do//
 +
 +Далее, надо откомпилировать наш модуль (в журнале появится новая запись об обнаруженной процедуре Do. В дальнейшем, компилируйте модуль с выгрузкой (меню Dev, Compile and Unload), потому что Блэкбокс не выгружает просто так запущенные модули.
 +
 +После компиляции и выгрузки, кликаем по коммандеру. Блэкбокс загрузит наш модуль и выполнит его процедуру Do. А она выведет в журнал приветствие.
 +
 +В заключение стоит отметить, что возможности модуля //Log// всегда можно изучить, открыв его интерфейс. Для этого выделите слово //Log// и скомандуйте в меню //Info, Client Interface// или правой кнопкой мыши (ПКМ) и во всплывшем меню выберите //Interface//.
 +
  
 +[[bb:lessons:second-basictypes|]]
bb/lessons/first-module.1415983769.txt.gz · Последнее изменение: 2020/10/29 07:08 (внешнее изменение)