Проект 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.