|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Никто не знает, где найти информацию о том, как устроены алгоритмы Каше, отвечающие за принудительную компиляцию "соседей" при компиляции класса? Дело в том, что даже с минимальными опциями (я не прошу компилять зависимые или используемые классы), при компиляции некоторых классов происходит перекомпиляция множества других, порой совсем с виду невиноватых классов. Интересует информация в духе: - стороны отношения всегда компилируются вместе; - при изменении типа свойства компилируются все классы, методы которых используют это свойство; - и т.д. и т.п. Как я понял, эта ситуация зависит, чуть-ли, не от фазы луны - бывало такое, что класс компилится 1 секунду, а через 2 минуты, после добавления описания свойства он же начинает цеплять множество других классов... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2010, 13:11 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
можно поставить нужные флаги в студии когда редактируется класс, 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2010, 13:22 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
DAiMor, Это-то понятно... И вовсе без флагов, и с различными их вариантами (вплоть до "-a-l-ru-y-o") в некоторых случаях все же цепляются "соседи". Вот и интересно, от чего это зависит? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2010, 13:54 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
kolesov, киньте примером, если есть ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2010, 20:27 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
neznau, К сожалению, не получится. Собственно, если бы я смог этот пример сделать, и спрашивать не понадобилось бы... Думал, может кто сталкивался уже... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2010, 03:39 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
kolesov Есть такая проблема. По моему, самая сильная причина "зацепления" - это использование Embedded SQL, потому что он обязан меняться, если вы хоть что-то делаете со свойствами или как-то хоть косвенно меняете хранение. Ну еще наследование, использование свойст и методов. Связи классов либо динамически вычисляются при анализе содержимого класса (прямое обращение), либо берется из класса oddDEP (обратные ссылки на этот класс). Мне кажется, основная причина ветвистых компиляций - как раз oddDEP. Доходило до того, что у меня кроме CompileAll ничего не работало или компилило все подряд, при компиляции одиночного класса А говорило что устарел класс Б, при компиляции класса Б говори про класс С, при компиляции класса С говорило, что устарел А. Обращался в саппорт, но смоделировать проблему не смог, а на передачу всех классов не получил разрешения. Плюнул и стал удалять oddDEP. Не знаю, cуществует ли проблема на поздних версиях каше, т.к. по привычке удаляю oddDEP На разных версиях каше классы цепляет по разному, вроде поздние чуть получше. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2010, 04:15 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Попробуйте запустить d $system.OBJ.GetDependencies d $system.OBJ.IsUpToDate(myclass,1,1) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2010, 04:26 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Блок А.Н., Спасибо огромное! Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Конечно, для небольших изменений (что как раз и нужно - баги после сборки теперь не ждут неделю для закрытия) Попробую стараться это делать пореже, конечно ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2010, 07:57 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Блок А.Н.Попробуйте запустить d $system.OBJ.GetDependencies d $system.OBJ.IsUpToDate(myclass,1,1) Да, похоже можно и так: w $system.OBJ.GetDependencies("*") ... |
|||
:
Нравится:
Не нравится:
|
|||
30.03.2010, 08:00 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Тема конечно старая, но я думаю здесь будет уместно спросить. Переходим на Cache 2011.1, там появилась многопоточная компиляция, но для ее правильной работы необходимо во всех классах прописать CompileAfter или DependsOn. В нашем проекте более 2тыс классов, руками все зависимости проставлять не реально, пробовал смотреть ^oddDEP, но что-то не совсем понял, какие данные оттуда нужно брать. Может кто-то уже занимался задачей построения дерева зависимостей? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2012, 15:06 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Само разберется. Мне наоборот, приходилось удалять oddDEP, так как слишком много цепляло каждый раз. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2012, 17:05 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Блок А.Н.Само разберется.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 . Источник ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2012, 17:23 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Блок А.Н.Само разберется. Попробовал так - у меня все в дедлоки упало и пришлось ребутить каше. А ускорения компиляции охота, т.к. компиляция съедает половину времени сборки (порядка 12-15 минут) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2012, 07:37 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
В общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 10:53 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей. На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (мне в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде. У нас сейчас есть выделен ресурс для реализации полезных для сообщества задач. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 11:12 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
D_De1mosВ общем я так понимаю InterSystems заявили очередную бесполезную фичу, т.к. для маленьких проектов многопоточной компиляции и не требуется, а для больших нет функциональности автоматического построения правильных зависимостей. На самом деле вопрос в наличии утилиты, которая выстраивала бы правильные зависимости для классов большого проекта. Правильно? Считаем задачу полезной и интересной. Если не трудно - пришлите нам проект (в личку), можно сильно прошлую версию - решим задачу для вашего случая и в общем виде. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 11:20 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
Да, правильно. Смысл параллельной компиляции будет только при наличии утилиты. Проект к сожалению скинуть не могу, т.к. система закрытая. И в любом случае решать надо общую задачу. Если есть возможность - можете предоставить документацию по глобалу ^oddDEP, в нем под разными индексами хранятся разные зависимости, нужно понять, какие из них необходимы для многопоточной компиляции. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 11:37 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
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
Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 15:05 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
servitВы можете поступить проще. В Caché-терминале в нужной области (для начала в безопасном окружении) запустите Код: plaintext
Для начала это поможет, но не гарантирует устойчивый результат, так как количество потоков может меняться, добавляться или удаляться классы... Скорее всего придется прописать все зависимости в существующих и обязательно во вновь создаваемых классах (где имеются эти зависимости). ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 17:51 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
ser_shu , Проблема во многом зависит от архитектуры системы (сложности/запутанности классов). В моём случае (~400 классов без CompileAfter/DependsOn) Код: plaintext
Код: plaintext
выдают одинаковый результат (одинаковые ошибки) лишь на одном классе, но этот класс вне рамок проекта. После явного указания CompileAfter ошибка в обоих случаях исчезла. PS: при компиляции именно проекта или тем более одного (любого) класса ошибок никогда не наблюдалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2012, 19:54 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
servit, да, у меня тоже ~800 классов и проблем больше полугода при компиляции не замечал в 2012.1. Все зависимости простые, которые, видимо, сразу определяются компилятором, sql в основном динамический. Скорее всего проблемы возникнут на встроенном sql в методах, где компилятор не сможет сразу определить зависимость. Вообще то не заметил этого примечания к многопоточности, спасибо, надо бы осознать, когда необходимо указывать в классах последовательность компиляции, чтобы не нарваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 03:15 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
servitВы можете поступить проще. В Caché-терминале в нужной области (для начала в безопасном окружении) запустите Код: plaintext
Все найденные ошибки, в том числе связанные с отсутствующими зависимостями, попадут в errorlog , которые затем Вы легко сможете исправить вручную. Спасибо, как-то пропустил этот флаг, с -l все компилится без ошибок . А чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 09:45 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
D_De1mosА чем это потенциальном может грозить? возможностью редактировать+компилировать класс во время компиляции? Да . ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2012, 11:12 |
|
Порядок компиляции - каковы причины компиляции "соседей"?
|
|||
---|---|---|---|
#18+
В общем многопоточная компиляция оказалась хорошей фичей, время компиляции уменьшилось с ~16мин до 7,5 на 4-х ядерном i7 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2012, 15:06 |
|
|
start [/forum/topic.php?fid=39&fpage=33&tid=1557370]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 418ms |
0 / 0 |