@kotlin_lang

Страница 42 из 982
Boris
13.02.2017
12:31:57
сложно себе представить как это реализовать

Quantum Harmonizer
13.02.2017
12:32:12
инвалидировать весь скомпилированный код)

прям на стеке

Igor
13.02.2017
12:35:13
Сейчас переслушиваю "разб.полетов CLR vs JVM" и там утверждают что в .NET нет ничего похожего на xmx. Получается там и сжатых ссылок не может быть.

Google
Руслан
13.02.2017
12:36:54
Ну в джаве то есть отдельный ключик еще

который http://docs.oracle.com/cd/E15289_01/doc.40/e15062/optionxx.htm#BABCDECI

Nikolai
13.02.2017
12:46:10
А в стандартной поставке Котлина нет никаких событий (типа делегатов/евентов C#) ?

Nikolai
13.02.2017
12:48:17
Ну типа создал объект, в который я могу добавлять подписчиков и всех их потом оптом файрить

Boris
13.02.2017
12:48:58
ну, это вроде не высшая математика, зачем для этого нужны средства языка?

Руслан
13.02.2017
12:49:45
Есть конечно в джаве Observable, но лучше возьми либу)

Igor
13.02.2017
12:50:02
А в стандартной поставке Котлина нет никаких событий (типа делегатов/евентов C#) ?
Вот Илья рассказывает как сделать их самому https://youtu.be/DQqOCx2UJ10?t=27m25s

Nikolai
13.02.2017
12:50:41
ну, это вроде не высшая математика, зачем для этого нужны средства языка?
А я не про среддства языка, я про стандартную либо

Вот Илья рассказывает как сделать их самому https://youtu.be/DQqOCx2UJ10?t=27m25s
Ну как сделать самому я и сам догадываюсь, думал может просто уже есть)

Nikolai
13.02.2017
12:51:44
Ну дааа) но есть нюансы)

Google
Глеб
13.02.2017
12:52:40
Привет! А может кто-нибудь мне объяснить, зачем нужны inline-функции? Я что-то не понимаю, какие у них приемущества по отношению к обычным, как и где ими пользоваться.

Nikolai
13.02.2017
12:53:45
Нууу считается что если функцию заинлайнили то в рантайме не будет оверхеда на её вызов, и да, почемуто в котлине это необходимое условия для reified generics у функций

Quantum Harmonizer
13.02.2017
12:54:09
Привет! А может кто-нибудь мне объяснить, зачем нужны inline-функции? Я что-то не понимаю, какие у них приемущества по отношению к обычным, как и где ими пользоваться.
Код inline-функции встраивается прямо в место вызова. Если в функцию передавалась лямбда, её код встраивается. Это даёт ощутимое ускорение по сравнению с передачей реализации интерфейса.

Boris
13.02.2017
12:54:22
Привет! А может кто-нибудь мне объяснить, зачем нужны inline-функции? Я что-то не понимаю, какие у них приемущества по отношению к обычным, как и где ими пользоваться.
инлайн-функции это вроде макросов. Плюс они умеют внутри себя использовать тип дженерика и инлайнить тело переданной в него лямбды

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

Глеб
13.02.2017
12:55:46
Спасибо, ребята, пошел смотреть, что такое reified generics.

Boris
13.02.2017
12:56:00
потому что с оптимизацией неплохо справляется jit

Kirill
13.02.2017
12:57:47
Спасибо, ребята, пошел смотреть, что такое reified generics.
это когда ты внутри параметризованной <T> функции можешь делать, условно, new T();

Quantum Harmonizer
13.02.2017
12:58:08
Спасибо, ребята, пошел смотреть, что такое reified generics.
Ну, например, есть функция fun <reified T> Any.crashIf() { if (this is T) throw AssertionError() }можно вызвать так: "hello".crashIf<String>()именно reified позволяет тебе получить живой тип внутри функции

Kirill
13.02.2017
12:59:27
new нельзя, и не только потому что в Котлине нет new
там есть синтаксис который по сути это делает T::class.java.newInstance()

Глеб
13.02.2017
12:59:37
Спасибо!

Boris
13.02.2017
13:00:27
T::class.createInstance() в 1.1

Quantum Harmonizer
13.02.2017
13:00:39
там есть синтаксис который по сути это делает T::class.java.newInstance()
Это можно сделать с любым классом, inline не при чём, всё равно получается рефлексия

Nikolai
13.02.2017
13:00:57
Aliaksei
13.02.2017
13:03:04
А что там в котлине как аналог stream().limit(n)?

Igor
13.02.2017
13:03:06
ОК, я думал у ты хочешь предложить хорошую альтернативу (имплементацию на уровне JVM) именно для дженериков.

Google
Boris
13.02.2017
13:03:51
Aliaksei
13.02.2017
13:03:56
во, сижу вспомниаю... Спасибо

Nikolai
13.02.2017
13:04:44
ОК, я думал у ты хочешь предложить хорошую альтернативу (имплементацию на уровне JVM) именно для дженериков.
Ну тут нет никаких альтернатив, либо как в С++ городить отдельный код для каждого использованного типа, либо таскать ссылку на класс в рантайме в том или ином виде

Igor
13.02.2017
13:05:25
Ну проект Valhalla может поможет (году так в 2050)

Quantum Harmonizer
13.02.2017
13:06:25
WhateverClass::class.java.newInstance()

Это не нормальный вызов конструктора, не new + incokespecial <init>, это reflections, не стоит примешивать это к заслугам inline/reified.

Nikolai
13.02.2017
13:08:38
А кстати котлиновские рефрекшены не умеют вызывать конструкторы?

Nikolai
13.02.2017
13:09:23
А! Крутяк! Параметры можно будет передавать?)

Nikolai
13.02.2017
13:09:39
офигенно!

Quantum Harmonizer
13.02.2017
13:09:58
офигенно!
А что крутого? Чем отличается от newInstance? :)

Boris
13.02.2017
13:10:17
офигенно!
но не в createInstance()

Nikolai
13.02.2017
13:10:18
Нууу в ньюинстанс нельзя передавать параметры

Ну может он ещё сможет в компайл тайм конструктор найти в случае инлайна

Boris
13.02.2017
13:11:16
String::class.primaryConstructor?.call() типа такого зато можно написать

в call можно параметры передать

Google
Nikolai
13.02.2017
13:12:03
эт гуд

ревлекшен в Котлине всетаки куда более человечный чем в жабе

Boris
13.02.2017
13:12:39
да, но это в 1.1 только

Kirill
13.02.2017
13:12:44
Это не нормальный вызов конструктора, не new + incokespecial <init>, это reflections, не стоит примешивать это к заслугам inline/reified.
но без reified нельзя вызвать ::class и, соответственно, так или иначе, вызвать конструктор конкретного T ?

Boris
13.02.2017
13:12:48
в 1.0 был сильно хуже

Nikolai
13.02.2017
13:12:58
Но всеравно лучше чем в джаве)

Quantum Harmonizer
13.02.2017
13:13:09
Nikolai
13.02.2017
13:13:21
я хз, я просто мечтаю)

Boris
13.02.2017
13:13:28
при переходе на 1.1 удалил весь файлик reflect.kt

Kirill
13.02.2017
13:16:06
Можно передать класс, как в Java.
как ещё один параметр в метод? Class<T> typeholder и для него делать typeHolder.newInstance() ?

Quantum Harmonizer
13.02.2017
13:16:26
Kirill
13.02.2017
13:16:43
ну да. я имел ввиду что с reified можно так делать ничего не передавая. удобнее.

Boris
13.02.2017
13:17:39
основное удобство, конечно, это когда используешь эту штуку с выводом типов

если буквально передавать, то по большому счету не так-то и важно в параметр или дженериком

т.е. если пишешь val component: SomeComponent by inject() то удобно, что за тебя тип выведется и подставится

Igor
13.02.2017
13:20:20
Кстати, помню Бреслав рассказывал что в Kotlin могут сделать свои Value типы. Что-нибудь новое слышали об этом?

Quantum Harmonizer
13.02.2017
13:20:58
звучит знакомо)

Boris
13.02.2017
13:21:00
Кстати, помню Бреслав рассказывал что в Kotlin могут сделать свои Value типы. Что-нибудь новое слышали об этом?
без поддержки в jvm очень ограниченные и то пока непонятно когда за это возьмутся

Google
Sergey
13.02.2017
13:22:00
Value types We plan to support Project Valhalla once it is released as part of the JDK

Boris
13.02.2017
13:22:12
не, я так понял, что были идеи как сделать value-типы для одногоз начения без поддержки в jvm

Sergey
13.02.2017
13:22:32
а в чем от них профит? offheap?

Boris
13.02.2017
13:22:37
чтобы зампрувить делегаты

сейчас делегаты требуют создания лишенго инстанса

с value-типами можно было бы сэкономить

Sergey
13.02.2017
13:24:02
сейчас делегаты требуют создания лишенго инстанса
я думал для делегатов там просто методы генерят в твой класс

или делают обертку и ты ее расширяешь?

Boris
13.02.2017
13:24:32
делегат это просто объект у которого вызываются методы get и set

для получения значения

которое будет использоваться фактически

Sergey
13.02.2017
13:25:19
https://kotlinlang.org/docs/reference/delegation.html ты не об этом, верно?

Boris
13.02.2017
13:25:21
и его можно использовать в режиме синглтона, но обычно делегаты хранят состояние

нет, я про делегаты, которые для полей

Sergey
13.02.2017
13:25:55
понял

Boris
13.02.2017
13:25:59
и с 1.1 для локальных переменных еще

Tony
13.02.2017
15:06:50
fun getList(): List<Int> { return arrayListOf(1, 5, 2) }

как бы вы вернули отсортированный по убыванию массив?

то есть будет что-то типа

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