Size: a a a

2021 July 10

DH

Dark Hole in dlang.ru
Про всех
источник

KF

Konstantin Firsov in dlang.ru
ммм... я скорее подразумевал концепцию. Насколько я помню async\await есть даже в C#, но не помню как там работает, поэтому возьму js и dart.
//JS
async function foo() {
 return 1
}
//может синхронный вызов, а может и нет
let bar = foo()
console.log(bar)
//Promise { 1 }

//Dart
Future<int> foo() async {
 return 1;
}
// Не сработает: A value of type 'Future<int>' can't be assigned to a variable of type 'int'.
//int bar = foo();

//тоже самое, может синхронный, а может и нет
var bar = foo();
print(bar);
//Instance of '_Future<int>'
источник

EP

Egor Pugin in dlang.ru
а зачем их нужно отличать?
источник

KF

Konstantin Firsov in dlang.ru
многие операции последовательны или же опираются на результаты предыдущих. При асинхронном вызове результата никто не ждет, это может создавать очень и очень трудноуловимые баги, в зависимости от стечения обстоятельств и "везучести" разработчика). Из проблемного... ну...., например, мне везло терять сообщение об ошибке в рутовом хандлере приложения, который должен был быть последним рубежом обороны и логировать ошибку. Но приложение успевало лечь быстрее чем он отрабатывал, хех).
источник

И

Игорь in dlang.ru
js такое позволяет, но например раст - нет
источник

И

Игорь in dlang.ru
ты не сможешь так ошибиться
источник

EP

Egor Pugin in dlang.ru
да, примерно об этом и речь
источник

DH

Dark Hole in dlang.ru
У тебя был асинхронный логгер?
источник

DH

Dark Hole in dlang.ru
За счёт чего? Типы?
источник

И

Игорь in dlang.ru
да
источник

DH

Dark Hole in dlang.ru
TS такие проблемы решает, тогда уже. Если не злоупотреблять any.
источник

KF

Konstantin Firsov in dlang.ru
либы повсеместно асинхронные, любой их вызов с вероятностью в 99% будет где-то асинхронным, что заставит пометить функцию\метод как async. Так что код постепенно становится асинхронным в т.ч. и вызовы логирования.
источник

И

Игорь in dlang.ru
ну это хорошо. давать программисту так ошибаться - это жестоко
источник

KF

Konstantin Firsov in dlang.ru
с другой стороны, это побочный эффект от возможности запускать асинхронные либы в синхронном коде с минимумом телодвижений. В любом случае, чем-то нужно жертвовать, возможно, это жертва в виде подобных багов вполне допустима, хз.
источник

EP

Egor Pugin in dlang.ru
или нет
источник

DH

Dark Hole in dlang.ru
Ну у меня есть стойкое подозрение, что асинхронное логирование даже если не забывать await будет источником проблем. Потому что никто порядок вызова асинхронных функций — это уже в каком-то смысле внутрянка, на которую полагаться не стоит.
источник

KF

Konstantin Firsov in dlang.ru
так внутри по всем методам могут быть строго синхронные вызовы, вернее в строгом порядке через await. Однако сам факт того, что там await заставляет пометить функции как асинхронные со всеми вытекающими.
источник

DH

Dark Hole in dlang.ru
Use coroutines, Luke
источник

KF

Konstantin Firsov in dlang.ru
с другой стороны, тот же дарт не позволит сделать var result = 4 + foo(); А приведение в строку это скорее побочка у любых оберток, у той же джавы - Optional и т.п. врапперы. Все они потенциально могут в строковые значения.
источник

KF

Konstantin Firsov in dlang.ru
будет toString() вызываться.
источник