Comments 6
В общем-то интересная статья - относительно подробная.
Но применение оператора "if_coro_advance( )" меня просто убивает своей грязностью! Неужели никак иначе нельзя было построить обработку потоков данных из генераторов без такого топорного ветвления! Вон, в том же C# всё обходится без таких диких конструкций (но да - я понимаю - это управляемый ЯП, но там всё-таки JIT фронтэнд компилятор из IL в native-код, а не просто виртуальный движок; хотя промежуточный язык IL очень хорош).
И так и не понял тему про деинициализацию - рассмотрите пример с генератором данных из файла (потока-ресурса), где файл открывается внутри генератора. Как происходит деинициализация (и закрытие ресурса файла) при прерывании генератора, и как происходит само прерывание!
Были идеи вместо такого ветвления сделать получение результата через какой-нибудь optional. Но я отверг такой способ, т. к. он бы требовал создания зависимости компилятора от стандартной библиотеки, что я считаю неправильным.
При этом всё ещё можно написать библиотечную функцию-обёртку, которая бы основывалась на операторе if_coro_advance
и заворачивала бы результат в optional. Таким образом можно считать этот оператор строительным блоком для реализации более высокоуровневой конструкции.
Помню ваш проект и первую статью о нём. Рад, что затея жива. Наметились ли какие-нибудь применения языка? Или продолжаете чисто для собственного удовольствия и прокачки навыков?
В основном всё делается ради собственного развлечения. При этом язык всё же уже достаточно продвинутый, чтобы что-то на нём можно было писать. Но не хватает сопутствующей инфраструктуры (поддержка в IDE, библиотеки) и сообщества.
А были какие-то планы по туллингу? По тем же плагинам для IDE, по отладчику (в рамках IDE, разумеется), по профиляторам и прочему? Полагаю, что какой-то туллинг есть у llvm, но, возможно, нужно его ещё как-то прикрутить к языку
Реализация генераторов в языке программирования Ü