@kotlin_lang

Страница 968 из 982
Алексей
22.10.2018
15:35:29
Roman
22.10.2018
15:35:44
Может взять нормальный AtomicLongAdder и не выеживаться все-таки?)
Это часть другой большой логики. Мне нужна подписка на этот счетчик.

Алексей
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
Возможно сейчас в преддверии релиза там всё получше
Тут мелькал человек, который говорил, что они что-то вроде utils делают для корутин

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
какой-нибудь "Умножитель" например
Больше похоже на pure-function

Mikhail
22.10.2018
15:48:01
Больше похоже на pure-function
в ооп функции- объекты)

Больше похоже на pure-function
https://ru-lambda.livejournal.com/27669.html

Alexey
22.10.2018
15:49:05
Больше похоже на pure-function
Главное чтобы не было как в акке

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
Alexandr
23.10.2018
03:19:12
бой за секьюрити уже проигран, еще не начавшись, кмк
лол. где он тогда не проигран? (правильный ответ - в https с тем же json)

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
ХЗ, кстати, почему Ligthbend (тогда ещё Typesafe) сразу не озаботилась типизацией
Озоботились, это уже 5ая экспериментальная версия

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
пока рассматриваю ktor
правильным курсом движетесь товарищ Ирина

Алексей
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
это что, новый hibernate?
он наоборот очень стар

это что, новый hibernate?
Current version - 11.22.10

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
о, они jpa поддержку котлина заявляют??? норм)
Как-будто что-то хорошее. Вот кстати, куда еще можно бежать с jpa/hibernate https://github.com/requery/requery

dimiii
23.10.2018
10:43:20
я ничего плохого в JPA не вижу
я согласен с мнением, что это такой очередной ejb2

я ничего плохого в JPA не вижу
https://blog.jooq.org/2015/04/15/how-jpa-2-1-has-become-the-new-ejb-2-0/

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

https://blog.jooq.org/2015/04/15/how-jpa-2-1-has-become-the-new-ejb-2-0/
упаси боже, никто эти аннотации не использует

все используют только маппинги и нормальные посотрители запросов, либо spring data

Alexandr
23.10.2018
10:46:37
https://blog.jooq.org/2015/04/15/how-jpa-2-1-has-become-the-new-ejb-2-0/
аннотации нужны как источник метаинформации, для маппинга это самый раз. когда его используют для описания какой либо логики - это плохо

кстати жук то генерит маппинг классы?

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, где архитектура приложения может описываться на том же языке, что и алгоритмы, благодаря наличию дженериков, функций высших порядков и прочих высокоуровневых абстракций. Зачем вообще использовать мета язык (аннотации) для описания того, что может быть описано языком?

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
Иван
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
Но хочется придумать таки (нормальный!) способ к полям добавлять метаданные.
Думается мне, тяжко это будет, пока поля реализованы так, как реализованы - без внятной модели метапрограммирования с их использованием (рефлексию не предлагать). В каком-то приближение линзы-телескопы из ФП могут это дать, но в очень начальном приближении

Quantum Harmonizer
23.10.2018
11:05:49
Думается мне, тяжко это будет, пока поля реализованы так, как реализованы - без внятной модели метапрограммирования с их использованием (рефлексию не предлагать). В каком-то приближение линзы-телескопы из ФП могут это дать, но в очень начальном приближении
Я сейчас для DTO испольую другую модель: объявление поля — это объект; DTO в обмен на объявление поля выдаёт его значение (типа геттер такой). Базовые данные спокойно влазят в объявление поля; проблема в том, что на сериализованую форму и на объектную модель это мапптся по-разному. И имена одних полей иногда должны различаться для разных сред.

Страница 968 из 982