За последнее время я доработал освобождение динамической памяти при использовании подсчёта ссылок. Теперь при освобождении записи для неё вызывается функция очистки, которая зануляет входящие в неё указатели, благодаря чему стало возможным автоматическое освобождение цепочек, но, по-прежнему, без разрыва циклических связей. Остаются недоделки, связанные с локальными для подпрограмм записями.
Выбор подсчёта ссылок задаётся ключом -memng counter .
В нынешнем состоянии при сборке самого транслятора с подсчётом ссылок его время работы увеличивается в 1.6 раза.
Также, ощутимым нововведением стало сделанная на днях поддержка кириллических идентификаторов. Кириллица пока ограничивается современными алфавитами русского, украинского и белорусского языков. Имена со смешанным набором латиницы и кириллицы запрещены. Поддержка включается ключом -cyrillic .
Забавно, что внедрив транслитерацию при переводе в программу на Си, из-за допущенной ошибки, из-за которой имена переносились без преобразования, я случайно обнаружил, что в Си также есть поддержка идентификаторов с расширенным набором символов. С этим списком можно ознакомиться в приложении D стандарта языка ISO C99 или ISO C11. Поддержка есть в компиляторах tcc, gcc и clang, но во всех по-разному. В CompCert расширенный диапазон букв недоступен, поэтому транслитерация, всё-таки, пригодилась.
Вот так косяки и вылазят)
ОтветитьУдалитьВсё-таки приоритетная добровольно-принудительная поддержка английского есть узурпация. Не демократично))
Какие косяки? То, что Си поддерживает кириллицу? Или что-то ещё?
УдалитьИ при чём тут узурпация и демократия? Есть авторское описание языка, в котором всё просто и нет никакой кириллицы. Поэтому все расширизмы идут во вторую очередь и через явные настройки.