обзавёлся итераторами для массивов и строк, а также я туда втащил библиотеку строкового pattern matching'а, нагло упизженую у Lua. в связи с этим немного поменялся API (как будто это кого-то ебёт, ага). собственно, теперь итераторы стало создавать намного проще.
weak links там уже есть (хоть и немного черезжопно), а вот стоит ли привинчивать финализаторы — не знаю. вообще, cheney's gc мне не очень нравится, но с другой стороны — удобен и фрагментации позволяет избежать. хотя, наверное, стоит попробовать поменять его на generational gc в стиле Lua с write barriers (и, возможно, без emergency gc — Lua вон без него жила себе и нормалёк).
по дороге заметил потенциальный баг в обработке аргументов некоторых встроеных функций — возможно, именно из-за него Bob иногда валится с забавными ошибками. виноват, опять же, cheney's gc, который любит двигать объекты туда-сюда. возможно, стоит выделить для строк (и массивов?) отдельные области.
Я, конечно, глубоко не смотрел, но на первый взгляд жизненный цикл объектов лучше ложится на generational GC. Semispace GCs больше подходит утилям, где объекты создаются/живут равномерным потоком.
ну, тут в принципе не столь важна эффективность, сколь удобство. чейновый остался от оригинального автора, я его только чуть привёл в нормальный вид. дальше, кстати, DMB перешёл на обычный mark-sweep с несколькими пулами для разных объектов.
как таковой generational, думаю, по скорости особого выигрыша не даст, а код у него сложнее и write barriers придётся натыкать. поэтому я и в раздумьях весь. но и плюсы весомые, конечно: как минимум перестанут «ездить» указатели. зато появится фрагментация.
надо подумать и сделать гибрид, видимо: чейни с несколькими пулами и incremental mark-sweep с постепенным переездом в пулы. указатели таки будут «ездить», но, по-идее, эта схема без фрагментации и без stop-the-world (ну, то есть, со стопом, но не так часто). в принципе, оно в хуй не впилось, но забавно будет реализовать и ржать потом с тех, кто попытается в этом коде разобраться (и что хуже — понять, зачем я это сделал таким образом).