powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Порядок компиляции - каковы причины компиляции "соседей"?
25 сообщений из 31, страница 1 из 2
Порядок компиляции - каковы причины компиляции "соседей"?
    #36530689
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не знает, где найти информацию о том, как устроены алгоритмы Каше, отвечающие за принудительную компиляцию "соседей" при компиляции класса?
Дело в том, что даже с минимальными опциями (я не прошу компилять зависимые или используемые классы), при компиляции некоторых классов происходит перекомпиляция множества других, порой совсем с виду невиноватых классов.
Интересует информация в духе:
- стороны отношения всегда компилируются вместе;
- при изменении типа свойства компилируются все классы, методы которых используют это свойство;
- и т.д. и т.п.
Как я понял, эта ситуация зависит, чуть-ли, не от фазы луны - бывало такое, что класс компилится 1 секунду, а через 2 минуты, после добавления описания свойства он же начинает цеплять множество других классов...
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36530731
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно поставить нужные флаги
в студии когда редактируется класс, Ctrl+Shift+F7, можно задать нужные флаги и сохранить их по умолчанию

USER>d $system.OBJ.ShowFlags()
a - Include application classes. This flag is set by default.
b - Include sub classes.
c - Compile. Use this flag while loading a CDL file will cause the classes
loaded to be compiled as well.
d - Display. This flag is set by default.
e - Delete extent.
f - Force. Force a compilation even when classes instances are in use.
Existing objects are invalid after compilation.
h - Generate help.
i - Validate XML export format against schema on Load.
k - Keep source. When this flag is set, source code of
generated routines will be kept.
l - Use lock while compilation classes. This flag is set by default.
p - Include percent classes.
q - SQL-only compilation.
r - Recursive. It means include all the classes that are
dependency predecessors.
s - Include system classes.
u - Update only. It means do not compile classes that are up-to-date.
v - Keep valid. When combined with "f" flag (which forces recompilation),
also keeps the objects valid after compilation finishes.
y - Include classes that are related to the current class in the way that
they either reference to or are referenced by the current class in SQL usage.
4 - Export CDL compatible with version 4 from later version.
o1- Optimize ..Property to i%Property where possible.
o2- Optimize calls within this class, no incremental compile support.
o3- Optimize calls within this class and to system classes.
o4- Optimize calls to all classes, only works from CompileAll entry point.

Default flags for this namespace =adflo1u
You may change the default flags with the SetFlags(flags,system) call
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36530854
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DAiMor,

Это-то понятно...
И вовсе без флагов, и с различными их вариантами (вплоть до "-a-l-ru-y-o") в некоторых случаях все же цепляются "соседи".
Вот и интересно, от чего это зависит?
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36531940
neznau
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov,

киньте примером, если есть
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36532172
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
neznau,

К сожалению, не получится. Собственно, если бы я смог этот пример сделать, и спрашивать не понадобилось бы...

Думал, может кто сталкивался уже...
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36532178
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolesov
Есть такая проблема.
По моему, самая сильная причина "зацепления" - это использование Embedded SQL, потому что он обязан меняться, если вы хоть что-то делаете со свойствами или как-то хоть косвенно меняете хранение. Ну еще наследование, использование свойст и методов.

Связи классов либо динамически вычисляются при анализе содержимого класса (прямое обращение), либо берется из класса oddDEP (обратные ссылки на этот класс). Мне кажется, основная причина ветвистых компиляций - как раз oddDEP.
Доходило до того, что у меня кроме CompileAll ничего не работало или компилило все подряд, при компиляции одиночного класса А говорило что устарел класс Б, при компиляции класса Б говори про класс С, при компиляции класса С говорило, что устарел А.

Обращался в саппорт, но смоделировать проблему не смог, а на передачу всех классов не получил разрешения. Плюнул и стал удалять oddDEP. Не знаю, cуществует ли проблема на поздних версиях каше, т.к. по привычке удаляю oddDEP

На разных версиях каше классы цепляет по разному, вроде поздние чуть получше.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36532180
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте запустить

d $system.OBJ.GetDependencies
d $system.OBJ.IsUpToDate(myclass,1,1)
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36549618
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.,

Спасибо огромное!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
>m ^oddDEPtemp = ^oddDEP
 
>k ^oddDEP

После этого компилируем.
После компиляции возвращаем зависимости (вдруг они на что-то еще кроме
компиляции влияют)

>m ^oddDEP = ^oddDEPtemp
 
>k ^oddDEPtemp
В таком виде начал использовать. Очень нравится...
Конечно, для небольших изменений (что как раз и нужно - баги после сборки теперь не ждут неделю для закрытия)
Попробую стараться это делать пореже, конечно ;)
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #36549621
Фотография kolesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Попробуйте запустить

d $system.OBJ.GetDependencies
d $system.OBJ.IsUpToDate(myclass,1,1)
Да, похоже можно и так:
w $system.OBJ.GetDependencies("*")
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Порядок компиляции - каковы причины компиляции "соседей"?
    #37905800
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема конечно старая, но я думаю здесь будет уместно спросить.
Переходим на Cache 2011.1, там появилась многопоточная компиляция, но для ее правильной работы необходимо во всех классах прописать CompileAfter или DependsOn. В нашем проекте более 2тыс классов, руками все зависимости проставлять не реально, пробовал смотреть ^oddDEP, но что-то не совсем понял, какие данные оттуда нужно брать.
Может кто-то уже занимался задачей построения дерева зависимостей?
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37906049
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Само разберется.
Мне наоборот, приходилось удалять oddDEP, так как слишком много цепляло каждый раз.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37906095
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Само разберется.Caché 2011.1 Upgrade ChecklistUse of parallel compilation assumes that all relevant dependencies between classes are expressed in the class declaration.
...
If two classes did not specify a dependency, the order in which they are done cannot be predicted; this could potentially cause a problem if two classes were dependent on each other but no dependency had been specified and the sequential compilation order just happened to work correctly. If this occurs, add a CompileAfter or DependsOn dependency between the classes to specify their relation .
Источник
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37906656
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок А.Н.Само разберется.

Попробовал так - у меня все в дедлоки упало и пришлось ребутить каше.
А ускорения компиляции охота, т.к. компиляция съедает половину времени сборки (порядка 12-15 минут)
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37908314
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37908368
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (мне в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде. У нас сейчас есть выделен ресурс для реализации полезных для сообщества задач.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37908395
Шваров Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.
На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37908450
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, правильно. Смысл параллельной компиляции будет только при наличии утилиты.
Проект к сожалению скинуть не могу, т.к. система закрытая. И в любом случае решать надо общую задачу.
Если есть возможность - можете предоставить документацию по глобалу ^oddDEP, в нем под разными индексами хранятся разные зависимости, нужно понять, какие из них необходимы для многопоточной компиляции.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37909018
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosПопробовал так - у меня все в дедлоки упало и пришлось ребутить каше.Наверное, потому, что флаг компиляции l (Lock classes while compiling) по умолчанию включён.
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей.Скорость многопоточной компиляции существенна и на маленьких проектах.
D_De1mosЕсли есть возможность - можете предоставить документацию по глобалу ^oddDEP, в нем под разными индексами хранятся разные зависимости, нужно понять, какие из них необходимы для многопоточной компиляции.Кое-что можно почерпнуть из %occDepend.inc , но не рекомендую использовать системный недокументированный глобал.

Метод $system.OBJ.GetDependencies() формирует в oddDEP не все зависимости, а только статические - те, которые может выявить до компиляции.
Но есть ещё динамические зависимости: методы-генераторы, встроенный sql и т.д.
Все зависимости попадут в глобал oddDEP в процессе компиляции всех классов области.
Примечание:Ошибку при отсутствии явно заданных CompileAfter / DependsOn можно получить и при однопоточной компиляции.
Вы можете поступить проще.

В Caché-терминале в нужной области (для начала в безопасном окружении) запустите

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))

Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37909360
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servitВы можете поступить проще.
В Caché-терминале в нужной области (для начала в безопасном окружении) запустите
Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))
Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную.
Для начала это поможет, но не гарантирует устойчивый результат, так как количество потоков может меняться, добавляться или удаляться классы...
Скорее всего придется прописать все зависимости в существующих и обязательно во вновь создаваемых классах (где имеются эти зависимости).
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37909537
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ser_shu ,

Проблема во многом зависит от архитектуры системы (сложности/запутанности классов).

В моём случае (~400 классов без CompileAfter/DependsOn)

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l",.errorlog)) один поток
и
Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog)) четыре потока

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

PS: при компиляции именно проекта или тем более одного (любого) класса ошибок никогда не наблюдалось.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37909811
ser_shu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,
да, у меня тоже ~800 классов и проблем больше полугода при компиляции не замечал в 2012.1.
Все зависимости простые, которые, видимо, сразу определяются компилятором, sql в основном динамический.
Скорее всего проблемы возникнут на встроенном sql в методах, где компилятор не сможет сразу определить зависимость.
Вообще то не заметил этого примечания к многопоточности, спасибо, надо бы осознать, когда необходимо указывать в классах последовательность компиляции, чтобы не нарваться.
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37909976
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
servitВы можете поступить проще.

В Caché-терминале в нужной области (для начала в безопасном окружении) запустите

Код: plaintext
ABC>do $system.OBJ.DisplayError($system.OBJ.CompileAll("c-u-l/multicompile",.errorlog))

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

Спасибо, как-то пропустил этот флаг, с -l все компилится без ошибок .
А чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции?
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37910177
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D_De1mosА чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции? Да .
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37912349
D_De1mos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем многопоточная компиляция оказалась хорошей фичей, время компиляции уменьшилось с ~16мин до 7,5 на 4-х ядерном i7
...
Рейтинг: 0 / 0
Порядок компиляции - каковы причины компиляции "соседей"?
    #37958975
doublefint
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL проекция на oddDEP
...
Рейтинг: 0 / 0
25 сообщений из 31, страница 1 из 2
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Порядок компиляции - каковы причины компиляции "соседей"?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]