@kotlin_lang

Страница 947 из 982
Alexandr
15.10.2018
07:06:31
с классическими да, придется поплясать что бы в контекст затолкать, а потом еще извлечь когда надо

Кек, я уверен что придётся прыгать с бубном оч много, потому что неявное прокидывание тред локалей - это та еще боль
собственно поэтому транзакционную модель многопоточной в спринге и не запилили

Alexey
15.10.2018
07:08:06
Что люди только не делают лишбы не использовать reader monad или агрументы функции ?

Bogdan
15.10.2018
07:08:53
Что люди только не делают лишбы не использовать reader monad или агрументы функции ?
что люди не делаю лишь бы заставить попробывать сделать монаду :D

Google
Alexandr
15.10.2018
07:09:01
другой интересный момент, getCurrentSession() как хачить ?, только тредлокал тоскать

Alexey
15.10.2018
07:09:52
И тут как бы встаёт перед глазами факт, что пора писать новый стек либ, который откажется от всей этой херни ввиде тредлокалей

Alexey
15.10.2018
07:10:34
Да

Стоит понимать что все наработки прошлых 10-20 лет на java были направлены на поддержания инфраструктуры апликейшен серверов, а там по дефолту сингл тред и jep'ы с аннотациями

А многопоточка этого всего не любит

Alexandr
15.10.2018
07:12:31
я бы так громко не говорил

Alexey
15.10.2018
07:12:32
Она любит иммутабельность и явный код

dimiii
15.10.2018
07:12:56
выкинуть весь jee, ммм, вкусно)
Вы тут шутки шутите, а в каком-нибудь условном Чили эта тема (j2ee) на подъеме и имеет жуткий спрос - напоминает то, что было у нас в середине нулевых и то что Отт сейчас написал

Alexandr
15.10.2018
07:12:57
тредлокалы был достаточно хороший способ поддержания контекста

Google
Alexey
15.10.2018
07:13:58
Руслан
15.10.2018
07:18:50
в то время это казалось хорошей идеей, да
Ты так говоришь как будто сейчас в джаве бы отказались от тредов.

Bogdan
15.10.2018
07:19:45
Она любит иммутабельность и явный код
не совсем это связано, шарить данные между потоками проще иммутабельные. Ну и полноценные треды уже уходят на системный уровень, на прикладном появляются солидные абстракции

Alexey
15.10.2018
07:19:53
Ты так говоришь как будто сейчас в джаве бы отказались от тредов.
Ну если они захотят в многопоточку, то откажутся. А так я про то, что не стоит всё это болото нести в новый язык

Alex
15.10.2018
07:20:07
Как будто монады это рокет сайенс

В 2к18

Alexey
15.10.2018
07:20:38
Да 3 закона прочитать это явно рокет сцайнс

Руслан
15.10.2018
07:20:54
Alex
15.10.2018
07:23:58
Да 3 закона прочитать это явно рокет сцайнс
Причем первых два из них можно в один запихнуть

Alexey
15.10.2018
07:26:07
Ну короче мой поинт в том, что нужны новые идиологичные либы, и вроде котлин в этом направлении движется (тот же ktor), но вот эти поддержки спринга в угоду набора аудитории среди джавистов явно не пойдут языку во благо

Alexey
15.10.2018
07:27:17
monad laws

Alexandr
15.10.2018
07:28:05
бан в гугле?
проф лень, когда просто интересно, но не понадобится

Руслан
15.10.2018
07:31:33
Ну если они захотят в многопоточку, то откажутся. А так я про то, что не стоит всё это болото нести в новый язык
Надо для любителей чистого фп выделить чатик, где они выдумают идеальный язык для 2к18) Правда на нем никто писать не будет, потому что голый язык никому не нужен (Ceylon это доказал) как и чистые фп языки (Доля хаскелей и скалаз мала) . ThreadLocal решает проблемы, которые может не решать контекст(ваши монады, и т.д.), например как не создавать Random в каждом контексте, а использовать один на поток. Поэтому я и спросил про потоки.

В любом случае джависты не будут упарываться по явной передачи этого контекста вглубь, только для того чтобы там иметь доступ к юзер сессии. Как вариант можно юзать DI Container вместо ThreadLocal в этом месте, но и тут нам скажут что контейнеры это плохо)

И все это не отменяет действительности где есть либы с ThreadLocal и с ними нужно жить, как она бы вам не нравилась.

Google
Руслан
15.10.2018
07:37:08
В Kotlin корутинах вот есть неявный контекст и это удобно, я его использую для request-scope. В джаве с тредами для этого годится ThreadLocal, и его там используют. Просто покажите нам пример с reader monad на джава/котлин вместо голосвных "глупцы, используйте монады"

Boris
15.10.2018
07:37:16
Тредлокал абсолютно норм, если выполняет свою прямую задачу: избавляет от конкурентного доступа

Руслан
15.10.2018
07:37:21
Иначе опять будет бла-бла

Руслан
15.10.2018
07:38:43
ReaderMonad (она же функция от одного аргумента) как раз и использутеся для прокидывания контекста
Отлично, пример приложения на java/kotlin пожалуйста. Вы же пишите код, наверняка можете хотя бы скрин прислать где вы используете этот подход.

Alexey
15.10.2018
08:07:29
Отлично, пример приложения на java/kotlin пожалуйста. Вы же пишите код, наверняка можете хотя бы скрин прислать где вы используете этот подход.
Ну приложения я конечно не могу дать, но синтетический пример, по поводу того как прокидывать туже сессию, вот: https://gist.github.com/eld0727/42b9a42d92c8e20dac552c177a67cdff Но можно ещё жестче абстрагироваться от всего этого, если делать так как рассказал чувак про arrow.kt на конфе Подход называется taggless final

+1 пример с thread local random
Никто не мешает создавать их постоянно, это не сильно увеличит нагрузку на цп и гц

+1 пример с thread local random
Но вообще это чутли не единственный случай где локаль имеет право жить, и то только потому что Random - не threadsafe

Alexey
15.10.2018
08:11:45
На основном треке был

Igor
15.10.2018
08:11:55
Он тут есть https://www.youtube.com/playlist?list=PLQ176FUIyIUbVvFMqDc2jhxS-t562uytr ?

Alexey
15.10.2018
08:12:45
Руслан
15.10.2018
08:14:28
Ну приложения я конечно не могу дать, но синтетический пример, по поводу того как прокидывать туже сессию, вот: https://gist.github.com/eld0727/42b9a42d92c8e20dac552c177a67cdff Но можно ещё жестче абстрагироваться от всего этого, если делать так как рассказал чувак про arrow.kt на конфе Подход называется taggless final
Спасибо, принцип я понимаю, причем не обязательно называть это монадой, потому что контекст может быть и просто объектом. А hello world пример не катит, нужно какое-то реальное приложение где сразу будет видно какого это жить с явной передачей контекста.

Руслан
15.10.2018
08:25:45
А вы пишете так? Можете показать свои примеры?

Igor
15.10.2018
08:26:24
А вы пишете так? Можете показать свои примеры?
Как выше заметили, я так пишу, давайте вброшу пример на пару классов, дальше думаю станет понятно.

Google
Руслан
15.10.2018
08:27:27
Забавно, парень который рассказывает как правильно инжектить манадами использует DI контейенер https://github.com/JorgeCastilloPrz/ArrowAndroidSamples/blob/master/tagless-final/src/main/java/com/github/jorgecastillo/kotlinandroid/tagless/algebras/persistence/HeroesRepository.kt

Igor
15.10.2018
08:32:13
А вы пишете так? Можете показать свои примеры?
https://gist.github.com/komigor/9ff7a4b16daadae27be03e5ef70537d7 Выглядит как-то так. Это к андроиду конечно имеет мало отношения, но отличий, при проектировании по SOLID не будет особо.

Руслан
15.10.2018
08:32:19
Alexandr
15.10.2018
08:36:14
короче опять накинули за манады, а аргументов - ноль, пойду писть дальше ООП с АОП и DI

Admin
ERROR: S client not available

Igor
15.10.2018
08:36:49
короче опять накинули за манады, а аргументов - ноль, пойду писть дальше ООП с АОП и DI
Меньше строк (только нужные в функции зависимости), проще читать (если один раз объяснят), нет возможности случайно добавить какой-нибудь мутабельный стейт в класс, и потом от этого страдать.

Igor
15.10.2018
08:38:11
А тестами это как-то покрывалось?
50/50, я могу показать, как покрывать такое тестами, но это код из моей песочницы, где меня интересовал скраппинг youtube, а не тесты, так что там будет общая идея, дальше вы думаю домыслите)

Igor
15.10.2018
08:39:18
А тестами это как-то покрывалось?
https://gist.github.com/komigor/4e8db8ee4478916c26fbe9481e2b4fcf Ну, как-то так выглядит тест с kotlintest

сорян ;) на скорую руку писалось, и мне нужно было дебажить, а не залипать в ascii-треш

Руслан
15.10.2018
08:41:14
https://gist.github.com/komigor/4e8db8ee4478916c26fbe9481e2b4fcf Ну, как-то так выглядит тест с kotlintest
Я обычно под тестати несколько другое имею в виду. Но тут и пример конечно не самый удачный. Какой-то мелкий скраппер, без базы и сессии. При этом полностью завязанный на кишки ютуба

Alexandr
15.10.2018
08:41:29
Меньше строк (только нужные в функции зависимости), проще читать (если один раз объяснят), нет возможности случайно добавить какой-нибудь мутабельный стейт в класс, и потом от этого страдать.
хватит слов! покажите мне код! большой, работающий, код. который будет просто прочитать, разобраться и который будет покрыт тестами

тогда поговорим

Igor
15.10.2018
08:42:08
Тогда и поговорим)

Alexandr
15.10.2018
08:42:21
я бы сказал костыльно, ну да ладно

Владислав
15.10.2018
08:42:43
я бы сказал костыльно, ну да ладно
ну это и подразумевалось

Igor
15.10.2018
08:43:09
Я обычно под тестати несколько другое имею в виду. Но тут и пример конечно не самый удачный. Какой-то мелкий скраппер, без базы и сессии. При этом полностью завязанный на кишки ютуба
Простите, а какая собственно разница, с чем скраппер, если все это "что-то" будет через зависимости кортежем передаваться?

Google
Alexandr
15.10.2018
08:43:34
Да без проблем, заплатите мне деньги, чтобы я его вам написал.
ух ё, еще и деньги заплати что бы мне доказали. нет, обойдусь. неужели нет большого opensource проекта на гитхабе, написанного этим замечательным подходом? :)

Alexandr
15.10.2018
08:43:49
ну это и подразумевалось
сори, не уловил иронии))

Руслан
15.10.2018
08:44:37
Это скрипт, утилита, при этом сильно переинженеренная

Это не приложение, во всяком случае в таком в виде и с таким тестированием

Igor
15.10.2018
08:44:57
Серьезно? Тест без единого ассерта?)
Как я выше и написал, мне они там были не нужны. Я верю в вас и надеюсь, что вы в состоянии написать then("a result matches some predicate") { assert somePredicate(result) }

Alexandr
15.10.2018
08:45:12
Руслан
15.10.2018
08:47:28
Так, давай-те без прямых оскорблений

Не переходить на личности, а обсуждать код

Sergey
15.10.2018
08:57:46
https://www.youtube.com/watch?v=a3agLJQ6vt8

там 2й день записи заливают активно

Igor
15.10.2018
09:05:58
Он вроде на втором дне был
Этот? https://youtu.be/VOZZTSuDMFE

Alexey
15.10.2018
09:06:03
которого нет
Вам там вроде накидали кода оО

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