Size: a a a

2021 January 19

EG

Emmanuel Goldstein in rust_offtopic
Но я оставил кусок своей старой имплементации на случай, если всё-таки эликсир окажется слишком сложным
источник

С

Сергей in rust_offtopic
Emmanuel Goldstein
У меня фундаментально три джобы:
1. Веб-сервер слушает запросы и ставит таски в очередь второй джобе
2. Вторая джоба выполняет некоторый долгий процесс и докладывается о результатах третьей джобе
3. Третья джоба пингует меня в телеграм, на емейл, куда угодно
Я вижу actix-web, 2 канала и 2 футуры, без всяких актиксов и бойлерплейтов
источник

EG

Emmanuel Goldstein in rust_offtopic
Сергей
Я вижу actix-web, 2 канала и 2 футуры, без всяких актиксов и бойлерплейтов
Угу
Что произойдёт, если одна из футур залипнет?
источник

EG

Emmanuel Goldstein in rust_offtopic
Правильно, канал с бэкпрешшуром забьётся с другой стороны и всё нахуй сдохнет
источник

С

Сергей in rust_offtopic
Emmanuel Goldstein
Правильно, канал с бэкпрешшуром забьётся с другой стороны и всё нахуй сдохнет
Здесь ты в любом языке решаешь, терять или не терять данные. Если решаешь терять, возьми теряющий канал на рингбуфере
источник

EG

Emmanuel Goldstein in rust_offtopic
Не говоря уж о том, что просто прокинуть этот канал внутрь актикс-веба — это создавать тип, причём Send + Sync, оборачивать его в web::Data, совать в апп и вытаскивать с другой стороны. Это и есть бойлерпллейт
источник

EG

Emmanuel Goldstein in rust_offtopic
Сергей
Здесь ты в любом языке решаешь, терять или не терять данные. Если решаешь терять, возьми теряющий канал на рингбуфере
Кроме того языка, который сможет запустить ещё один процесс за меня
источник

С

Сергей in rust_offtopic
Emmanuel Goldstein
Кроме того языка, который сможет запустить ещё один процесс за меня
процесс это что в твоих терминах?
источник

EG

Emmanuel Goldstein in rust_offtopic
Процесс — это таск
источник

EG

Emmanuel Goldstein in rust_offtopic
Легковесная корутина
источник

С

Сергей in rust_offtopic
Кто тебе мешает спавнить одну и ту же футуру в расте?
источник

EG

Emmanuel Goldstein in rust_offtopic
А, да, как только у тебя в расте есть футуры — у тебя есть двухцветные функции и сплит экосистемы. Ты больше не можешь делать tracing::span!(), например, тебе нужно изощряться с .instrument()
Чтобы запустить что-то тяжёлое и не убить токио, нужно делать web::block. Причём спаун из токио работать не будет, разные рантаймы.
источник

С

Сергей in rust_offtopic
Emmanuel Goldstein
Не говоря уж о том, что просто прокинуть этот канал внутрь актикс-веба — это создавать тип, причём Send + Sync, оборачивать его в web::Data, совать в апп и вытаскивать с другой стороны. Это и есть бойлерпллейт
А в замыкание точно нельзя пихнуть?
источник

EG

Emmanuel Goldstein in rust_offtopic
Сергей
А в замыкание точно нельзя пихнуть?
Тебе нужно Sender получить из хендлера. Единственный разумный способ это сделать — это пихать его в web::Data
источник

EG

Emmanuel Goldstein in rust_offtopic
Одноцветная асинхронность это вообще невероятный плюс
источник

EG

Emmanuel Goldstein in rust_offtopic
Elixir предназначен для того, чтобы работать с кучей тасков. Насколько я понимаю, при желании он прозрачно их по разным серверам распихает.
источник

s

suhr in rust_offtopic
Emmanuel Goldstein
Да, а потом дедлоки дебажишь неделями
источник

С

Сергей in rust_offtopic
человек бойлерплейт не хочет писать, а ыт предлагаешь весь его код написать два раза )
источник

s

suhr in rust_offtopic
Модель это не весь код.
источник

С

Сергей in rust_offtopic
Emmanuel Goldstein
А, да, как только у тебя в расте есть футуры — у тебя есть двухцветные функции и сплит экосистемы. Ты больше не можешь делать tracing::span!(), например, тебе нужно изощряться с .instrument()
Чтобы запустить что-то тяжёлое и не убить токио, нужно делать web::block. Причём спаун из токио работать не будет, разные рантаймы.
Зачем ты хочешь делать web::block? Читай синхронно из ресивера в отдельном синк треде и делай там таск. Или spawn_blocking, который сделает тебе тоже самое.
источник