ФЭНДОМ


Этот текст не претендует на полноту или подробность. Его назначение -- описать управление исходным кодом в 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]