Графика в Inferno

    Если писать распределённые приложения в стиле файловых серверов, то с графикой в Inferno вы столкнётесь не раньше, чем захотите запустить графический отладчик для отладки своего многопоточного приложения.
    image

    Но если вы пишете приложение с UI, которое должно работать на встроенных устройствах или как плагин в браузере (кстати, сейчас вроде разрабатывают аналог существующего Inferno-плагина для IE под Firefox), то сразу возникнет вопрос «а как в Inferno писать графические приложения?».

    Tk


    Единственный способ работать с графикой в Inferno — это Tk. Причём поддержка Tk встроена в ядро (!) Inferno. Безусловно, для программирования графического UI проще Tk, наверное, ничего быть не может (я не беру сейчас дизайнеры UI в стиле Delphi, потому что хотя пользоваться ими легко и удобно, но вот код, который они генерируют, на порядок сложнее кода Tk).

    На Limbo/Tk в Inferno написаны абсолютно все графические приложения включая саму оконную систему wm (аналог X-Window).

    Но лично меня всегда расстраивал внешний вид Tk-приложений и я никогда не мог понять почему никто не сделает для Tk поддержку стилей/шкурок. :( Update: вообще-то поддержка стилей есть, просто альтернативные стили ещё никто не нарисовал.

    К сожалению, больше я ничего по этому вопросу добавить не могу, т.к. я с графикой в Inferno не работал — мне пока интереснее писать распределённые приложения и файловые сервера.

    Plumbing


    Ещё один интересный механизм в Inferno и Plan9 это Plumbing. В принципе он может использоваться и в текстовом режиме, но в основном он используется при работе в wm.

    Этот механизм обеспечивает возможность передачи сообщений между приложениями, причём юзер может этот процесс контролировать через конфиг-файл plumber-сервиса. К примеру, когда вы в файловом менеджере кликаете на файле, он просто передаёт имя этого файла в plumber и тот запускает приложение соответствующее этому файлу. Или при drag-n-drop, когда вы перетаскиваете из одного приложения объект в окно другого приложения то первое просто посылает через plumber сообщение второму с указанием какой именно объект нужно передать.

    Вот пример конфига plumber, для наглядности:
    # file URLs go to wm/charon
    kind is text
    data matches '[a-zA-Z0-9_/\-]+\.html?'
    data isfile $0
    data set file://localhost$file
    plumb to web
    plumb start /dis/charon.dis $data
    
    # .m files are looked up in /module and passed to wm/brutus
    kind is text
    data matches '([a-zA-Z0-9]+\.m)(:[0-9]+)?'
    data isfile     /module/$1
    data set        /module/$0
    plumb to edit
    plumb start /dis/wm/brutus.dis $file$2
    

    К сожалению, с ним я тоже особо не работал… подробнее про plumbing наверняка смогут рассказать люди, которые работали с Plan9. Не стесняйтесь постить в этот блог, он же коллективный…

    Я просто решил, что лучше об этих вещах упомянуть хоть так, чем никак. Дальше опять буду писать о вещах с которыми работал. :)
    Поделиться публикацией

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 17

      +2
      Ваша работоспособность удивляет:)
        +1
        Да какая, нафиг, работоспособность... :( Работоспособность это когда работаешь. А я развлекаюсь, потому что работой из-за этой жары никак заняться не могу.

        В общем, статьи все эти пишутся в ожидании вдохновения. Как только оно вернётся - я перестану писать ПРО Inferno и продолжу писать НА Inferno. :)
        +2
        Ещё раз, и придётся мне начать переводить этот самый плюмбинг :) В оригинальной статье разработчиков есть сравнения с аналогами в Windows и Mac OS :)
          0
          Угу, я как раз на это вас и провоцировал такой слабой статьёй. Мне тоже будет интересно что-нить новое на эту тему почитать. :)
            0
            Нормальная статья. Меня и на это не хватило пока :)
          0
          Кстати, запуск плюмбинга даже с настройками по умолчанию, сильно повышает рейтинг систем для пробующих их. Этакая изюминка - фича из юзерского интерейса аля Mac OS с мощностью UNIX shell...
            +1
            Хм. А это только мне плюмбинг DBUS напоминает? :)
              0
              Кто или что есть DBUS, Советник? :)
                  0
                  Ага. Оно. Только наоборот - D-Bus похож на Plan9 plumbing. У них, надо понимать, разница в возрасте чуть ли не в поколение...
                    0
                    Ну да. Концепция аналогичная.
              +1
                0
                Спасибо, интересный материал.
                0
                Я бы подкорректировал статью, Tk всё таки высокоуровневая библиотека UI в Inferno. Работа с графикой всё таки через draw(2)
                  0
                  Вот полный список модулей, которые реализованы в ядре: tk,srv,sys,draw,keyring,math,freetype,prefab,loader,bench.

                  Так что Tk, насколько я понимаю, это не просто обычная библиотека на Limbo, а один из нескольких модулей (draw,freetype,prefab) отвечающих за графику в ядре.
                  +1
                  Для начала я хотел бы выразить автору признательность за написание данного ряда статей - это очень хороший стартовый материал для людей, начинающих интересоваться прекрасными (и незаслуженно игнорируемыми) операционными системами Plan9 и Inferno. Хотя местами информация подается с неточностями и излишне эмоционально ;-).

                  Однако по поводу данной статьи я хотел бы внести ряд замечаний.

                  Tk не явлется единственным способом работы с графикой в Inferno. Это скорей высокоуровневый программный интерфейс для создания пользовательского интерфейса.
                  А для низкоуровневой работы с графикой используется draw(3). Через draw(3) Inferno рисуется все. Даже Tk работает через draw, хотя и более коротким путем - используя библиотеку libdraw, являющуюся частью ядра операционной системы. Tk действительно тоже входит в состав ядра (libtk) (насколько я понимаю это сделано для ускорения работы Tk - в целом Tk может быть полностью реализован как модуль на Limbo).

                  Что касается plumbing'a, то мне не вполне понятно, почему он попал в статью "Графика в Inferno". Plumbing - механизм обмена сообщениями между приложениями, никакого отношения к графике не имеет.

                  Желаю автору дальнейших творческих успехов.
                  С уважением,
                  santucco
                    0
                    Спасибо за уточнения!

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое