Как работает организация классов в категориях и пакетах в разных версиях Pharo?

Может кто-нибудь объяснить, как организация занятий в Pharo работает в разных версиях Pharo?

  • Все классы являются частью глобального Smalltalk (всегда было, похоже, так и останется?)
  • Классы могут иметь категорию, но это только вид тега? (всегда было, кажется, так и осталось? Но категории иногда каким-то образом сопоставляются с пакетами?)
  • Существуют разные виды пакетов в разных версиях Pharo.
    • MCPackages представляющие пакеты Monticello
    • PackageInfo
    • RPackage (Pharo 1.4)?

Кроме того, есть SystemNavigation, которая как-то помогает перемещаться по классам и методам, основанным на некоторых из вышеупомянутых конструкций?

2 ответа

Решение

Классы

Тот факт, что классы являются ключами в Smalltalk global - это деталь реализации. Пока существует единое глобальное пространство имен для имен классов, вполне вероятно, что реализация останется прежней.

Категории классов

Категория класса очень похожа на тег. Класс может быть только в одной категории за раз. Первоначально категория класса использовалась Browser для организации занятий в системе.

когда Monticello категория класса была перегружена, чтобы также указать членство в пакете Монтичелло MCPackage а также PackageInfo классы были созданы для управления этим отображением.

PackageInfo выполняет всю тяжелую работу: находит классы и свободные методы, которые принадлежат пакету.

MCPackage специфическая для Монтичелло обертка PackageInfo это добавляет протокол, который не обязательно подходит для более общего PackageInfo,

пакеты

Перегрузка категории класса для членства в пакете была изящной уловкой, чтобы облегчить принятие Monticello (существующие инструменты разработки не нужно учить Monticello), однако, это все еще уловка. Не говоря уже о том, что реализация PackageInfo был не очень эффективен.

RPackage был создан для решения проблем производительности PackageInfo и будет использоваться как часть следующего поколения инструментов разработки.

Обе реализации пакета будут продолжать существовать до PackageInfo может быть прекращено.

SystemNavigation

Как говорит Фрэнк,

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

Классы - это, по крайней мере, на данный момент, ключи в Smalltalk толковый словарь.

PackageInfo содержит информацию о группировке классов и расширений для других пакетов.

Пакет Monticello содержит развертываемый блок кода. Обычно один из них будет соответствовать PackageInfo пример. (Нажатие кнопки "+Package" в браузере Monticello создаст, например, один из них.) Пакет Monticello может содержать сценарии до и после загрузки, поэтому два класса выполняют отдельные, если связаны, функции.

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

Другие вопросы по тегам