@kotlin_lang

Страница 534 из 982
Kira
07.02.2018
19:03:17
В итоге слайс на котлине для байт-массива есть?

Andrew
07.02.2018
19:10:36
Я всё ещё с переменным успехом пытаюсь понять эту конструкцию в asList(). @Harmonizr, просвети меня, как это работает? Для не сильно следящих: https://github.com/JetBrains/kotlin/blob/1.2.20/libraries/stdlib/src/generated/_Arrays.kt#L13011 /** * Returns a [List] that wraps the original array. */ public fun ByteArray.asList(): List<Byte> { return object : AbstractList<Byte>(), RandomAccess { override val size: Int get() = this@asList.size override fun isEmpty(): Boolean = this@asList.isEmpty() override fun contains(element: Byte): Boolean = this@asList.contains(element) override fun get(index: Int): Byte = this@asList[index] override fun indexOf(element: Byte): Int = this@asList.indexOf(element) override fun lastIndexOf(element: Byte): Int = this@asList.lastIndexOf(element) } } Мы возвращаем AbstractList<Byte> с примешенным к нему маркером RandomAccess, и делегируем все методы этому самому AbstractList<Byte>. Но у него ж abstract override fun get(index: Int): E. Откуда берётся реализация?

Google
Andrew
07.02.2018
19:12:13
this@asList -- это кто именно?

Bogdan
07.02.2018
19:12:51
оригинальный обект

проблема в другом



как вы хотите все равно вызовется toList()

Kira
07.02.2018
19:14:02
Блин, глуубже не посмотрел.. почему-то надеялся на жабовский саблист(((

Quantum Harmonizer
07.02.2018
19:14:22
this@asList -- это кто именно?
Это ресивер, ByteArray.

Andrew
07.02.2018
19:14:28
Дошло наконец. Классно.

Bogdan
07.02.2018
19:15:44
Andrew
07.02.2018
19:15:46
И да, slice -- не классно. Ну да что поделать, ByteBuffer так ByteBuffer :)

Kira
07.02.2018
19:16:10
можно обойти но писать нужно свой итератор
А sublist? Не могу найти реализацию

Bogdan
07.02.2018
19:16:12
напиши примитивный итератор

Google
Bogdan
07.02.2018
19:16:26
Kira
07.02.2018
19:17:11
Тогда никакого слайса не вызовется и норм

Andrew
07.02.2018
19:17:51
Да, в доке написано The returned list is backed by this list, так что огонь.

Quantum Harmonizer
07.02.2018
19:34:49
@JvmName на методах интерфейсов запрещено? Нигде не задокументировано, но 'not applicable to this declaration'.

Andrew
07.02.2018
19:38:31
Похоже, не только на них. https://stackoverflow.com/q/47848967 https://stackoverflow.com/a/47526540

Quantum Harmonizer
07.02.2018
19:40:59
На второй натыкался, но там «я думаю, что». Надо в компилятор посмотреть :)

Kirill
07.02.2018
19:50:38
Тащемта вся соль ByteBuffer-а в том, что он занимает константное пространство на протяжении жизни всего приложения, в отличии от пачки ByteArray

так что ByteArray или List<Byte> тут особой роли не играет

Bogdan
07.02.2018
19:54:16
так что ByteArray или List<Byte> тут особой роли не играет
первый примитивные типы, второй не всегда

Kirill
07.02.2018
19:55:05
я это к тому, что лучше держать один ByteBuffer чем ByteArray пересоздавать

Bogdan
07.02.2018
19:56:55
разные задачи, разный подход, код выше будет работать на всех плаформах котлина (вот только по разному, но это не точно)

Gor
07.02.2018
20:30:46
lateinit — зло и костыли, как и синглтоны с параметрами/зависимостями/состоянием
ну часто либо лейтинит, либо налы, выбирай что больше не нравится

кстати, а насколько чревато использование isInitialized? это уже рефлексия или нет? надо бы наверное конвертнуть код в джаву и глянуть что там

Gor
07.02.2018
20:46:15
а ну тогда вполне ок

Kirill
07.02.2018
20:53:40
Bogdan
07.02.2018
20:54:47
Gor
07.02.2018
20:57:55
Лучше в таких случаях не в джаву конвертировать, а на байткод смотреть
может, но подобные вещи все равно плюс минус верно отображаются даже в джаве

Kirill
07.02.2018
21:27:37
kotlinx.coroutines version 0.22.2 is released with a fresh load of bug fixes for everybody and a couple of new extension methods for your reactive integration needs: https://github.com/Kotlin/kotlinx.coroutines/releases/tag/0.22.2

Google
Nixelpixel
08.02.2018
09:04:01
Добрый вечер, может кто скинуть документацию, книги на русском в pdf?

Quantum Harmonizer
08.02.2018
09:05:16
Добрый вечер, может кто скинуть документацию, книги на русском в pdf?
Документация — на kotl.in, книги доступны на Ozon, например.

Nixelpixel
08.02.2018
09:06:17
Спасибо, документации достаточно

Igor
08.02.2018
10:32:10
Можно ли как-то в anko-sqlite отключить ленивое создание таблиц/миграцию?

Vadim
08.02.2018
10:45:48
Выглядит перспективненько https://android-developers.googleblog.com/2018/02/introducing-android-ktx-even-sweeter.html

Kira
08.02.2018
10:47:59
Ktx вроде в день анонса скидывали, или это новое?

Vadim
08.02.2018
10:49:09
Kira возможно, наткнулся на данный пост - вдохновился решил поделиться)

Quantum Harmonizer
08.02.2018
12:31:26
> A serializable class can declare its own serialVersionUID explicitly by declaring a field named "serialVersionUID" that must be static, final, and of type long: Интересно, а должно ли значение поля быть compile-time-константой? Пишут, что можно объявить в компаньоне, но как-то неуверенно: https://stackoverflow.com/a/34242012/3050249

Aleksey
08.02.2018
12:33:26
Привет. Подскажите, почему Short::unaryMinus() возвращает Int ? https://github.com/JetBrains/kotlin/blob/1.2.20/core/builtins/native/kotlin/Primitives.kt#L353

Leonid
08.02.2018
12:34:57
если у тебя был Short.MIN_VALUE, то результат унарного минуса больше не влезает в шорт

Quantum Harmonizer
08.02.2018
12:36:42
Привет. Подскажите, почему Short::unaryMinus() возвращает Int ? https://github.com/JetBrains/kotlin/blob/1.2.20/core/builtins/native/kotlin/Primitives.kt#L353
В JVM все действия производятся либо над 32, либо над 64 битами. В Java битовые операции, например, возвращают int, даже если они производились над байтами или шортами.

Roman
08.02.2018
13:05:38
Не только в JVM. В C++ тоже любая арфметика имеет результатом как минимум int

Pavel
08.02.2018
13:42:27
возможно ли что раньше были процессоры с 16битной арифметикой?

Kirill
08.02.2018
13:46:37
это ведь зависит от архитектуры процессора?
От архитектуры процессора зависит размер int.

Процессор считает на регистрах. Вернуть он может минимум то, что лежит на регистре.

Quantum Harmonizer
08.02.2018
13:47:54
возможно ли что раньше были процессоры с 16битной арифметикой?
У процессора, как правило, один размер регистра. В 21 веке это 32 или 64.

Phil
08.02.2018
14:12:31
Но вообще были и 4х битовые процессоры. Но Java на них не было (

Денис
08.02.2018
14:13:15
И слава богу

Google
Igor
08.02.2018
14:13:38
Денис
08.02.2018
14:16:11
Igor
08.02.2018
14:16:31
Да, но раньше точно могли юзаться отдельно

Maxim
08.02.2018
14:16:34
Извините, что врываюсь в дискуссию образованных людей. У меня очень нубский вопрос. Не для того ли джава использует виртуальную машину, что бы не зависить от архитектуры процессора и железа в целом? Правда, я не силен в этом, но я думал, что jvm она и на кофеварке jvm.

Денис
08.02.2018
14:17:00
Да, но раньше точно могли юзаться отдельно
Это не совсем то же самое, что иметь физически отдельный регистр другого размера всё-таки

Точнее говоря, не зависит от платформы уже "пользовательский" язык программирования, который на этой JVM работает

А сама JVM естественно особенности среды должна учитывать

Maxim
08.02.2018
14:19:30
Да, т.е. я ожидаю что где бы не выполнялся мой код, то Int будет иметь одинаковый размер?

Денис
08.02.2018
14:22:09
Int будет представлять значение одного и того же размера, а его footprint в памяти, кажется, уже не обязан быть строго одинаковым

Quantum Harmonizer
08.02.2018
14:22:15
А как же AL/AH/AX и тд, они же вроде остались
Как легаси, для обратной совместимости? Могу и ошибаться, не знаю.

И JVM в этом плане мыслит 32-битными словами.

Kirill
08.02.2018
14:23:28
JVM предоставляет возможность писать работающий код для всех случаев.

Но если есть какая-то специфика, которая важна для производительности, то надо думать самому.

Но вообще это какие-то embeded, наверное, истории.

Maxim
08.02.2018
14:26:10
Понял, спасибо, а то я паниковать уже начал)

Quantum Harmonizer
08.02.2018
14:26:39
Kirill
08.02.2018
14:26:58
Понял, спасибо, а то я паниковать уже начал)
Это какие-то низкоуровневые частности. Типа того, что на 16 битной системе чтение 32 битного инта не атомарно.

Google
Quantum Harmonizer
08.02.2018
14:27:24
ну JVM гарантирует атомарность чтения/записи volatile-значений

Kirill
08.02.2018
14:27:45
Да.

Короче я про это.

Andrew
08.02.2018
14:28:52
Это какие-то низкоуровневые частности. Типа того, что на 16 битной системе чтение 32 битного инта не атомарно.
Разве такие вещи не закрываются интрисинками на конкретных платформах? В плюсах вроде эти всякие std::atomic<T> вполне себе атомарны, если я правильно помню, даже для значений больше 64 битов. Хотя могу и ошибаться.

Kirill
08.02.2018
14:31:04
Я не готов сейчас детально обсуждать модель памяти JVM и плюсов. И тем более сравнивать. Я просто говорю, что там могут быть тонкости связанные с эффективностью работы многопоточного софта, например. Или кэширования.

И что если о чём-то помнить, можно обойтись без включения дорогих механизмов этих самых гарантий.

Руслан
08.02.2018
14:31:49
Дайджест Котлин Событий: 8 февраля, Санкт-Петербург: @kug_spb KUG St. Petersburg Meetup #2 https://www.meetup.com/St-Petersburg-Kotlin-User-Group/events/247281601/ 15 февраля, Санкт-Петербург: PS JAVA MEETUP #9 https://billing.timepad.ru/event/662151/ 21 февраля, Минск: BKUG #8 https://bkug.by/2018/02/08/anons-bkug-8/ 24 марта, Киев: K•Night https://www.meetup.com/KyivKUG/events/246800518/ Присылайте мне анонсы, и я буду добавлять ваши митапы в дайджест.

Kirill
08.02.2018
14:34:14
ну JVM гарантирует атомарность чтения/записи volatile-значений
Мысль в том, что детали могут быть важны. Но их знание не обязательно для пользования языком.

Bogdan
08.02.2018
14:37:06
Как легаси, для обратной совместимости? Могу и ошибаться, не знаю.
да остались имено для совместимоти, все х86 имеет братную совместимость

хотя раньше так было, сейчас не вкурсе

Alina
08.02.2018
16:02:42
запись планировалась, должна быть

Igor
08.02.2018
16:02:51
пасибо

Кстати, там трансляция идет (правда в шакальном качестве ?) https://youtu.be/Z9g93sn6Ai0

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