Михаил писал(а):
Есть вариант вместо malloca использовать alloca, то есть хранить динамические строки не в куче, а на стеке.
это очень плохой вариант. во-первых, размер стека ограничен. во-вторых, весь стек просто не существует в памяти сразу, ось выделяет дополнительные стековые страницы по первому сегфолту — именно за этим в компиляторах (CP2 в частности) есть так называемые stack stompers: если размер локалов больше 4кб, то в пролог вставляется «стукалка» с шагом четыре килобайта, чтобы ось выделила все стековые страницы. не будет стукалки — можем улететь в сегфолт даже если технически лимит стека не исчерпан.
в общем, это близко к обыкновенному локальному массиву, и имеет все те же ограничения, что и явный локальный массив. плюс полная невозможность сделать COW и слайсинг. в дельфи строки — refcounted, любого размера (ну, пока память есть). если не такое — тогда нет смысла заморачиваться, можно спокойно по старинке, локальными массивами.
вообще, динамического выделения на стеке лучше избегать. от него бывает расстройство желудка.
Михаил писал(а):
ps2: В BB добавить процедуру в 1-ю группу легко, во 2-ю группу уже сложнее. Добавление в 3-ию группу без танцев с бубном и хождения по граблям не получилось.
да там ничего сложного, просто CP2 очень плохо написан. точнее, он написан нормально, но не на обероне, а на модуле-2, и с приоритетом экономии памяти. поэтому без распечатаной и прибитой на стену дурацкой таблички, которая показывает расклад полей ноды каждого типа — лазить туда БОЛЬ и СТРАДАНИЯ. я, например, эту идиотскую табличку забываю ровно через день после того, как закрыл исходники CP2.
лично я рекомендую лазить в CP2 как можно меньше, и ни в коем случае не брать его как пример для подражания. там минное поле: забыл нюанс раскладки — накосячил, и день ищешь, что же не так. А.А. в Гершеле как раз приводил этот УЖОС в более-менее нормальный вид (хотя лучше его выкинуть полностью, и сделать с нуля нормально).