Фэндом

Smalltalk по-русски

Где в VisualWorks хранятся исходники

239статей на
этой вики
Добавить новую страницу
Обсуждение0 Поделиться

Этот текст не претендует на полноту или подробность. Его назначение -- описать управление исходным кодом в VW на уровне, достаточном для понимания большинства ситуаций.

Первый факт: для выполнения кода исходники не нужны. Например, когда вы в отладчике выделяете код и говорите говорите DebugIt, то создаваемый для выполнения этого кода метод (для выполнения кода обязательно создаются методы, а вы как думали?) не имеет исходников. То, что вы видете будет декомпилированым из байт-кода кодом, о чем честно предупреждает комментарий

 "	***This is decompiled code.*** 
 	No source was available"

Декомпилированый код вполне читаем и обычно отличается от того, что было на входе у компилятора только именами параметров и временных переменных (они называются t1, t2 и т.д.) и отсутствием комментариев.

Хотя обойтись без исходников можно, лучше все-таки, когда они есть. И тут людей, мало знакомых со средой VW, подстерегает несколько удивительностей: оказывается, исходники методов хранятся вовсе не в image (как подсказывает романтически-упрощенное представление о Smalltalk), а во внешних файлах.

Во-первых, есть код того, что есть в базовом образе. Этот код хранится в файле visual.sou. Потеряв этот файл, вы получите декомпилированый код вместо исходников стандартных классов -- не смертельно, но неприятно.

Во-вторых, есть код, который попадает в образ из парселей (parcels). К файлам с суффиксом .pcl, которые содержат (если не вдаваться в подробности), скомпилированый байт-код методов, могут прилагаться файлы исходников *.pst. А могут и не прилагаться (самый частый случай, когда парсели не снабжаются исходным кодом: готовое приложение загружает эти парсели при старте, и, натурально, исходный код ему совершенно не нужен; так ведут себя withStyle и, кажется, BottomFeeder).

В третьих, код, который вы набираете, а также код, загружаемый из системы контроля версий Store, хранится в файле изменений (имя_вашего_образа.cha). Change-file -- это мега-прекрасная штука, позволяющая не терять написаное даже в тех случаях, когда удается уронить виртуальную машину (типичные случаи -- отладка кода с использованием внешних библиотек, либо какие-нибудь сверхидиотские действия вроде удаления класса Object).

Следует, однако, знать следующее: если вы загрузили package или bundle (для них во внутреннем жаргоне VW есть объединяющий термин pundle) из Store, а затем выгрузили его на диск, то код будет храниться уже не в change file, а в парселе (за исключением изменений, которые вносятся после публикации парселя -- эти изменения попадут в change file).

Итак. Чтобы взять с собой в путешествие VW, имеет смысл прихватить как минимум следующее:

  • виртуальную машину (можно несколько)
  • visual.sou
  • образ (.im) и изменения (.cha)
  • опционально -- .pst от парселей, загруженных в образ (включая те, которые были изначально взяты из Store)

Список последних можно выяснить, пообщавшись с SourceFileManager в духе

 SourceFileManager default sourceFileDirectories
 SourceFileManager default allFiles select:
   [:each| each isNil not]

Обнаружено использование расширения AdBlock.


Викия — это свободный ресурс, который существует и развивается за счёт рекламы. Для блокирующих рекламу пользователей мы предоставляем модифицированную версию сайта.

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

Также на Фэндоме

Случайная вики