4 ms·
There are type systems which can track complexity (e.g. http://gallium.inria.fr/~fpottier/slides/fpottier-2011-01-jfla.pdf http://gallium.inria.fr/~fpottier/sli
by hayley-patton 3y ago
There are type systems which can track complexity (e.g. http://gallium.inria.fr/~fpottier/slides/fpottier-2011-01-jfla.pdf http://gallium.inria.fr/~fpottier/slides/fpottier-2011-01-jf...) but that's still different to performance; async/sync tells us things like "touches disk" or "touches network" but not "O(2^n) might take a really long time".
Alternately, an effect system can communicate "touches disk", can make functions which are polymorphic to effects (e.g. map touches the disk if the mapping function touches the disk), and can distinguish different effects, unlike async/sync being anything-or-nothing. IMO async is more of an implementation detail (as "may suspend/yield" is not a very precise or interesting effect), whereas effects would communicate the properties that ohgodplsno wants to know.
- mike_hearn 3y agoYes, but are there any effects systems in use outside of maybe Haskell? Effects seem mostly to be stuck in the research lab and have been for a long time.
- hayley-patton 3y agoI don't mean "effects" in the sense where you can have effect handlers which get delimited continuations and all; it'd just mark what could happen (like checked exceptions). But I can't think of any languages with that and not effect handlers; Koka, Eff, and Unison come to mind for effects, though their practical-ness may vary.
- zozbot234 3y agoDo you really need effect handlers as a separate feature once you have async/await? It seems like you could easily encode one with the other.
- hayley-patton 3y agoAn effect handler is allowed to invoke a continuation multiple times; I believe this is not possible with async/await.
- ohgodplsno 3y agoVerse has effects, which by virtue of exposing it to the entire Fortnite community probably makes it a bigger language than Haskell in terms of user counts. https://dev.epicgames.com/documentation/en-us/uefn/specifiers-and-attributes-in-verse https://dev.epicgames.com/documentation/en-us/uefn/specifier... converges/diverges, computes, varies, reads, writes, transacts, no_rollback.