Проект Squeak приближается к своему 30-летию и выпустил новую версию системы — Squeak 6.1. Среди главных изменений релиза:
- новый древовидный браузер (tree browser), позволяющий навигацию по классам и категориям с помощью переработанных иерархических морфов;
- возвращение Objectland (также известного как «Миры Squeak»);
- ряд изменений и исправлений в ядре инфраструктуры для симуляции, разворачивания стека и планирования процессов, а также для изменения формы классов;
- разнообразные улучшения инструментов и пользовательского интерфейса для инспекции, отладки, профилирования и версионирования кода.
Ниже приведён подробный список изменений с примечаниями о крупных устаревших возможностях, известных проблемах и вопросах совместимости в конце документа.
С момента предыдущего релиза прошло 4 года, за это время в кодовую базу влилось более 1700 патчей с 9000+ изменений методов. Помимо документирования технических изменений, заметки о релизе освещают общую картину и влияние крупных доработок на систему в целом.
Релиз посвящён памяти Ванессы Фройденберг (1972–2025).
Подробные улучшения в языке, инструментах и окружении
GUI-фреймворки
Morphic (до Morphic-ct.2218/MorphicTests-ct.97)
- Крупная переработка древовидных морфов:
- Улучшены цвета и добавлены сочетания мыши и клавиатуры для навигации по деревьям.
- Пересмотрен режим фильтрации по вводу (type-to-filter), аналогичный спискам, с подсветкой найденных совпадений и возможностью поиска по отдельным столбцам через [TAB]. Добавлен настраиваемый режим фильтра — поиск в текущем выделении, среди всех видимых узлов или по всему дереву.
- Добавлена рекурсивная функция «найти»/«найти снова», доступная через [CMD] + [F]/[CMD] + [G].
- Добавлен флаг для автоматического разворачивания деревьев.
- Улучшена поддержка drag'n'drop — узлы автоматически разворачиваются при перетаскивании после секунды наведения.
- Различные улучшения стабильности и производительности компоновки, рендеринга и обработки событий в деревьях.
- В мире (world) теперь поддерживается перетаскивание ссылок на классы, категории системы и методов, а также полей инспектора и explorer'а для отображения их в новом окне/виджете.
- Для взаимодействия с мышью добавлены новые настройки времени двойного клика и порогов перетаскивания.
- В меню окон панели управления добавлен пункт для сворачивания окон. Функция «find workspace» стала удобнее — при выборе свёрнутого окна оно автоматически разворачивается. Переупорядочены и оформлены пункты меню помощи.
- Текстовые редакторы:
- Ссылки теперь подчёркиваются при наведении, клик и выделение текста через них стали удобнее.
- При заключении/снятии заключения выделения в одинарные/двойные кавычки вложенные кавычки теперь автоматически экранируются/разэкранируются.
- API Morphic: морфы теперь могут отказываться от отдельных событий гало (halo) и указывать текст всплывающей подсказки через блок вместо селектора.
- Построение меню:
- Добавлены новые утилиты для добавления групп элементов и временного переключения целей действий во время построения меню.
- #addList: теперь интерпретирует обратные слеши в help-кортежах как разрывы строк.
- Автоматически обрезаются висячие пустые строки между элементами меню.
- Переработаны отладочные меню нескольких морфов: добавлен быстрый доступ к профилировщику времени для кнопок, доступ к списку и содержимому дерева, а также ускорены и сделаны надёжнее команды «browse action» и «debug action».
- Соблюдается настройка «Open Tools Attached to Mouse Cursor» в Morph>>openAsTool.
- Множество доработок интерфейса и улучшений стабильности:
- Улучшена поддержка тем оформления для прогресс-баров, меню текстовых морфов и диалоговых окон.
- Улучшена поддержка высокого DPI для кнопок, областей прокрутки, слайдеров, меню, списков с множественным выбором, деревьев, теней, скретч-пада, тренажёра клавиатуры и других элементов.
- Улучшена многоязычная поддержка в разных местах системы.
- Исправлены недочёты, касающиеся меню глубины отображения мира, настроек часов, print-it в поисковой строке, оформления project view morph и подсчёта в transcript.
- Исправлена проблема при профилировании кода, из-за которой пользовательские события «съедались».
- Ряд исправлений компоновки, касающихся пропорциональных макетов, текстовых морфов, областей прокрутки и трансформационных морфов.
- Исправлены проблемы рендеринга трансформационных морфов, полигонов, списков с множественным выбором и деревьев.
- Исправлена прокрутка во вложенных областях прокрутки.
- В текстовых морфах улучшена стабильность выделения текста, доработаны отступы для пустых и бланковых строк.
- Исправлен «browse senders» для true, false и nil, добавлен недостающий доступ к привязкам workspace при accept-it, повышена надёжность истории редактора.
- Исправлены ошибки в построении текстовых контейнеров и преобразовании абзацев в текст.
- В списках исправлено автоматическое выделение перед перетаскиванием элемента.
- Исправлен некорректный вызов меню жёлтой кнопки на кнопках и списках.
- Исправлена ошибка при построении меню, зависевшая от неинициализированного состояния.
- Исправлено масштабирование цветных форм (ColorForm).
- Исправлена интроспекция обработчиков событий в мета-меню морфов.
- Улучшена совместимость между старыми и новыми balloon-морфами.
- Исправлена заметная ошибка, из-за которой (1) свёрнутые окна не применяли новую тему оформления и (2) возникала значительная утечка памяти в окнах.
- Исправлена проблема на macOS, при которой запуск VM с дополнительными аргументами командной строки или подключение внешних устройств приводило к ошибочному предупреждению «VM настроена как singleton-приложение».
- Повышена стабильность и обратная совместимость при загрузке морфов из файлов.
- Исправлены проблемы взаимной совместимости и конкурентности с MVC.
- Повышена надёжность гало (halo).
- Улучшена производительность крупных древовидных виджетов, трансформационных морфов и анимированных GIF.
- Разнообразные чистки кода и улучшения документации для событий пользовательского ввода, атрибутов редактора и других частей системы.
MorphicExtras (до MorphicExtras-ct.360)
- Возвращён Objectland — реконструкция знаменитых «Миров Squeak» из 2003 года, представляющая собой красочную коллекцию примеров, демонстрирующих разнообразные возможности Squeak. Возвращён классический пример гоночного автомобиля из Etoys, добавлено несколько новых примеров.
- После 18 лет безупречно чистого Squeak возвращён и обновлён знаменитый BlobMorph.
- Для веб-камер добавлена опция зеркального отображения, расширен интерфейс для двойной буферизации. Улучшены интерфейс и стабильность морфа веб-камеры.
- Улучшено меню инструментов проигрывателя партитур (score player).
- Исправлена настройка «preserve trash», повышена надёжность морфа пианино-клавиатуры.
- Улучшена поддержка высокого DPI для инструмента «objects tool» и нескольких его инструментов — регистраторов событий, проигрывателей партитур, элементов управления записью и клавиатуры пианино, а также нескольких морфов, связанных с Etoys.
Etoys (до EToys-ct.532)
- Восстановлен и переработан учебник по рисованию и созданию скриптов в Etoys.
- В FreeCell добавлена кнопка отмены действия.
- Улучшена индикация состояния в Тетрисе.
- Улучшено меню инструментов midi-морфа.
- Повышена надёжность галереи игроков, анализатора спектра и midi-морфа. Исправлено изменение заголовка игрока.
- Чистки и исправления для карточек и стеков.
- Улучшена поддержка высокого DPI для иконок Etoys, тайловых морфов и редакторов скриптов, всех игр, инструмента «objects tool», анализатора спектра, списков файлов, часов и календарей.
- Небольшое ускорение работы Kedama и игроков.
- Ряд чисток и рефакторингов, повышающих модульность и устраняющих непреднамеренные зависимости других пакетов от Etoys.
ST80 (до ST80-mt.311)
- В меню мира добавлен пункт закрытия.
- Улучшена поддержка высокого DPI для системных представлений (views).
- Добавлен View>>imageForm для снятия скриншота представления и отображения его в инспекторах.
- Добавлено сочетание клавиш редактора [CMD] + [SHIFT] + [D] для «debug it» (уже существует в Morphic).
- Разнообразные исправления и улучшения стабильности:
- Обеспечено подтверждающее диалоговое окно перед закрытием текущего MVC-проекта.
- Устранён неожиданный запрос инициалов автора при первом открытии меню мира ST80.
- Устранена проблема с устаревшими отложенными действиями в пустом MVC-мире, из-за которой аварийные отладчики появлялись только после нажатия кнопки мыши.
- В текстовых редакторах исправлены форматирование и порождение (spawn) при отсутствии совместимой модели. Корректно обрабатывается nil-выделение, предоставляемое моделью. Исправлена проблема с недавно введёнными сочетаниями клавиш.
- Исправлены диалоги выбора папки.
CommandLine (до CommandLine-eem.27)
- Исправлена настройка «Save snapshot of image on failure».
- Улучшена поддержка UIManager для различных файловых диалогов, диалогов выбора шрифта, подтверждений и запросов.
- Для интерактивных диалоговых запросов улучшено сообщение об ошибке перед завершением работы.
Программирование и инструменты
Tools (до Tools-mt.1366/ToolsTests-ct.137)
- Введён новый древовидный браузер, отображающий системные категории, классы и категории сообщений в иерархических панелях и интегрирующий пакеты Monticello. Добавлено пять новых настроек для конфигурации его внешнего вида.
- Переработан drag'n'drop для древовидных и традиционных браузеров — поддерживаются все значимые комбинации панелей для копирования или перемещения классов, методов и категорий.
- Добавлена поддержка двойного клика для иерархических древовидных браузеров, переключающая центральный класс. Это особенно удобно для иерархий с множественным наследованием через traits.
- В меню панели классов добавлены новые пункты для создания нового класса или trait.
- В меню категории сообщений добавлены пункты для просмотра всех связанных категорий сообщений в системе.
- В панели аннотаций определений классов добавлен быстрый доступ для чтения полного комментария класса.
- Упрощена точка расширения для регистрации пользовательских браузеров в качестве иерархических.
- Улучшена поддержка множественных окружений для всех видов браузеров и наборов сообщений.
- В инструменте Message Names теперь показываются определение, комментарий и иерархия для результатов по классам.
- Расширена поддержка кастомных полей в инспекторе:
- Объекты теперь могут добавлять собственные поля инспектора и пункты меню.
- Добавлено новое мета-меню (shift) для инспекции полей или просмотра/отладки их методов доступа.
- Добавлен InspectorField>>#printBlock: для настройки отображения поля независимо от его базового (инспектируемого) значения.
- При инспекции больших коллекций теперь можно отключить обрезку, чтобы показать все элементы.
- Инспекция и отладка прозрачных proxy-объектов и объектов без хеша стали надёжнее — система избегает отправки им сообщений, на которые они могут реагировать медленно или катастрофически.
- Отладчики:
- Добавлена команда «send until…» для точного поиска условия во вложенных отправках сообщений.
- Улучшена команда «run to here» для достижения выражений внутри блоков.
- Улучшена обработка ошибок для некорректных выражений run until/send until. Для «return entered value» используется правильный evaluatorClass получателя.
- В меню списка стека добавлена опция «select home» для поиска домашних контекстов (возможно, глубоко вложенных) блоков.
- Сигнализируемое исключение и приостановленный процесс стали доступны в отладчике, когда не выбран ни один контекстный фрейм.
- Добавлен режим байткодов в отладчик для просмотра и пошагового прохождения отдельных инструкций VM метода (аналогично режиму байткодов в браузерах). Добавлена новая кнопка «simulate» для отладки того, как метациркулярный интерпретатор Squeak (он же симулятор контекста) обрабатывает следующий байткод. Новый режим доступен через меню окна > «what to show…» или, если включены дополнительные кнопки отладчика, через кнопку «source» над панелью кода.
- Разнообразные чистки и улучшения для настройки классов инспектора.
- В основную ветку принят AndreasSystemProfiler, ранее размещавшийся в репозитории VMMaker. Улучшены формат отчёта, надёжность подсчёта примитивов и документация.
- В workspace добавлена опция «load contents from file…» в меню окна.
- Улучшения восстановления изменений: улучшен разбор определений классов, удалений методов, рекатегоризаций и прочего. Добавлены и переработаны пункты меню для выбора всех изменений заданного типа или фильтрации по текущему выбранному типу/селектору.
- Добавлены утилиты Process>>#browse и Context>>#tempNamed:[put:].
- Добавлены файловые сервисы для просмотра сжатых архивов csz и stz.
- В обрезанных списках файлов добавлена ссылка для чтения файла целиком.
- Улучшена компоновка браузеров кодовых точек для однобайтовых текстовых конвертеров.
- Разнообразные улучшения интерфейса и исправления ошибок:
- Исправления для браузеров:
- Исправлена несогласованность сочетаний клавиш в браузерах с одной категорией.
- Повышена надёжность браузеров при определении traits.
- Исправлена ошибка в иерархических браузерах, порождавшая новый избыточный браузер при переопределении выбранного класса.
- Исправлен браузер панели пакетов — теперь он действительно использует организатор пакетов вместо разбора списка системных категорий. Если категория не выбрана, показываются все классы пакета.
- Устранено дублирование меню в браузерах панели пакетов.
- Исправлены недостающие обновления интерфейса и class-side do-it в браузерах панели пакетов и браузерах зависимостей.
- Исправлены пропорции интерфейса и оформление определений и комментариев классов в браузерах содержимого файлов.
- Обеспечена последовательная сортировка классов в браузерах списков классов.
- Исправления для трассировки сообщений:
- Обеспечены согласованные метки методов в трассировках сообщений.
- Повышена надёжность и улучшены диалоги при просмотре отправителей/реализующих методов.
- Незначительные исправления строк интерфейса.
- Исправления для Message Names:
- Исправлен spawn ([CMD] + [O]) в Message Names.
- Улучшения для браузеров версий:
- Отображаются штамп и категория выбранной версии, а не только текущей.
- При file out метода добавляется недостающее расширение файла.
- Исправления для списков изменений:
- Исправлено логирование изменений для методов, перекомпилированных из браузера без выбора существующей категории.
- Повышена надёжность сканирования при восстановлении изменений.
- Повышена стабильность функции «remove older method versions».
- Исправления для инспекторов и explorer'ов:
- Исправлена инспекция форм (Form) в неродных глубинах отображения.
- Исправлены вложенные временные переменные при инспекции блоков.
- Исправлена инспекция словарей с неsохраняемыми ключами.
- Добавлено оформление thisContext в контекстных инспекторах в отладчиках.
- Исправлено сочетание клавиш для открытия Etoys viewer ([CMD] + [V]).
- Повышена надёжность при замене инспектируемого объекта в инспекторе.
- Повышена надёжность «copy expression» для выбранного поля.
- Исправлена обработка несохранённых изменений в инспекторах и explorer'ах с помощью нового хука #okToChange:.
- Согласованы метки object explorer с метками в дереве.
- Исправления для отладчика:
- Исправлен пошаговый проход через сообщения прерывания, такие как #mustBeBoolean, и перезапуск с примитивных методов, которые больше не завершаются ошибкой, с соответствующим обновлением заголовка окна. Улучшены тесты.
- Исправлена подсветка следующего выражения для конструкций to:do: и присваиваний.
- Исправлены устаревшие контекстные переменные после перезапуска верхнего контекста.
- Исправлена регрессия в runUntil при нажатии shift.
- Исправлено «return entered value» для корректного обнаружения необработанных ошибок во время разворачивания стека.
- При перекомпиляции метода в отладчике теперь разрешено продолжение при отсутствии активного домашнего метода. Исправлена ошибка при отмене перекомпиляции.
- Повышена стабильность и актуальность списка стека.
- Разнообразные чистки кода.
- Исправления для браузеров:
Материал подробно документирует более 1700 патчей и 9000 изменений методов, накопившихся за четыре года разработки — от переработки древовидных морфов и возвращения Objectland до множества исправлений в отладчиках, инспекторах и браузерах кода. Полный список изменений, известные проблемы и заметки о совместимости доступны в оригинальных release notes на squeak.org.