@kotlin_lang

Страница 830 из 982
Igor
26.08.2018
20:09:09
Таки есть пpикольный хак, чтобы pаботало. Вот так вот выглядит: https://programmingideaswithjake.wordpress.com/2016/08/27/improved-pattern-matching-in-kotlin/ В итоге на пpактике (пpишлось что-то поменять, но в целом почти так осталось, как в сэмпле выше): when (item.let(PlatformPlanEntity.isNext::get zip PlatformPlanEntity.status::get) .let(Tuple2P.Companion.iso<Boolean, TaskStatus>()::reverseGet)) { Pattern(Tuple2P<Boolean, TaskStatus>::a) -> { } Pattern(Tuple2P<Boolean, TaskStatus>::b andThen TaskStatus.None::equals) -> { } Pattern(Tuple2P<Boolean, TaskStatus>::b andThen TaskStatus.Failure::equals) -> { } Pattern(Tuple2P<Boolean, TaskStatus>::b andThen TaskStatus.Success::equals) -> { } }

Tuple2P соответственно тот же tuple2, только поддеpживающий матчинг.

Не то, чтобы сильно удобно, но в целом выглядит пpикольно.

Google
Artem
26.08.2018
21:14:02
промисы уже не модно?
async await это обертка над промисами)

Иван
26.08.2018
21:59:08
А что есть перфоманс из http клиентов? Пробовал ktor-http-client поверх Apache клиента (HttpClient(Apache)). Есть что-то ещё? CIO клиент что-то не завёлся из-за какого-то header в response незнакомого ему o_O Хочется минимум зависимостей и как минимум 1000 rps. В целях провести нагрузочное тестирование с одной тачки без всяких гатлингов, танков и прочего. Может есть готовые фреймворки для такого?

Sergey
27.08.2018
05:13:50
эх пропустил весь срач про корутины

Mi
27.08.2018
05:19:15
эх пропустил весь срач про корутины
Как будто они тут редкость и сегодня следующего не будет

OlegKrikun
27.08.2018
06:44:10
https://plus.google.com/111471886409455069782/posts/4AxzbjnuRs5

Внезапно

Sergey
27.08.2018
06:46:04
а return@label чем не goto?
тогда break/continue тоже можно к goto приписать

Victor
27.08.2018
06:48:13
тогда break/continue тоже можно к goto приписать
они же только внутри циклов живут, а return где хочешь дёргай

Mi
27.08.2018
06:49:12
Igor
27.08.2018
06:49:16
https://plus.google.com/111471886409455069782/posts/4AxzbjnuRs5
Помнится год назад мы обсуждали статью на эту же тему с хабра. Я думал все уже выучили, как лямбда работают.

Google
Mi
27.08.2018
06:49:24
Просто они более узкоспециализированные

OlegKrikun
27.08.2018
07:02:13
Как-то это не явно, странно что в доках это не описанно большими красными буквами

Костя
27.08.2018
07:11:16
Как-то это не явно, странно что в доках это не описанно большими красными буквами
ты именно про то что если без Runnable как в примере, то использование лямбды каждый раз новый объект создает ?

OlegKrikun
27.08.2018
07:15:39
Ага

Vladimir
27.08.2018
07:16:58
https://plus.google.com/111471886409455069782/posts/4AxzbjnuRs5
Надеяться на какие-нибудь гарантии по identity лямбды - ну такое себе. Как минимум, случайный захват чего-нибудь из окружения может всё изменить.

Quantum Harmonizer
27.08.2018
07:38:18
Как-то это не явно, странно что в доках это не описанно большими красными буквами
Вообще, выглядит довольно очевидно, что для изменения типа объекта нужно его обернуть.)

OlegKrikun
27.08.2018
08:07:00
Вообще, выглядит довольно очевидно, что для изменения типа объекта нужно его обернуть.)
Выглядит просто как сахар, типа мы просто опускаем слово ранабл и котлин сам определяет

OlegKrikun
27.08.2018
08:15:09
По использованию?

Nail
27.08.2018
08:16:36
Мы же объёвляем переменную зараннее. Если бы мы её сразу положили куда нужно, то тогда бы он определил

Quantum Harmonizer
27.08.2018
08:25:24
По использованию?
ТАКОГО язык делать не должен.

Roman
27.08.2018
08:37:31
а return@label чем не goto?
Ну как бы это сказать... Всем. В первую очередь тем, что return/break/continue это _структурные_ конструкции. В отличие от goto они не позволяют сломать вложенность блоков кода (инкапсуляцию куска логики в блок кода), что существенно упрощает анализ логики программы для человека.

Денис
27.08.2018
09:45:47
Ну вообще, по запутыванию кода return@label ~= goto
Нет, потому что return@label - очень частный случай такого перехода

Соответственно классический goto просто за счёт ~безграничной ширины возможностей позволяет сломать куда больше по определению.

Alexey
27.08.2018
09:47:13
Ну энивей, ты не можешь просто читать код сверху вниз

Денис
27.08.2018
09:52:57
Ну энивей, ты не можешь просто читать код сверху вниз
Ну... Return@label практически гарантирует, что ты увидел лейбл (и если ими не злоупотреблять, то это будет примечательно, и запомнится), к которому будет возврат, т.е. шансы запомнить скоуп/контекст такого return, кажется, относительно высокие. А вообще - well, shit, если уж на то пошло, любой сложный код читается не совсем линейно как минимум потому, что где-то могут вызываться другие методы/функции, и если тебе критично важно понимать, что в них произошло, то ты, наверное, будешь прыгать между этими самыми объектами/методами/функциями.

Google
Andrey
27.08.2018
12:26:55
Здесь была ехидная утрированная шутка, что всё программирование - сахар над машинными кодами... Но в целом да, щито поделать
Ну так можно всю математику назвать сахаром поверх арифметики. Даже скорее поверх теории множеств.

Денис
27.08.2018
12:27:28
Alexander
27.08.2018
15:21:15
Как на котлине правильно JMH запустить с состоянием?

Все попытки содрать чужие примеры кончаются Field "array" is declared within the class not having @State annotation. This can result in unspecified behavior, and prohibited.

Quantum Harmonizer
27.08.2018
15:29:13
Как на котлине правильно JMH запустить с состоянием?
кажется, annotation processing не видит аннотаций на котлине. Я писал JMH (по факту — точку входа в бенчмарки) на джаве.

Alexander
27.08.2018
15:29:42
Да у меня все работало в другом проекте без состояния

Здесь рушится на этапе генерации байткода

Хочу проверить скорость чтения/записи из Array<Int> и IntBuffer

О, откадил jmh до 0.4.5, все заработало

Видать что-то испортили

Boris
27.08.2018
15:34:29
Хочу проверить скорость чтения/записи из Array<Int> и IntBuffer
Ставлю на то, что массивы те же самые. Разница в накладных расходах на боксинг

Alexander
27.08.2018
15:35:18
Не должно быть там боксинга.

Quantum Harmonizer
27.08.2018
15:36:01
в Array<Int> же будет

Larymar
27.08.2018
15:36:23
Подскажите что за типы с восклицательным знаком даже не знаю как это погуглить String!

Boris
27.08.2018
15:36:40
Мм, рассчитываешь, что компилятор оптимизирует и сделает из него IntArray?

Alexander
27.08.2018
15:37:40
Котлин должен боксинг съесть вроде как.

Roman
27.08.2018
15:37:44
https://kotlinlang.org/docs/reference/java-interop.html#null-safety-and-platform-types

Google
Alexander
27.08.2018
15:37:45
Разница 15 %

Quantum Harmonizer
27.08.2018
15:37:54
Boris
27.08.2018
15:38:06
Admin
ERROR: S client not available

Quantum Harmonizer
27.08.2018
15:38:26
как и в Java, примитивы (раз)боксятся автоматом, массивы — нет

Alexander
27.08.2018
15:38:26
Почему, я же IntArray оборачиваю, он внутре array примитивов

Quantum Harmonizer
27.08.2018
15:38:56
Array<*> — это всегда массив объектов, а *Array — примитивов

Boris
27.08.2018
15:39:20
Alexander
27.08.2018
15:39:41
array = IntArray(10000) { it } arrayBuffer = IntBuffer.wrap(array)

а, сорри, неправильно написал исходно

Boris
27.08.2018
15:40:42
Мы говорим о том, что Array<> всегда будет ссылки держать внутри

Alexander
27.08.2018
15:40:49
это да

Quantum Harmonizer
27.08.2018
15:40:54
то есть между int[] и IntBuffer такая разница?

Alexander
27.08.2018
15:42:05
да

Boris
27.08.2018
15:42:16
У интбуфера есть очевидные накладные расходы

Alexander
27.08.2018
15:42:46
Сейчас еще проверю для нативного буфера

о

Вот этого я не ожидал совершенно

Benchmark Mode Cnt Score Error Units ArrayBenchmark.benchmarkArrayRead thrpt 10 26864.946 ± 1655.356 ops/s ArrayBenchmark.benchmarkBufferRead thrpt 10 30442.452 ± 3699.404 ops/s ArrayBenchmark.nativeBufferRead thrpt 10 29841.918 ± 2674.617 ops/s

Нативный -это просто аллоцированный и заполненный руками

Google
Alexander
27.08.2018
15:43:38
Я ожидал, что он медленнее будет.

Вопрос возник для реализации многомерных массивов. Насколько вреднео использовать для этого буфферы

Boris
27.08.2018
15:45:31
Инлайн класс матрица ?

Alexander
27.08.2018
15:46:33
Буфер решает много проблем с сериализацией, решейпингом и единым кодом для произвольных форматов

Для матрицы все сделано на масивах, речь об аналоге ndarray

Quantum Harmonizer
27.08.2018
15:47:16
NDArray ?

Alexander
27.08.2018
15:47:32
ага

https://github.com/altavir/kmath/blob/dev/kmath-common/src/main/kotlin/scientifik/kmath/structures/NDArray.kt

В данном случае интерфейсы абстрактные, можно хоть две реализации сделать. Вопрос, сколько теряется на буфферах.

В общем, чувствуется, что для примитивов массивы все-таки быстрее будут. Видимо надо будет делать нескоько реализаций. Много геморроя.

Alexander
27.08.2018
15:52:15
Каким образом?

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