@kotlin_lang

Страница 594 из 982
Andrew
20.03.2018
10:07:13
это точно, это английским по белому по ссылке написано

Alexey
20.03.2018
10:07:36
Ах да это и в доке написано

В коде всмысле

Google
Mikhail
20.03.2018
10:10:33
ну очепятался

Quantum Harmonizer
20.03.2018
10:10:50
не пойму, что ты имеешь в виду

Andrew
20.03.2018
10:11:54
Семантику reference by value без value-типов на JVM никто не нарушает, inline-классы не об этом же.

Тимур
20.03.2018
10:12:11
а inline классы прямо таки пихают обьект тушкой в стек? они же не доживаю до этапа компиляции же
я не разработчик и не знаю но предполагаю что да, ибо а как еще по другому? если ссылкой, то это уже будет обычный объект со всеми вытекающими из этого накладными расходами

Quantum Harmonizer
20.03.2018
10:12:36
у инлайн-классов нет ни класса ни экземпляров в рантайме

Andrew
20.03.2018
10:12:37
Насколько я понимаю, для сгенерированного байткода разницы между typealias и inline class вообще нету — поправьте меня, если это не так.

Тимур
20.03.2018
10:18:05
Насколько я понимаю, для сгенерированного байткода разницы между typealias и inline class вообще нету — поправьте меня, если это не так.
если inline класс состоит из одного поля, то так и есть а вот если сделают inline классы из нескольких полей, то сравнивать с typealias уже будет нельзя, совсем разные механизмы

Google
Quantum Harmonizer
20.03.2018
10:19:02
и не планируют

Тимур
20.03.2018
10:19:41
в статье на хабре есть слово "пока" то есть не исключено, что потом сделают

Тимур
20.03.2018
10:20:46
https://habrahabr.ru/company/redmadrobot/blog/351516/

Quantum Harmonizer
20.03.2018
10:21:09
Ну, это писали RedMad, не JB

Bogdan
20.03.2018
10:22:57
Ну, это писали RedMad, не JB
да вроде и на митапе говорили, что они попытаются, может не сразу, мож 1.4, Сейчас они больше для корунтин делают

Quantum Harmonizer
20.03.2018
10:23:21
Тимур
20.03.2018
10:23:34
да в принципе тут нет ничего невозможного а фича крайне полезная для performance

Bogdan
20.03.2018
10:25:52
Интересно, значит, прослушал. Как они собираются это сделать?
не знаю, походу они сами пока не знают как это будет выглядеть

Тимур
20.03.2018
10:27:53
это можно сделать очень просто: берем inline класс и во всех местах использования заменяем его на его внутренности собственно, вся вот и вся фича

Quantum Harmonizer
20.03.2018
10:28:28
Andrew
20.03.2018
10:28:54
если б всё было так просто, они бы наверняка сразу их и заимплементили полноценными бы.

Bogdan
20.03.2018
10:29:20
да и в компилятор это прописать не так уж и просто

Тимур
20.03.2018
10:29:49
Как использовать инлайн-класс с двумя полями в качестве возвращаемого значения?
либо запретить, либо заворачивать во временный объект

Quantum Harmonizer
20.03.2018
10:29:58
Bogdan
20.03.2018
10:30:15
Vladimir
20.03.2018
10:30:30
либо запретить, либо заворачивать во временный объект
На то они и inline, чтобы его не было, не?

Тимур
20.03.2018
10:32:11
не сказал бы что бесполезна возвращаемый временный объект потом jvm в стек засунет и все будет ок

Google
Andrew
20.03.2018
10:32:47
JVM без вальхаллы в стек объекты засовывать не умеет.

Тимур
20.03.2018
10:32:52
можно, и jvm эту Pair заоптимизирует

Quantum Harmonizer
20.03.2018
10:33:07
другое дело, что можно запилить глобальный AtomicReferenceArray и возвращать индекс в нём ;)

Тимур
20.03.2018
10:33:15
JVM без вальхаллы в стек объекты засовывать не умеет.
умеет, для этого даже есть специальный термин, забыл только название

Quantum Harmonizer
20.03.2018
10:33:26
JVM без вальхаллы в стек объекты засовывать не умеет.
умеет после нескольких уровней оптимизации, см. escape analysis

Andrew
20.03.2018
10:34:52
ого

Тимур
20.03.2018
10:35:06
На то они и inline, чтобы его не было, не?
тут основная фишка, чтобы заинлайнить долгоживущие объекты, которые, например где то в коллекциях хранятся а то которая передается в параметрах и возвращается как результат jvm и сама осилит

Andrew
20.03.2018
10:36:17
умеет после нескольких уровней оптимизации, см. escape analysis
я правильно понимаю, что эта штука довольно благоприятно влияет на всяческие локально использующиеся стримы, и уймы выделений объектов при них становятся сильно дешевле?

Тимур
20.03.2018
10:36:21
зачем?
потому что много накладных расходов, если 100500 таких мелких объектов

Konstantine
20.03.2018
10:36:45
Нужон сахор. Есть List<MyObject>. У MyObject внутри тоже есть List. Нужно посчитать, сколько в сумме у всех объектов элементов в листах.

Есть что-то подходящее?

Andrew
20.03.2018
10:38:13
listOfMyObjects.map { it.innerList.size }.sum()

Quantum Harmonizer
20.03.2018
10:39:44
listOfMyObjects.fold(0) { acc, obj -> acc + obj.innerList.size() } без промежуточной коллекции

Andrew
20.03.2018
10:40:18
acc +

а вообще да, эффективнее

Quantum Harmonizer
20.03.2018
10:40:46
acc +
спасибо

Google
Andrew
20.03.2018
10:41:41
вот потому я системный софт и не пишу — создаю тут лишние коллекции, даже не задумываясь :)

Konstantine
20.03.2018
10:43:07
Отлично, спасибо

Блин. А filter оказывается только возращает лист. Есть ли возможность отфильтровать именно сам объект листа?

Konstantine
20.03.2018
10:50:18
Нема такого.

Quantum Harmonizer
20.03.2018
10:50:40
У тебя MutableList?

Konstantine
20.03.2018
10:50:41


Хм, точно.

Admin
ERROR: S client not available

Konstantine
20.03.2018
10:51:33
Но всё равно не появляется метод сий чудный.

Quantum Harmonizer
20.03.2018
10:54:25
Но всё равно не появляется метод сий чудный.
Интересно, где я его себе нафантазировал :) https://stackoverflow.com/a/44674612/3050249

Konstantine
20.03.2018
10:56:41
Спасибо)

Konstantine
20.03.2018
10:57:22
а зачем, кстати?
Чтобы сразу отфильтровать сам лист. Логично ж ?

Mikhail
20.03.2018
10:59:33
ладно, не буду допытываться. я просто уже не помню случая, где мне надо было in place фильтровать

но может проблема в том, что я Android разработчик?

dobrowins
20.03.2018
11:15:52
Всем привет! Взываю к богам котлина (тем, кто может спарсить котлиновский код в байткод в уме) — возможно ли использовать совместно destructuring declarations и ленивую инициализацию? Т.е., как сделать такое val (pairFirst, pairSecond) by lazy { getPair() }

очень надо, но обычный делегат lazy требует инициализацию — а именно этого хотелось бы избежать до поры до времени

Andrew
20.03.2018
11:19:55
Всё-таки var pair by lazy ... — это объявление свойства, деструктуризация тут вряд ли вот в таком виде применима. А без неё никак? private val pair by lazy { getPair() } val pairFirst by lazy { pair.first } val pairSecond by lazy { pair.second }

Google
Sergey
20.03.2018
11:26:53
хм, а доступны ли будут нам контракты?

если они щас есть в stdlib, а мы их не можем у себя в коде писать

в 1.3 версии что-то изменится?

Andrew
20.03.2018
11:27:34
Вроде в недавнем докладе обещали движения в этом направлении.





Жабра
20.03.2018
11:52:16
Как в Java/Kotlin узнать размер сущности в байтах? Как sizeof в С

Жабра
20.03.2018
11:53:22
зачем тебе
Работаю с одной Сишной библиотекой, там нужно

Quantum Harmonizer
20.03.2018
11:54:09
только в процессе компиляции/оптимизации он может меняться

Bogdan
20.03.2018
11:54:38
Unsafe
нельзяяя )

Quantum Harmonizer
20.03.2018
11:55:03
нельзяяя )
согласен :)

Bogdan
20.03.2018
11:55:44
Работаю с одной Сишной библиотекой, там нужно
может что нужно для С сделаешь на С

Жабра
20.03.2018
11:56:18
может что нужно для С сделаешь на С
Уже сам об этом подумал

Vladimir
20.03.2018
11:56:24
Работаю с одной Сишной библиотекой, там нужно
JNI в помощь. Но не для sizeof, а для нормальной интеграции

Dmitry
20.03.2018
11:57:01
только в процессе компиляции/оптимизации он может меняться
Так в ансейф же в рантайме будет запрашивать у виртуальной машины? после джита будет меняться?

Vladimir
20.03.2018
11:57:20
Уже юзаю
А для чего sizeof?

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