Size: a a a

Programming Offtop

2020 July 25

(

( in Programming Offtop
Да в принципе неважно, решается оно там чем-то или нет, просто зачем мне в то, что решается дешугарингом, пихать ещё и корутины. Я кстати никогда и не утверждал, что do-нотация нужна в языке @ilmirus
источник

I

Ilmir in Programming Offtop
Andrew Mikhaylov
Опасность, насколько я понял, решается мультифаером, отсутствие которого — техническое решение, а не концептуальное. @ilmirus может меня поправить.
Мультифайр можно сделать через рефлексию
источник

IO

Iaroslav Orlov in Programming Offtop
(
Да в принципе неважно, решается оно там чем-то или нет, просто зачем мне в то, что решается дешугарингом, пихать ещё и корутины. Я кстати никогда и не утверждал, что do-нотация нужна в языке @ilmirus
но с ней лучше
источник

AN

Alexander Nozik in Programming Offtop
(
Да в принципе неважно, решается оно там чем-то или нет, просто зачем мне в то, что решается дешугарингом, пихать ещё и корутины. Я кстати никогда и не утверждал, что do-нотация нужна в языке @ilmirus
Так ты напиши, что тебе надо без "сделайте мне как в хаскеле"
источник

I

Ilmir in Programming Offtop
(
Да в принципе неважно, решается оно там чем-то или нет, просто зачем мне в то, что решается дешугарингом, пихать ещё и корутины. Я кстати никогда и не утверждал, что do-нотация нужна в языке @ilmirus
Эм. А цепочки flatMap ручками писать каждый раз? Это же полный пиздец.
источник

AN

Alexander Nozik in Programming Offtop
Andrew Mikhaylov
Опасность, насколько я понял, решается мультифаером, отсутствие которого — техническое решение, а не концептуальное. @ilmirus может меня поправить.
Мультифаер можно сделать хоть сейчас. Ключевая проблем - гарантировать восстановление контекста и того ,что все объекты в нем восстанавливаемые.
источник

(

( in Programming Offtop
Ilmir
Эм. А цепочки flatMap ручками писать каждый раз? Это же полный пиздец.
бля, да причем здесь монады? Я пример привел, какие контракты можно было бы накладывать, необязательно именно монадические, просто они сразу вспоминаются
источник

I

Ilmir in Programming Offtop
источник

AM

Andrew Mikhaylov in Programming Offtop
Alexander Nozik
А можно конкретнее?
Там библиотечка, которая построена вокруг джавового Proxy. Отдаёшь ей интерфейс с набором методов, где каждый соответствует конкретному вызову HTTP API. Респонсы описываются модельками В качестве типа возврата такому методу можно указать на выбор:
* Саму модельку. Будет синхронный вызов.
* Response<моделька>. Синхронный вызов, с которого можно забрать статускод и метаданные респонса, а также модельку.
* Single<моделька>.
* CompletableFuture<моделька>.
* ListenableFuture<моделька> (Guava).
* scala.concurrent.Future<моделька>.
Под это дело пишутся адаптеры, которые берут тип возврата функции и выполняют запрос + формируют ответ для вызывающего кода в конкретном виде.

А ещё можно пометить функцию как suspend. И под это пришлось писать костыль в самом ретрофите.

Как-то так.
источник

AN

Alexander Nozik in Programming Offtop
@ilmirus До меня вдруг только что дошло, что я на самом деле это уже сделал в одном частном случае - форкающихся генераторах случайных чисел. Там как раз на каждую новую корутину идет ветвление генератора автоматом в контексте.
источник

BP

Bogdan Panchenko in Programming Offtop
Ilmir
Ильмир в скором времени вообще джыэсом займётся, передав дела по корутинам.
Ты страдаешь мазохизмом ? :D
источник

AM

Andrew Mikhaylov in Programming Offtop
Alexander Nozik
Мультифаер можно сделать хоть сейчас. Ключевая проблем - гарантировать восстановление контекста и того ,что все объекты в нем восстанавливаемые.
Я о безопасном мультифайре, ясен хрен.
источник

AN

Alexander Nozik in Programming Offtop
Andrew Mikhaylov
Там библиотечка, которая построена вокруг джавового Proxy. Отдаёшь ей интерфейс с набором методов, где каждый соответствует конкретному вызову HTTP API. Респонсы описываются модельками В качестве типа возврата такому методу можно указать на выбор:
* Саму модельку. Будет синхронный вызов.
* Response<моделька>. Синхронный вызов, с которого можно забрать статускод и метаданные респонса, а также модельку.
* Single<моделька>.
* CompletableFuture<моделька>.
* ListenableFuture<моделька> (Guava).
* scala.concurrent.Future<моделька>.
Под это дело пишутся адаптеры, которые берут тип возврата функции и выполняют запрос + формируют ответ для вызывающего кода в конкретном виде.

А ещё можно пометить функцию как suspend. И под это пришлось писать костыль в самом ретрофите.

Как-то так.
Ну так это уже не корутины, а компиляторная обвязка под конкретную либу поверх корутин.
источник

I

Ilmir in Programming Offtop
Из этого я понял, что ты хочешь монады. Я тебе говорю, что можно попрыгать и сделать. Но будет не идиоматично. Приведи тогда другой пример, который нельзя саспендами покрыть.
источник

IO

Iaroslav Orlov in Programming Offtop
Ilmir
Ильмир в скором времени вообще джыэсом займётся, передав дела по корутинам.
F
источник

(

( in Programming Offtop
Ilmir
Из этого я понял, что ты хочешь монады. Я тебе говорю, что можно попрыгать и сделать. Но будет не идиоматично. Приведи тогда другой пример, который нельзя саспендами покрыть.
Все, теперь я понял, что ты изначально не понял мой посыл
источник

(

( in Programming Offtop
Сейчас распишу
источник

AM

Andrew Mikhaylov in Programming Offtop
Alexander Nozik
Ну так это уже не корутины, а компиляторная обвязка под конкретную либу поверх корутин.
Речь не об обвязке под конкретную либу, речь о том, что саспенды выбиваются из ряда решений для построения асинхронности, и код с контрактами, покрывающими монадоподобные фьючи, под саспенды в лучшем случае (Proxy / кодген) придётся писать отдельный, в худшем это вообще невозможно унифицировать.
источник

I

Ilmir in Programming Offtop
Ответ всем, кто ответил про мои планы заняться джиэсом: да, я знаю, что там пиздец. Вот этот пиздец я хочу хоть немного улучшить. В частности, добавить поддержку воркеров.
источник

AM

Andrew Mikhaylov in Programming Offtop
Но Егор щас напишет свои мысли и наверняка донесёт свою мысль лучше меня.
источник