|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
Код: sql 1.
Не ожидал такого подвоха. Когда тестировал вложенность вызовов и $stack переменную, вроде, за 1000 зашкаливало. Cache for Windows (x86-32) 2010.1.2 (Build 600.0_SU) Tue May 25 2010 20:27:57 EDT Есть ли возможность увеличить вложенность NEW? Какое ограничение в более новых версиях? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 13:25 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DirksDR Код: sql 1.
Не ожидал такого подвоха. Когда тестировал вложенность вызовов и $stack переменную, вроде, за 1000 зашкаливало. Cache for Windows (x86-32) 2010.1.2 (Build 600.0_SU) Tue May 25 2010 20:27:57 EDT Есть ли возможность увеличить вложенность NEW? Какое ограничение в более новых версиях?если не использовать эксклюзивного new эксклюзивный new это когда либо не указаны переменные либо через исключение в скобках ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 13:39 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DirksDR, http://docs.intersystems.com/cache_latest/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_cnew#RCOS_cnew57]Attempting to issue more than 31 levels of exclusive NEW or argumentless NEW results in a <MAXSCOPE> error. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 13:57 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DAiMor, servit Спасибо. Мне кажется вложенность 32 искуственная, вызванная неким счетчиком, который давно пора увеличить. Поэкспериментировал:START new (val) ;new val s val="aaaaaaaaaaaa" d TEST q TEST n val s val="bbbbbbbbbbbb" w "$stack=",$stack,! goto START new (val) четко вылетает на 32-м вложенном вызове. new val - дает <FRAMESTACK> на 828-м вложенном вызове. Придется пересматривать код, на рекурсию был основной расчет. А эксклюзивное new (...) очень облегчало работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 14:28 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DirksDR , Дело не только в NEW, но и в DO,XECUTE и т.д.Даже такой код рано или поздно вызовет ошибку <FRAMESTACK>:START d TEST q TEST w "$stack=",$stack,! goto STARTDirksDRnew val - дает <FRAMESTACK> на 828-м вложенном вызове.Глубину рекурсии (количество вызовов) можно значительно увеличить (например у меня ~280000 вложенных вызовов получилось), увеличив размер стека. DirksDRПридется пересматривать код, на рекурсию был основной расчет. А эксклюзивное new (...) очень облегчало работу.Не всё так печально: можно вместо val использовать val($st) или ^||val($st) или ..., а NEW не использовать вовсе. PS: Use VIRTUALFRAME and MMAP() For Larger Stack And Error Frames ... |
|||
:
Нравится:
Не нравится:
|
|||
25.02.2015, 15:36 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DirksDRА эксклюзивное new (...) очень облегчало работу.А Вы не ленитесь. Перечисляйте список переменных используемых в процедуре/функции. Так и читабельность кода повышается.START new (val) ;new val s val="aaaaaaaaaaaa" d TEST q TEST n val s val="bbbbbbbbbbbb" w "$stack=",$stack,! goto STARTА может все же писать по-человечески? Зачем такой изврат? Зачем выпрыгивать из процедуры? Ну если уж хочется использовать goto, пользуйтесь ею на одном уровне, например: ;====================================================== ; Добавьте комментарии ;====================================================== START new (val) ;new val s val="aaaaaaaaaaaa" d TEST goto START ; тут бы, безусловный переход заменить условный ; да и какое-либо дальнейшее действие должно предполагаться ; иначе имеет смысл просто заменить на обычный цикл for q ;====================================================== ; Согласитесь, так даже логичнее? ; Процедура полностью закончена, из неё нет прыжков черти куда ;====================================================== TEST n val s val="bbbbbbbbbbbb" w "$stack=",$stack,! Q ;====================================================== ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 10:05 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
П.С.М.Так и читабельность кода повышается.Под повышению читабельности кода имелось в виду то, что в случае: ;======================================= ; Некий метод ;======================================= METHOD N val1,val2,val3 ;... что то делается Q ;=======================================Сразу видно, какие переменные используются в методе. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 10:08 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
А можно вообще забыть про NEW если писать процедурный код в рамках каждой такой процедуры уже будут свои переменные и те которые явно объявлены публичными ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 10:18 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
П.С.М.А может все же писать по-человечески? Зачем такой изврат? Это я измерял глубину вложенности, рабочий код я так не пишу :) Кстати, Ваш пример также демонстрирует ошибку Код: sql 1. 2. 3.
на 32-м new, хотя $stack=2 все время. Может есть системная переменная, которая уровень вложенности new показывает? servit Долго не мог смысл val($st) понять. Наконец дошло. Хороший прием, спасибо за идею. DAiMor Поигрался с процедурным кодом:Rou1 // Rou1 routine set aa="aaa" s a="a",b="b",c="c" do Proc1(a,b) do Proc2(a,b,c) w a1,! w a2,! Proc1(x,y) { set a1="aaa1" w "Proc1",x,y,! ;w aa,! } Proc2(x,y,z) { set a2="aaa2" w "Proc2",x,y,z,! ;w aa,! } Убедился в изолированности переменных. Хороший прием, спасибо за идею. Хотел int-код посмотреть, оказалось это он и есть. Подумаю, где применить. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:11 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
DirksDRВаш пример также демонстрирует ошибку new (val) ;new val ^ <MAXSCOPE>START+1^testcall Конечно демонстрирует, там ведь new (val) после метки START никто не убирал. Было б странно если б этого и не происходило :) DirksDRМожет есть системная переменная, которая уровень вложенности new показывает? Еще раз: П.С.М.А Вы не ленитесь. Перечисляйте список переменных используемых в процедуре/функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:46 |
|
ошибка <MAXSCOPE>
|
|||
---|---|---|---|
#18+
П.С.М.Перечисляйте список переменных Либо пользуйтесь синтаксисом с фигурными скобками, тут уж дело вкуса. Только не занимайтесь ерундой с прыжками по goto из процедуры в процедуру при этом еще и рекурсивно вызывая чего-нибудь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.02.2015, 16:56 |
|
|
start [/forum/topic.php?fid=39&msg=38889149&tid=1556720]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 297ms |
total: | 411ms |
0 / 0 |