-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Make async
and closure
keywords, making them syntactic sugar like func
#553
Comments
import chronos
async:
proc f(): Future[int] =
10
proc g(): Future[int] =
await f()
echo waitFor g() this works today, fwiw |
This is a solution provided by discord user fabricio, which I found very interesting. asyncDef doStuff() -> int:
echo 1
echo 2 Looks a lot like Python code. |
Is {.push async.} useful? |
This. Use the |
|
for the chronos version of raises tracking, what would have helped rather than an async keyword would have been the compiler exposing more type arithmetic utilities, as well as co/contravariance - with those two features, it would be easier both to provide correct "normalization" of raises lists and better backwards compatibility / "looser" definitions for example when making callbacks and for example assigning to async |
Abstract
Make them a keyword, which can automatically help users add corresponding pragmas, just like
func
does.Motivation
In this RFC, it is a sweet syntax sugar, and in the future, it may become a new function type, just like
converter
anditerator
.When writing asynchronous code, we always type {.async.} over and over again. I wonder if it can reduce our typing burden if it becomes a syntax sugar.
nim uses indentation to express the structural hierarchy of control flow, which reduces many curly braces. If async and closure become keywords, the use of curly braces will be further reduced. I wonder if it can make the code more refreshing.
Description
In simple terms, the async keyword automatically adds
{.async.}
, and the closure keyword automatically adds{.closure.}
.Since async is not built-in in nim language, when the user uses this keyword, the compiler should search for async symbol in the current namespace. If it is not found, the compiler should terminate the compilation and give an error message.
In nim2.0, we have
For loop macro
, maybe, in the process of implementing async keyword, we can also haveAsync macro
.Code Examples
Backwards Compatibility
The
async
macro of the third-party library chronos can pass parameters. Whenasync
becomes a keyword, it seems that there is no way to pass parametersThe text was updated successfully, but these errors were encountered: