Вир. Столы, инструменты и узлы

Анекдот:

  • Сынок, а ну подойти сюда, от тебя несет просветлением. Ты что, опять ломал стереотипы и абстрагировался от суеты?
  • Нет, это пацаны ломали, а я рядом копался в обыденности.

Что же, настало время копаться в обыденности…

Снова та же картинка рабочего стола «Корпус»:

6-1
Дерево в правой части начинается (как мы уже понимаем) с контактной площадки («Корпус») и в изрядной степени состоит из контактных площадок (18 штук на этом рабочем столе).

Я называю контактные площадки столами, исходя из простого бытового понимания: стол – это то, на что можно что-то поставить. Кроме термина «стол» я часто использую термин «верстак» — для обозначения стола, на который поставлены инструменты. Аналогия тоже бытовая – поставили на стол (или прикрутили) инструменты (тиски, паяльник, …), получили верстак для выполнения определенной работы. Например, верстак программиста – это стол, на котором стоит монитор, мышь, клавиатура и кружка с (кофе, пивом, коньяком, нужное подчеркнуть), или другой, но похожий набор инструментов, который каждый программист расширяет и настраивает под себя.

Рабочий стол «Корпус» собран из 18 столов (как я уже сказал) и 36 инструментов:

  • Столы: «Корпус», «Верстак корпуса», «Список текстов», «Открыть» и т.д.
  • Инструмент – это всегда лист в дереве. Инструменты, которые видны на картинке: «Панель цветная», «Простая рамка». Инструменты делятся на два вида: просто инструменты и инструменты рисования. Об инструментах поговорим позже.

Два стола здесь особые – это столы «Список» и «Прокрутка», я называю их «Узлами», они явно выделяются своим видом в левой части.

Узел – это верстак (то есть стол с инструментами) взятый из репозитория. Его нельзя редактировать на месте, его можно поставить целиком и настроить. Устройство узла не видно в редакторе рабочего стола, увидеть его (и изменить) можно в редакторе узлов.

Семантика узлов «Список» и «Прокрутка» достаточно очевидно вытекает из их названий. «Список» — показывает список строк в окне, «Прокрутка» управляет полосами прокрутки. В работающей программе это выглядит так:

7-1

Здесь строк мало, все они влезают в окно, поэтому полосы прокрутки спрятаны.

Или так, если увеличить число строк (появляется вертикальная полоса прокрутки):

7-2

Узлы:

  • Настраиваются для взаимодействия (явно или неявно)
  • Взаимодействуют друг с другом (забегая вперед: взаимодействуют посредством некоторого «протокола»)
  • Независимы друг от друга (нет статических связей, разрабатываются независимо, изменяются независимо). Единственная зависимость: используют один и тот же «протокол»

Поясню независимость узлов на примерах:

  • Если узла «Прокрутка» не будет, «Список» будет работать (но не будет прокручиваться полосами прокрутки)
  • Узлу «Прокрутка» не важно, стоит ли «Список» или что-то еще, например, «Дерево» или «Текстовый редактор». Если есть узел, «умеющий» взаимодействовать с узлом «Прокрутка» (то есть отрабатывающий протокол взаимодействия), то полосы прокрутки будут правильно расставлены и будут правильно работать.

Вот теперь я могу перечислить иерархию компонент Вира:

  1. Рабочий стол
  2. Узел (используется при сборке рабочих столов и других узлов)
  3. Инструмент (используется при сборке узлов и рабочих столов)
  4. Словарная статья (используется при сборке инструментов)

и

0. Сервисы. Ставлю последним, потому что про них я еще не упоминал. Сервисы — это служебные узлы, обслуживающие программу целиком и часто имеющие серверную часть, например: обновление программы, статистика использования, логирование, отправка сообщения об ошибке программы разработчику и т.д.

В этой заметке я ввел много новых понятий: Стол, Инструмент, Узел, Сервис. Дальше буду подробнее рассказывать об этих «штуках» и о том, как они взаимодействуют.

Немного о Лексиконе

Если вспомнить классификацию форм программирования в Лексиконе Ершова (синтезирующее, сборочное, конкретизирующее), то

  • Разработка статей и инструментов – это синтезирующее программирование
  • Разработка узлов, рабочих столов, сервисов и программ целиком – сборочное программирование с элементами конкретизирующего

Конкретизирующее программирование в чистом виде, это, например, построение конечного автомата по его описанию или парсера по грамматике. В Вире конкретизирующее программирование может применятся для построения инструмента или узла (статическая конкретизация), или для настройки инструмента или узла во время работы (динамическая конкретизация).

Ершов описывал «плоскую» модель форм, в его описании все три формы программирования стоят на одном уровне. На мой взгляд, ведущим является сборочное программирование, а область действия синтезирующего и конкретизирующего – разработка компонент.

Опубликовано в

4 комментария


  1. Алексей, немного в сторону от вопросов непосредственно о Вире, Вы описываете некое приложение для анализа текстов. Можно узнать чуть подробнее, для чего предназначено само это приложение? Кем и как оно может использоваться?

    Ответить

    1. Анализатор делается в рамках вот этого проекта: http://synergetic-lab.ru/lexxa.htm

      Изначально приложение делалось для сбора статистики используемых слогов и слов в книгах для детей. Обучение выстроено так, что в начале ребенок обучается на простых и часто используемых слогах (словах), а далее на менее используемых и более сложных. Как выяснилось у наших педагогов/лингвистов такой статистикинет, пришлось сделать инструмент для сбора.

      По ходу работы и общения со специалистами выяснилось, что потребность в таком инструменте есть, а аналогов для русского языка нет.

      Например, одно из направлений развития — это программа, определяющая сложность текста. Для английского языка такой инструмент давно есть, более того, он обязательно используется при подготовке, например, инструкций.

      В январе будет доклад об Анализаторе на конференции: http://conference-spbu.ru/conference/35/note/

      Возможно, что он будет оформлен после этого, как коммерческий продукт.

      Ответить

  2. Понятно, спасибо!
    А я в Яндексе набрал «Что такое корпус текстов», там тоже всякие интересные ссылки вылезли, типа таких:
    http://ruscorpora.ru/
    https://habrahabr.ru/post/152799/
    Но возможно это немного о другом (тут речь обо всем языке, а не о конкретных книгах)

    Ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *