Можно ли избавиться от async|await?
От: Shmj Ниоткуда  
Дата: 13.12.25 03:36
Оценка:
Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

Понятно что для системных языков это не годится, но для бизнес-языков вполне.

Получается если не нужно ждать результата функции — пишем наоборот — nowait. Если ждать результат — ничего не пишем, по умолчанию.

Т.к. в основном асинхронных больше и даже если какая не асинхронная — то компилятор мог бы сам оптимизировать.
=сначала спроси у GPT=
Re: Можно ли избавиться от async|await?
От: GarryIV  
Дата: 13.12.25 07:57
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

В какой-то части можно но нахрена?
WBR, Igor Evgrafov
Re[2]: Можно ли избавиться от async|await?
От: Shmj Ниоткуда  
Дата: 13.12.25 09:17
Оценка: :)
Здравствуйте, GarryIV, Вы писали:

S>>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

GIV>В какой-то части можно но нахрена?

Для чистоты кода, конечно же. Один раз забыл написать await, а оно даже не предупредило. Даже не один раз.

А вот кода nowait — это явно не забудешь, т.к. из ряда вон выходящее.
=сначала спроси у GPT=
Re: Можно ли избавиться от async|await?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 13.12.25 09:53
Оценка: +1
Здравствуйте, Shmj, Вы писали:

S>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

S>Получается если не нужно ждать результата функции — пишем наоборот — nowait. Если ждать результат — ничего не пишем, по умолчанию.

Ты, кажется, хотел сказать наоборот. nowait как раз вообще ничего не требует за пределами обычной парадигмы даже без async/await, это возврат к тому, что было до них. Запросил асинхронную операцию и потом ждёшь нотификации, и все проблемы в том, как именно организовать максимально эффективное и при этом удобное ожидание.

То есть тут ничего нового.

А если таки весь код как бы async, но при этом можно явно ставить ожидание — то это Erlang или Go, или вообще что угодно на зелёных нитках.
The God is real, unless declared integer.
Re[2]: Можно ли избавиться от async|await?
От: Shmj Ниоткуда  
Дата: 13.12.25 10:10
Оценка:
Здравствуйте, netch80, Вы писали:

N>Ты, кажется, хотел сказать наоборот. nowait как раз вообще ничего не требует за пределами обычной парадигмы даже без async/await, это возврат к тому, что было до них.


Требует — это отказ от ожидания пока исполнится асинхронная операция.
=сначала спроси у GPT=
Re[3]: Можно ли избавиться от async|await?
От: GarryIV  
Дата: 13.12.25 11:37
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Для чистоты кода, конечно же. Один раз забыл написать await, а оно даже не предупредило. Даже не один раз.


На чем ты пишешь что можно "забыть"?
в нормальных языках нельзя забыть
компилятьр не скомпилирует
(пример.нормальной корутинщины kotlin)
WBR, Igor Evgrafov
Отредактировано 13.12.2025 11:40 GarryIV . Предыдущая версия .
Re: Можно ли избавиться от async|await?
От: SkyDance Земля  
Дата: 13.12.25 11:59
Оценка:
S>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

Можно просто использовать язык, где эти костыли не нужны. Например, Erlang — там подобной дури нет и в помине.
Re: Можно ли избавиться от async|await?
От: dsorokin Россия  
Дата: 13.12.25 14:34
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.


Кроме эрланга посмотри еще на голанг и хаскель!

А вообще, асинхронные вычисления удобно рассматривать в контексте монад как частный случай. Концептуально так проще и понятнее становится (если знаком с монадами)
Re[2]: Можно ли избавиться от async|await?
От: novitk США  
Дата: 13.12.25 16:15
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>Можно просто использовать язык, где эти костыли не нужны. Например, Erlang — там подобной дури нет и в помине.

В Erlang разве не обычные синхронные функции, обертывание которых в процессы требует даже большей церемонии чем async/await в C#/JS/Python?
Отредактировано 13.12.2025 16:16 novitk . Предыдущая версия .
Re: Можно ли избавиться от async|await?
От: novitk США  
Дата: 13.12.25 16:27
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Допустим, по умолчанию все функции сделать async, а компилятор уже сам оптимизирует.

S>Т.к. в основном асинхронных больше и даже если какая не асинхронная — то компилятор мог бы сам оптимизировать.
В GoLang сделано близко — "горутинность" запихана в вызов, а не в декларацию функции. Другое дело, что разница все равно прошита в самом коде (return vs channels), то есть бестолково чуть менее чем полностью.
Re: Можно ли избавиться от async|await?
От: mrTwister Россия  
Дата: 13.12.25 17:34
Оценка:
Здравствуйте, Shmj, Вы писали:

Можно, в Go ровно это и сделали
лэт ми спик фром май харт
Re[2]: Можно ли избавиться от async|await?
От: mrTwister Россия  
Дата: 13.12.25 17:37
Оценка:
Здравствуйте, novitk, Вы писали:

N>В GoLang сделано близко — "горутинность" запихана в вызов, а не в декларацию функции. Другое дело, что разница все равно прошита в самом коде (return vs channels), то есть бестолково чуть менее чем полностью.


На практике "не ждать" нужно очень-очень редко, раз в год можно и канал написать в хитром случае. А по факту весь код в го чистый без async/await мусора и по умолчанию асинхронный.
лэт ми спик фром май харт
Re[3]: Можно ли избавиться от async|await?
От: novitk США  
Дата: 13.12.25 17:56
Оценка: +1
Здравствуйте, mrTwister, Вы писали:

T>На практике "не ждать" нужно очень-очень редко, раз в год можно и канал написать в хитром случае.

Ровно как и в C#/JS/Python. 99% вызовов функций идет в режиме "ждать". Поэтому эта идея ТС плохая:

Получается если не нужно ждать результата функции — пишем наоборот — nowait. Если ждать результат — ничего не пишем, по умолчанию.


T>А по факту весь код в го чистый без async/await мусора и по умолчанию асинхронный.

Религией попахивает. "Еxplicit is better then implicit", как мы знаем.
Отредактировано 13.12.2025 17:58 novitk . Предыдущая версия .
Re[4]: Можно ли избавиться от async|await?
От: mrTwister Россия  
Дата: 13.12.25 18:17
Оценка:
Здравствуйте, novitk, Вы писали:

N>Здравствуйте, mrTwister, Вы писали:


T>>На практике "не ждать" нужно очень-очень редко, раз в год можно и канал написать в хитром случае.

N>Ровно как и в C#/JS/Python. 99% вызовов функций идет в режиме "ждать". Поэтому эта идея ТС плохая:
N>

N>Получается если не нужно ждать результата функции — пишем наоборот — nowait. Если ждать результат — ничего не пишем, по умолчанию.

Только в C# и пр. есть два вида "ждать": можно ждать синхронно, а можно ждать асинхронно. Причем синхронное ожидание внешне никак не отличается от "не ждать". Это разделение не только замусоривает и заставляет делать два варианта функций, но и очень часто приводит к ошибкам, когда внутри асинхронной функции случайно вызвали сихронное ожидание. Хуже всего, что оно даже будет корректно работать, но под нагрузкой выжрет все треды в пуле и приложение встанет колом

T>>А по факту весь код в го чистый без async/await мусора и по умолчанию асинхронный.

N>Религией попахивает. "Еxplicit is better then implicit", как мы знаем.
Все максимально explicit:
foo() — ждем
go foo() — не ждем


Все, больше вариантов нет
лэт ми спик фром май харт
Отредактировано 13.12.2025 18:29 mrTwister . Предыдущая версия .
Re[5]: Можно ли избавиться от async|await?
От: novitk США  
Дата: 13.12.25 18:32
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>Только в C# и пр. есть два вида "ждать": можно ждать синхронно, а можно ждать асинхронно. Причем синхронное ожидание внешне никак не отличается от "не ждать"...., но и очень часто приводит к ошибкам, когда внутри асинхронной функции случайно вызвали сихронное ожидание.

Как это не отличается и какие нафиг ошибки?! Там тип результата разный (Task<T> vs T). Компилятор сразу по рукам.

T>Все максимально explicit:

T>foo() — ждем
T>go foo() — не ждем
T>

T>Все, больше вариантов нет

Речь об explicit в описание функции, а не в вызове. В обеих языках функцию из "ждем" в "не ждем" надо переписывать. Можно даже сказать, что в C# ee переписывать проще, так как каналы это лишние церемонии и в 99% случаев сингулярного результата достаточно.
Отредактировано 13.12.2025 18:40 novitk . Предыдущая версия . Еще …
Отредактировано 13.12.2025 18:38 novitk . Предыдущая версия .
Отредактировано 13.12.2025 18:34 novitk . Предыдущая версия .
Re[6]: Можно ли избавиться от async|await?
От: mrTwister Россия  
Дата: 13.12.25 20:02
Оценка:
Здравствуйте, novitk, Вы писали:

N>Здравствуйте, mrTwister, Вы писали:


T>>Только в C# и пр. есть два вида "ждать": можно ждать синхронно, а можно ждать асинхронно. Причем синхронное ожидание внешне никак не отличается от "не ждать"...., но и очень часто приводит к ошибкам, когда внутри асинхронной функции случайно вызвали сихронное ожидание.

N>Как это не отличается и какие нафиг ошибки?! Там тип результата разный (Task<T> vs T). Компилятор сразу по рукам.

Декларация функций разная, но вызов при этом выглядит одинаково: foo()


T>>Все максимально explicit:

T>>foo() — ждем
T>>go foo() — не ждем
T>>

T>>Все, больше вариантов нет

N>Речь об explicit в описание функции, а не в вызове. В обеих языках функцию из "ждем" в "не ждем" надо переписывать. Можно даже сказать, что в C# ee переписывать проще, так как каналы это лишние церемонии и в 99% случаев сингулярного результата достаточно.

В go ничего переписывать не надо, функция всегда выглядит одинаково. Если клиенту почему-то надо запускать функцию в горутине, он сам ее и запускает. Функции все равно где ее запускает, она асинхронная с самого начала. А вот в C# функцию придется переписать. Причем не просто её переписать, но еще и переписать все функции, которые она вызывает и так далее. Если есть цепочка вызовов Foo->Bar->Baz->ReadFile, и понадобилась асинхронная версия Foo, то придется переписать все функции из этой цепочки вызовов: AsyncFoo->AsyncBar->AsyncBaz->AsyncReadFile. В go ничего не надо переписывать.
лэт ми спик фром май харт
Отредактировано 13.12.2025 20:06 mrTwister . Предыдущая версия .
Re[7]: Можно ли избавиться от async|await?
От: novitk США  
Дата: 13.12.25 20:51
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>В go ничего переписывать не надо, функция всегда выглядит одинаково.

Ты повторяешь одно и тоже. Вместо формализма, что функции в Го не помечены, с которого я собственно и начал, приведи пример реальной функции в go которая бы работала в двух контекстах?
Отредактировано 13.12.2025 20:54 novitk . Предыдущая версия .
Re[3]: Можно ли избавиться от async|await?
От: Doom100500 Израиль  
Дата: 14.12.25 06:40
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>А по факту весь код в го ..... по умолчанию асинхронный.


Это как?

func foo() {
}

func bar() {
  foo() // Так по-умолчанию
  go foo() // Так асинхронно
}
Спасибо за внимание
Re[3]: Можно ли избавиться от async|await?
От: SkyDance Земля  
Дата: 14.12.25 10:18
Оценка:
N>В Erlang разве не обычные синхронные функции, обертывание которых в процессы требует даже большей церемонии чем async/await в C#/JS/Python?

Не знаю, что подразумевается под "церемониями", но там все реально очень просто, в том числе и запуск отдельного процесса. Там всего лишь правильно представлен нужный примитив — `receive`. Поэтому код действительно выглядит как "обычные синхронные функции", которые ты можешь запускать в своем процессе, или в отдельном, и когда тебе требуется результат — делать оный receive. Благодаря pattern matching код выглядит ну очень элегантно. А главное, легко читать и понимать. К тому же call stack нормальный, а не как с C#
Re[4]: Можно ли избавиться от async|await?
От: Артём Австралия жж
Дата: 14.12.25 10:38
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>церемониями", но там все реально очень просто, в том числе и запуск отдельного процесса. Там всего лишь правильно представлен нужный примитив — `receive`. Поэтому код действительно выглядит как "обычные синхронные функции", которые ты можешь запускать в своем процессе, или в отдельном, и когда тебе требуется результат — делать оный receive. Благодаря pattern matching код выглядит ну очень элегантно. А главное, легко читать и понимать. К тому же call stack нормальный, а не как с C#


Написать go вместо async и receive вместо await делает код легкочитабельным?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.