Glamorous Toolkit
Glamorous Toolkit
См. также: Pharo · Morphic · История — Moose и GT · ООП в Smalltalk · Справочник §20 · gtoolkit.com
Что такое Glamorous Toolkit?
Glamorous Toolkit (GT) — среда moldable development ("формуемой разработки") для Pharo. Это не замена языка, а надстройка над образом: набор инструментов, которые можно перестраивать под предметную область, а не только смотреть универсальный список методов в Browser.
Определения:
- Moldable development — подход, при котором инструмент подстраивают под данные, а не данные под инструмент. JSON, git-log, AST, профилировка — у каждого типа могут быть свои представления (таблица, граф, timeline).
- View (представление) — Smalltalk-метод, строящий UI для конкретного класса объектов; вкладка в инспекторе.
- Lepiter — движок живых документов: текст + исполняемые snippets + встроенные views.
- feenk — компания и сообщество вокруг GT (feenk.com); открытый код, лицензия MIT.
GT не заменяет Pharo: обычно это отдельный дистрибутив "Glamorous Toolkit" или загрузка большого пакета в существующий Pharo-образ.
Крестики-нолики, SmallPong и SmallDesktop используют классический Morphic в обычном Pharo. GT для них не обязателен.
Moldable development — суть подхода
Классическая IDE показывает один и тот же System Browser для любого кода: дерево классов, список методов, текст. Moldable подход (Андрей Реге, Оскар Ниерстраз, команда feenk) добавляет правило:
Удобное представление данных — часть задачи разработки, а не "отдельный скрипт в Excel".
Четыре опоры:
- Domain (предмет) — что вы изучаете (логи, API, Pharo-пакет, CSV).
- View — как это показать (таблица ошибок, граф вызовов, карта классов).
- Snippet — исполняемый фрагмент в документе; результат сразу inspect.
- Document (Lepiter) — narrative + snippets + views; замена статичному Confluence для исследования.
Пример мышления: вместо "открой .log в Notepad" — "создай view, который парсит строки уровня ERROR и рисует timeline за последний час" — за минуты, в той же image, с сохранением в Git.
Сравнение с философией Smalltalk: GT доводит идею "IDE = программа" до настраиваемых инструментов под каждый тип данных.
Основные элементы GT
| Элемент | Назначение |
|---|---|
| GtInspector | Инспектор с несколькими views на один объект |
| GtCoder | Редактор кода, связанный с документами и контекстом |
| Lepiter | Живые документы (разметка + snippets + embed) |
| GtPager | Навигация "стопкой" карточек; контекст не теряется |
| Spotter | Быстный поиск классов, методов, файлов, Lepiter-страниц |
| Remote | Подключение к другим образам / headless Pharo |
View объявляют методом с pragma <gtView>. GT находит все такие методы для класса объекта и показывает вкладки:
gtViewProcessesFor: aView
<gtView>
^ aView list
title: 'Processes';
items: [ Processor activeProcess class allInstances ];
itemText: [ :each | each printString ]
Разбор:
| Часть | Смысл |
|---|---|
gtViewProcessesFor: aView | Имя по соглашению gtView…For:; аргумент — строитель представления |
<gtView> | Pragma — метаданные метода; GT сканирует их при inspect |
aView list | Fluent API GT: построить список |
title: | Заголовок вкладки |
items: [ … ] | Блок, возвращающий коллекцию объектов |
| `itemText: [ :each | … ]` |
Имена API уточняйте по версии GT — концепция стабильна: один объект → много вкладок-представлений.
GT и классические инструменты Pharo
| Classic Pharo | Glamorous Toolkit | |
|---|---|---|
| Browser | Nautilus / OmniBrowser | GtCoder + контекст документа |
| Inspector | Иерархия полей | Много custom views |
| Документация | Комментарии к классам, внешний wiki | Lepiter внутри image |
| Фокус | Написание приложений | Понимание систем и данных |
| Старт обучения | Первая программа | После базы Pharo и ООП |
Когда GT оправдан:
- ревью чужого Pharo-кода или большого legacy-модуля;
- разбор JSON, логов, профилей;
- техническое письмо с живыми примерами (Lepiter-учебник);
- работа с Moose (метрики, dependency graphs).
Когда GT не нужен:
- первый месяц Smalltalk;
- Morphic-практикумы (TTT, SmallPong, SmallDesktop);
- простая учебная игра без анализа code base.
Связь с Moose
Moose — платформа анализа программ: метamodels, метрики, графы зависимостей, визуализация legacy. GT и Moose родственны по духу — оба из экосистемы Software Composition Group (Университет Берн).
| Moose | GT |
|---|---|
| Метamodels, метрики, query | Универсальная оболочка просмотра |
| Фокус на software analysis | Любые данные + custom views |
| Часто используют вместе | Moose даёт модель, GT — инспектор и документы |
В истории Smalltalk оба названы примером "инструментов для создания инструментов" в Pharo.
Установка
Вариант A — дистрибутив GT (рекомендуется для знакомства)
- gtoolkit.com/download
- Скачайте образ Glamorous Toolkit для вашей ОС.
- Запустите — внутри Pharo + GT-пакеты.
Вариант B — загрузка в существующий Pharo
Скрипт Metacello на сайте feenk; версия GT должна совпадать с версией Pharo:
Metacello new
baseline: 'GToolkit';
repository: 'github://feenkcom/gtoolkit:main';
load
Перед загрузкой — резервная копия .image; GT — крупный стек, откат без копии долгий.
Lepiter — живые документы
Lepiter — формат страниц в GT. Отличие от Markdown в репозитории:
- страница живая — snippets выполняются в image;
- embedded views — граф, таблица, карта классов в теле текста;
- страницы версионируются с кодом (Git + Tonel), как и обычные классы Pharo.
Типичный workflow исследователя:
- Создать Lepiter-страницу "Разбор пакета MyApp".
- Snippet:
PackageOrganizer default packageNamed: 'MyApp'. - Inspect результат → добавить view "Зависимости", "Длинные методы".
- Поделиться страницей — коллега открывает тот же интерактив в GT.
Это ближе к live coding, чем к статичной wiki: документ не отстаёт от кода, если snippets обновляют.
Примеры применения
| Задача | Как помогает GT |
|---|---|
| Ревью Pharo-кода | Views по классам, senders, implementors, тестам |
| JSON / API-ответ | Custom table/tree view |
| Обучение команды | Lepiter-учебник со snippets |
| DevOps / логи | Парсинг + timeline view |
| Доменное моделирование | Документ + объекты + inspect |
Для рефакторинга и шаблонов в классическом смысле по-прежнему полезны Browser и рекомендации по стилю; GT дополняет их исследованием и визуализацией.
GT и Morphic
GT рисует UI инструментов через собственный стек (Bloc / Skia в новых версиях). Это не учебный Morphic из практикумов раздела.
| Classic Pharo World | GT |
|---|---|
World, Morph, halos | GtInspector, GtPager, Lepiter |
| SmallDesktop | Не требует GT |
| Отладка Morphic-игр | Отдельный Pharo-образ без GT |
Если вы проходите SmallPong и не видите World — возможно, открыт GT-дистрибутив; для Morphic-уроков используйте чистый Pharo с pharo.org.
Ограничения
- Размер — полный GT заметно тяжелее минимального Pharo.
- Версии — таблица совместимости GT ↔ Pharo на сайте feenk.
- Рынок — ниша; сильнее в consulting и R&D, чем в mass hiring.
- Порог — moldable thinking нужно привыкнуть после классического Browser.
- Игры и GUI-курсы — GT не заменяет Morphic и не связан с Raylib.
Когда изучать GT
| Ситуация | Рекомендация |
|---|---|
| Первый месяц Smalltalk | Pharo, 11.md, Morphic |
| Анализ большой code base | GT + Moose |
| Техписательство / R&D | Lepiter |
| Учебная игра на Morphic | GT не нужен |
| Анализ логов production | GT после базы Pharo |
Ресурсы
- gtoolkit.com — документация, видео, книга Moldable Development.
- book.gtoolkit.com — туториалы Lepiter.
- База Pharo: Pharo, §20 справочника.
- Контекст live systems: философия Smalltalk, история.
Что дальше
| Шаг | Действие |
|---|---|
| 1 | Закрыть базовый маршрут: программа → ООП → один Morphic-практикум |
| 2 | Установить GT, пройти встроенный GT Tour |
| 3 | Lepiter-страница: inspect TTTGame из крестиков-ноликов, view "Состояние поля" |
| 4 | При интересе к анализу кода — связка GT + Moose |