Not a big fan of this. The suggested effects have some ambiguities. For example, does sprintf imply the errno effect that's only required under POSIX? Does printf imply file or just system depending on implementation?
I'm also not sure what you really gain from this effort beyond mut annotations. It doesn't give you a way to detect or eliminate UB. It doesn't allow the compiler to optimize pure functions better like the reproducible directive does. A better effects system could do these things, but this is an unhappy middle ground between something simple enough to actually get standardized and something powerful enough to provide useful guarantees.
Is there a corresponding proposal for C++? The earlier thread mentioned that "C++ doesn't have this yet", but I am wondering if C++ has enough template magic that it's able to do it through libraries without changes to the language.
> Please don't comment on whether someone read an article. "Did you even read the article? It mentions that" can be shortened to "The article mentions that".
I'm also not sure what you really gain from this effort beyond mut annotations. It doesn't give you a way to detect or eliminate UB. It doesn't allow the compiler to optimize pure functions better like the reproducible directive does. A better effects system could do these things, but this is an unhappy middle ground between something simple enough to actually get standardized and something powerful enough to provide useful guarantees.