| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
moko 01.02 06:28
Он примерно эквивалентен такому:^for[y](0;9){
^for[y](0;9999){
$x{code}
}
}В этом случае, как и в случае ^case[DEFAULT]{} происходит сохранение кода для возможного последующего выполнения. При этом код привязывается к текущему контексту исполнения, в данном случае к методу main, и поэтому может быть собран сборщиком мусора только по завершению метода. В этот момент связь "рвется" и использование кода за пределами контекста вызовет ошибку "junction used outside of context".@core[]
$result[]
^for[y](0;9999){
# ^if( true ){}
^switch[]{^case[DEFAULT]{}}
}
@main[][result]
^for[y](0;9){
^core[]
^memory:compact[]
$u[$status:memory]
$console:line[$u.used]
}
./parser3 test.html
360
528
532
844
848
844
1488
1488
1488
1488Как видно, стало заметно лучше. С чем связано рост сейчас так сразу не скажу, но едва ли это утечка. Внутри core каждый раз копится массив из 10,000 указателей на привязанный код, но они освобождаются по завершению метода. Но да, ^if() в любом случае эффективнее ^switch, хотя едва ли в реальном использовании эта разница будет так заметна.