Používáte to někdo? By mě zajímalo, proč okopírovali ten mizerný návrh korutin z C#.
Můžeš uvést příklad jazyka, kde je podle tebe lépe vyřešeno volání asynchronního kódu?
Kooperativní vícevláknovost je mnohem lépe vyřešena v Go, je plně transparentní a nemusí se zavádět async funkce. Vyžadovat psát async/await je zcela zbytečné, stejně jako používání Promise pro návratovou hodnotu. Jde o overengineering. Na druhou stranu to je o trochu lepší než callback hell.
Nevím co myslíte pojmem kooperativní vícevláknovosti. Znám jenom kooperativní multitasking (Windows 3.11)
Javascript nemá synchronizační primitiva - nepotřebuje je protože vše běží v jednom vlákně.
Await (a
yield) jsou jediné způsoby jak dát vědět, teď bude aktuální kód přerušen a jiný spuštěn - někdo mohl změnit globální proměnné.
Proto tyto klíčová slova jsou nezastupitelné a mnohdy mnohem lepší než používání callbacků. Například proto, že u callbacků není formálně zajištěno kolikrát bude zavolán. Tyto garance přicházejí až s Promise/A+ (a tam se to nenazývá callback)
Pro javascript to není overengineering. Je to způsob, jak dostat do kódu který nebyl designován pro vlákna "synchronní" zápis volání dlouho běžících operací a deklarace, že mezitím je možné dělat něco jiného. V go to není potřeba, protože je možné spustit mnoho vláken ale následně je potřeba používat zámky, channely a podobně.