История изменений
Исправление den73, (текущая версия) :
Надо перекомпилироват ьтолько этот файл если менялась только реализация
Да, только это не так просто установить, как в случае С. Для С достаточно посмотреть на время модификации .h,.c,.obj. Для СуперЯз а нужно сравнить время модификации .СуперЯ с .obj. Если .СуперЯз моложе чем .obj, то нужно скомпилировать интерфейсную часть .СуперЯз, извлечь интерфейс из .obj, сравнить сигнатуры.
Конечно, это тоже осуществимо, может быть, такое усложнение оправдано. Другое дело, если изменились несколько файлов и реализация перестала компилироваться - тут мы можем наесться какашек, когда мы не сможем даже узнать, изменился ли интерфейс или нет, поскольку не сможем его скомпилировать. Я имею в виду golang, где интерфейс размазан по всему файлу, а не сосредоточен в начале, как это имеет место в Pascal. Может и здесь есть какой-то обходной путь, но мне пока не видно.
Мне сегодня пришёл в голову ещё один момент. Проект развивается во времени. И есть такой инструмент, как журнал системы контроля версий. Окинув его взглядом для проекта на C, сразу можем понять, изменился ли интерфейс. В СуперЯзе нам придётся просматривать все изменения и анализировать каждое изменение с точки зрения того, влияет ли оно на интерфейс.
И есть ещё философское соображение за заголовочники. Они воплощают идею разделения интерфейса и реализации.
Исходная версия den73, :
Надо перекомпилироват ьтолько этот файл если менялась только реализация
Да, только это не так просто установить, как в случае С. Для С достаточно посмотреть на время модификации .h,.c,.obj. Для СуперЯз а нужно сравнить время модификации .СуперЯз, сравнить его с .obj. Если .СуперЯз моложе чем .obj, то нужно скомпилировать интерфейсную часть .СуперЯз, извлечь интерфейс из .obj, сравнить сигнатуры.
Конечно, это тоже осуществимо, может быть, такое усложнение оправдано. Другое дело, если изменились несколько файлов и реализация перестала компилироваться - тут мы можем наесться какашек, когда мы не сможем даже узнать, изменился ли интерфейс или нет, поскольку не сможем его скомпилировать. Я имею в виду golang, где интерфейс размазан по всему файлу, а не сосредоточен в начале, как это имеет место в Pascal. Может и здесь есть какой-то обходной путь, но мне пока не видно.
Мне сегодня пришёл в голову ещё один момент. Проект развивается во времени. И есть такой инструмент, как журнал системы контроля версий. Окинув его взглядом для проекта на C, сразу можем понять, изменился ли интерфейс. В СуперЯзе нам придётся просматривать все изменения и анализировать каждое изменение с точки зрения того, влияет ли оно на интерфейс.
И есть ещё философское соображение за заголовочники. Они воплощают идею разделения интерфейса и реализации.