Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Зачем мне нужен файл с общими исходными кодами на диалектах Smalltalk, таких как Pharo?

Автор вопроса: user1801323Ответов: 3

обычная установка описания говорит мне, что мне нужно запустить Pharo как минимум три файла:

  1. файл изображения
  2. файл изменений
  3. исходный файл (например, PharoV10.sources)

Я запускал Pharo 2 без файла с исходным кодом и не заметил никаких проблем. Все источники, казалось, были доступны.

Итак, зачем мне исходный файл (например, PharoV10.sources)?

smalltalkpharo

Ответы

Ответ 1 · рейтинг 8 · David Buck

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

Сказав это, Smalltalk может декомпилировать код и создать то, что выглядит как исходный код, если исходный файл недоступен. В этом коде будут отсутствовать правильные имена переменных, комментарии и интервалы. Вы действительно не хотите использовать декомпилированный исходный код, поэтому вам нужен доступ к исходному файлу.

Ответ 2 · рейтинг 6 · aka.nice

3 возможных объяснения, попробуйте определить шутку:

  1. Браузер достаточно умен, чтобы показать вам исходный код, реконструированный (декомпилированный) из байт-кодов CompiledMethod. Подсказка: в этом случае вы потеряете все комментарии
  2. есть путь поиска исходных файлов, и один находится где-то на вашем диске
  3. Pharo меняется так быстро, что каждый источник теперь можно найти в файле .changes.

Для проверки 1. вы можете попробовать просмотреть ссылки на декомпилятор (на мой вкус, слишком много применений).

Для проверки 2. вы можете начать просматривать разработчиков #openSourceFiles.

Для проверки 3. вы можете оценить этот фрагмент:

| nSources nChanges |
nSources := nChanges := 0.
SystemNavigation default allBehaviorsDo: [:b |
    b selectorsDo: [:s |
        (b compiledMethodAt: s) fileIndex = 1
            ifTrue: [nSources := nSources+1]
            ifFalse: [nChanges := nChanges+1]]].
^{nSources. nChanges}

Ответ 3 · рейтинг 4 · Damien Cassou

Также возможно, что Pharo загружает PharoV10.sources автоматически.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы