Относительно 1:
Я не вижу простого способа избежать вызова 'free' для пустой строки.
ATS2 очень явно на данный момент. Я надеюсь, что больше метапрограммирования
поддержка может быть встроена в ATS3.
Может быть, вы могли бы попытаться определить макрос:
macdef if_line (x, _then) =
если strptr_isnot_null (, (x)), то, (_ затем) иначе freeline (, (x))
Относительно 2:
Я бы ввел абстрактный тип:
absvtype readline (l: addr) = ptr
забавная readline (подсказка: строка): [l: addr] readline (l)