
Алексей
22.10.2018
15:35:29

Roman
22.10.2018
15:35:44

Алексей
22.10.2018
15:36:04
Если тебе нужна штука, которая будет работать на корутинах и что-то считать

Boris
22.10.2018
15:36:43

Google

Boris
22.10.2018
15:38:08
Но когда я в посланий раз пытался использовать каналы, мне некоторых важных фич не хватало и я их руками писал

Алексей
22.10.2018
15:38:15
Я семафор как раз через актор реализовывал

Roman
22.10.2018
15:38:33
Это будет потокобезопасно?
Я думаю, что да это будет потокобезопасно... В один момент времени читает канал только один поток, не важно сколько у меня там потоков...

Boris
22.10.2018
15:38:35
Возможно сейчас в преддверии релиза там всё получше

Roman
22.10.2018
15:39:27
Блин у меня весь проект на корутинах, но старых, надо как-то собраться и переписать на новые.

Алексей
22.10.2018
15:39:40

Boris
22.10.2018
15:39:44

Roman
22.10.2018
15:40:04
0.25.3 -> 1.0.0
Такой миграции нет.

Mikhail
22.10.2018
15:40:22
эх, попробовать бы на экторах андроид приложение запилить, думаю вышло бы забавно

Boris
22.10.2018
15:40:58

Mikhail
22.10.2018
15:41:25
кажись что да
будет только куча сущностей лишних

Google

Boris
22.10.2018
15:42:53
Но вообще акторы мне понравились, для ui очень удобно
Думаю, что и не только для ui

Igor
22.10.2018
15:43:42
кажись что да
Я вот не уверен. Больше похоже что будет куча объектов со своим состоянием в памяти, а не "поток событий".

Mikhail
22.10.2018
15:44:34
можно и стейтлесс акторы делать

Boris
22.10.2018
15:44:54
У рх тоже всегда есть источник событий и их слушатель

Igor
22.10.2018
15:46:49
можно и стейтлесс акторы делать
Ну это же какие-то не "канонические" акторы получаются. Я думал, это что-то про тру-ооп с инкапсуляцией)) и обменом сообщений.

Mikhail
22.10.2018
15:47:10
какой-нибудь "Умножитель" например
или Strategy

Boris
22.10.2018
15:47:45
Ну да, стейт можно хранить в канале ?

Igor
22.10.2018
15:47:48

Mikhail
22.10.2018
15:48:01

Alexey
22.10.2018
15:49:05

Igor
22.10.2018
15:52:29
И как там?

Boris
22.10.2018
15:57:14

Жабра
22.10.2018
16:09:27
Блин у меня весь проект на корутинах, но старых, надо как-то собраться и переписать на новые.
Ну там не так сложно. По-сути, контекст перенесён в Dispatchers. В тех суспенд функциях, в которых запускаются корутины, нужно вызывать coroutineScope.
Например:
suspend fun foo(): Bar = coroutineScope {
...
async { ... }
}
Остальные корутины, верхнеуровневые, нужно запускать либо через GlobalScope, либо в класс(е/ах) наследоваться от Scope (забыл точное название, мб CoroutineScope, что-то такое) и переопределить coroutineContext.
Например:
class Foo : Scope {
private lateinit var job: Job
override val coroutineContext: ...
get() = job + Dispatchers.Default
fun start() {
job = Job()
}
fun finish () {
job.cancel()
}
}
Ну это наброски

Google

Ivan
22.10.2018
18:15:03

Alexandr
23.10.2018
03:19:12

Alexey
23.10.2018
05:11:34
И как там?
В акке то?
Там нетипизированные акторы - это по сути функция Any -> Unit

Kirill
23.10.2018
05:14:19
Есть Akka.Typed
Хотя и в полуэкспериментальном статусе
ХЗ, кстати, почему Ligthbend (тогда ещё Typesafe) сразу не озаботилась типизацией

Alexey
23.10.2018
05:22:30

Kirill
23.10.2018
05:24:44
Вот и интересно, в чём там сложности, что повёрнутые на типобезопасности чуваки сделали ядро акки нетипобезопасным

Alexey
23.10.2018
05:27:58
Они вобщем то сделали тайпсейф штуки поверх нетипизированные акторов

Irina
23.10.2018
06:10:13
Добрый день! Посоветуйте фреймворк (серверной части) для SPA-приложения с сервером на Котлин
пока рассматриваю ktor

Alexey
23.10.2018
06:26:26

Алексей
23.10.2018
07:42:59
Всем доброе утро. У меня студи обновила версию котлина с 1.2.41 до 1.2.71. И теперь такая lazy-инициализация не работает
val appComponent: AppComponent by lazy {
DaggerAppComponent.builder()
.appModule(AppModule(context))
.build()
}
В lazy компилятор выдает ошибку Type interference failed. Я не могу понять что за тип и как я его должен укахать
Подскажите как решить эту штуку

Dmitry
23.10.2018
07:53:30
Метод билд точно возвращает тип AppComponent?

Kirill
23.10.2018
07:55:43
Затыки с type inference решаются вынесением промежуточных вычислений в переменную с явным типом. Рано или поздно всплывёт какая-нибудь дичь в типах. После решения проблемы переменные можно заинлайнить обратно

Andrey
23.10.2018
09:47:14
кто-то использовал http://ebean-orm.github.io/ ?

Alexandr
23.10.2018
09:48:53

Google

Alexandr
23.10.2018
09:49:45
о, они jpa поддержку котлина заявляют??? норм)
http://ebean-orm.github.io/docs/kotlin/ - TODO! ОГОНЬ!

Alexey
23.10.2018
09:51:25
это что, новый hibernate?

Andrey
23.10.2018
09:51:31
http://ebean-orm.github.io/docs/getting-started/kotlin-first-entity

Alexandr
23.10.2018
09:51:55

Andrey
23.10.2018
09:58:52
ну первый коммит committed on 13 Sep 2012

Alexandr
23.10.2018
10:02:08
хм, да, я думал старше
у них прикольно, а-ля querydsl сразу в ORM http://ebean-orm.github.io/docs/query/background/typesafe

Ivan
23.10.2018
10:06:55
У них в примерах у сущностей все поля var, отвратительно

dimiii
23.10.2018
10:42:14

Alexandr
23.10.2018
10:42:48

dimiii
23.10.2018
10:43:20

Alexandr
23.10.2018
10:43:45
к тому же его, как и хибер, не выбросят, а большинство остальных фреймворков могут кануть в лету
все используют только маппинги и нормальные посотрители запросов, либо spring data

Quantum Harmonizer
23.10.2018
10:44:54

Alexandr
23.10.2018
10:46:37
кстати жук то генерит маппинг классы?

Google

dimiii
23.10.2018
10:50:51

Alexandr
23.10.2018
10:53:00
Book и Author я так понимаю маппинги, BookRecord и AuthorRecord - сущности
первые два генерятся или пишутся руками?

Vladimir
23.10.2018
10:56:51

Bogdan
23.10.2018
10:56:58
это ведь JOOQ ?

Andrey
23.10.2018
10:57:27
аннотации нужны как источник метаинформации, для маппинга это самый раз. когда его используют для описания какой либо логики - это плохо
Аннотации хороши в статически типизированном языке только как мета информация для дополнительных проверок компилятором/статическими анализаторами кода (@Override, @Deprecated, @FunctionalInterface и иже с ними).
Для описания мапингов и прочих архитектурных связок их использовать плохо, так как это не прозрачно и не типо безопасно (большинство таких аннотаций обрабатывается в рантайм рефлексией, которая непрозрачна и не типобезопасна).
Тем более это верно для Kotlin, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций.
Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?

Quantum Harmonizer
23.10.2018
10:58:25


Kirill
23.10.2018
11:00:47
Аннотации хороши в статически типизированном языке только как мета информация для дополнительных проверок компилятором/статическими анализаторами кода (@Override, @Deprecated, @FunctionalInterface и иже с ними).
Для описания мапингов и прочих архитектурных связок их использовать плохо, так как это не прозрачно и не типо безопасно (большинство таких аннотаций обрабатывается в рантайм рефлексией, которая непрозрачна и не типобезопасна).
Тем более это верно для Kotlin, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций.
Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?
+1. Молитесь, чтобы в обработке хиберовского @OneToMany никогда не закрадывалось багов. Закрадётся - взвоешь разбираться, почему оно упало

Иван
23.10.2018
11:00:50

Boris
23.10.2018
11:01:13
Аннотации хороши в статически типизированном языке только как мета информация для дополнительных проверок компилятором/статическими анализаторами кода (@Override, @Deprecated, @FunctionalInterface и иже с ними).
Для описания мапингов и прочих архитектурных связок их использовать плохо, так как это не прозрачно и не типо безопасно (большинство таких аннотаций обрабатывается в рантайм рефлексией, которая непрозрачна и не типобезопасна).
Тем более это верно для Kotlin, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций.
Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?
Это верно, проблема только в том, что сейчас не такой уж большой выбор фреймворков типа экспозед

Quantum Harmonizer
23.10.2018
11:01:38

Иван
23.10.2018
11:01:54

Boris
23.10.2018
11:02:15
Интересно, что новая версия жпа провайдит типобезопасный компайлтайм вариант
Он очень неудобный для котлина, однако он есть


Денис
23.10.2018
11:03:26
Аннотации хороши в статически типизированном языке только как мета информация для дополнительных проверок компилятором/статическими анализаторами кода (@Override, @Deprecated, @FunctionalInterface и иже с ними).
Для описания мапингов и прочих архитектурных связок их использовать плохо, так как это не прозрачно и не типо безопасно (большинство таких аннотаций обрабатывается в рантайм рефлексией, которая непрозрачна и не типобезопасна).
Тем более это верно для Kotlin, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций.
Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?
>Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?
Думаю, вопрос в определённом сорте удобства: людям нравится иметь это под рукой прямо в том же месте, где сами сущности, к которым это относится, объявляются - условно, видеть @Transactional в спринге в тех компонентах, где применяется соответствующая аннотации логика, а не в AbstractPersistenceTransactionConfigFactoryBean (утрирую!) где-то очень далеко.
Трейд-офф типобезопасности/компайл-тайм корректности приложения с простотой поддержания контекста при разработке и собственно разработки.


Kirill
23.10.2018
11:04:11

Boris
23.10.2018
11:05:01

Quantum Harmonizer
23.10.2018
11:05:49