
Yury
29.01.2018
17:40:53
трейты зло - трололо

Andrew
29.01.2018
17:41:03
выглядит как интерфейс
Вся суть в том, что можно определить класс, а потом совершенно в другом месте доопределить для этого класса реализацию трейта и после использовать объекты этого класса как реализующие трейт.

Даниил
29.01.2018
17:41:10
короче, жду когда в Kotlin тайпклассы впилят
https://github.com/Kotlin/KEEP/pull/87

Google

Igor
29.01.2018
17:41:13

Ivan
29.01.2018
17:41:15
Берём значит в одну руку маркерные интерфейсы, другой пишем к ним extension методы, реализуем где надо пустой инерфейс - вуаля, примешали

Quantum Harmonizer
29.01.2018
17:41:44

Igor
29.01.2018
17:42:08

Даниил
29.01.2018
17:42:11

Quantum Harmonizer
29.01.2018
17:42:24

Andrew
29.01.2018
17:42:30

Даниил
29.01.2018
17:42:32

Andrew
29.01.2018
17:43:06

Даниил
29.01.2018
17:43:36

Ivan
29.01.2018
17:43:40

Andrew
29.01.2018
17:44:18

Igor
29.01.2018
17:45:20
Ну да, а там где не подумали используем композицию
Ну ты прикинь какой-начнется рай, когда компоратор не надо будет поставлять руками в
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sort-with.html
а он будет приходить implicit ? для любых типов

Google

Даниил
29.01.2018
17:46:24

Boris
29.01.2018
17:46:55

Andrew
29.01.2018
17:46:56
В точку -- по сути синтаксический сахар над композицией.

Quantum Harmonizer
29.01.2018
17:47:40
так что лучше руками

Даниил
29.01.2018
17:47:58
странная логика
всё что за тебя делает компилятор лучше делать руками?

Quantum Harmonizer
29.01.2018
17:48:51

Andrew
29.01.2018
17:48:55
Фух, а я уже запереживал, что холивара не будет.

Даниил
29.01.2018
17:49:14
ну вот посмотри на пропозал с тайпклассами
https://github.com/Kotlin/KEEP/pull/87
по-моему очевидно что там происходит
и никаких обёрток к тому же компилятор не создаёт
при этом система типов становится гибче
PROFIT

Igor
29.01.2018
17:50:00
Я кстати тут подумал, а нельзя ли из expect/actual сделать тайп-классы для бедных ?

Andrew
29.01.2018
17:50:19
Нет, потому что явно надо указывать expect.

Ivan
29.01.2018
18:16:40

Igor
29.01.2018
18:18:27

Andrew
29.01.2018
18:18:39

Google

Andrew
29.01.2018
18:19:20
Ну и да -- я не спец по JVM и не знаю, как это работает в хаскелле, но чёт мне подсказывает, что там это ровно так же, как без трейтов это делают руками -- новый класс, держащий расширяемый как приватный мембер и делегирующее ему все вызовы, которые делает программист. Другое дело, что в Kotlin/JS и Kotlin/Native это может быть реализовано без оверхеда на синтетический класс и делегированные вызовы.

Vladimir
29.01.2018
18:30:49

Kirill
29.01.2018
18:32:47

Andrew
29.01.2018
18:46:20
https://github.com/JetBrains/kotlin/blob/rr/zarechenskiy2/compiler/testData/writeSignature/inlineClasses/simpleSignatureWithInlineClassTypesAsReference.kt
And of course java.lang.Long for kotlin.Long?
Whoops, wrong thread.
До контрол-табался.
Энивей, там вполне честные инлайн-классы, которые даже превращаются в примитивы, где не нужен null.

Vladimir
29.01.2018
19:01:25

Andrew
29.01.2018
19:03:38
Дык я тут тоже писал об инлайн-классах, пусть будет.

Pavel
29.01.2018
19:10:02
А почему никто не любит использовать спринг в котлине? И какой тогда di использовать?
Бут же вообще очень удобный

Kira
29.01.2018
19:30:10
Ну и ребята держат нос по ветру, вставили в пятый спринг расширения котлиновские.. но не заметил существенной разницы, честно говоря.
А embedded по примерам какой-то массивный, в ktor пара строчек, у них - три класса

Даниил
29.01.2018
19:40:56
вот https://github.com/MichaelRocks/lightsaber
в отличие от Kodein резолвит в компайл-тайме, поэтому по идее типобезопасно (не будет NPE в рантайме из-за того что нет соответствующего биндинга)

Andrew
29.01.2018
19:50:10
Часть даггера, написанная на котлине и использующая гредл-плагин вместо процессора аннотаций. Выглядит занятно :)

Bogdan
29.01.2018
19:50:50

Dibro
29.01.2018
20:14:26

Kira
29.01.2018
20:27:41

Google

Bogdan
29.01.2018
20:30:38

Kirill
29.01.2018
21:02:06

Quantum Harmonizer
29.01.2018
21:03:32

Kirill
29.01.2018
21:04:06

Quantum Harmonizer
29.01.2018
21:05:29

Bogdan
29.01.2018
21:12:45

Sergey
29.01.2018
21:13:37
> сама jvm это может
как?

Quantum Harmonizer
29.01.2018
21:16:25
Вернуть int там, где нужен Object? Не может.

Sergey
29.01.2018
21:19:01
можно например вместо инта создавать в методе тип результата long и какое то специальное значение использовать в качетсве SUSPEND_COROUTINE. но причем тут inline классы...

Quantum Harmonizer
29.01.2018
21:20:05

Kira
29.01.2018
21:21:59
Интересно можно ли тогда заинлайнить Maybe

Igor
29.01.2018
21:23:14

Sergey
29.01.2018
21:23:42
еще б дебаггер с корутинами нормально работал
?

Kirill
29.01.2018
21:23:49

Sergey
29.01.2018
21:23:59

Igor
29.01.2018
21:24:51
речь идет как раз про незасыпающие ?
Вот я и не понимаю зачем там корутины, если реально большое кол-во cpu-bound операций.
Корутины даже не могу засыпать в них, если не вставлять везде yeild/delay
Ну разве что сделать свои paralle-коллекции, как в java8, только на корутинах.

Boris
29.01.2018
21:59:58

Google

Bogdan
29.01.2018
21:59:58
> сама jvm это может
как?
в jvm сложная штука там есть много разного, одна из вещей компилирования, в горчих местах, в нативный код.

Sergey
29.01.2018
22:07:00
https://github.com/Kotlin/kotlinx.coroutines/releases/tag/0.22.1
еще один релиз небольшой

Bogdan
29.01.2018
22:08:52
Вернуть int там, где нужен Object? Не может.
есть такое понятие JIT компиляция, я не говорю что не может вернуть Int (объект), а то что эта вещь может оптимизироватся, в пазлерах по джава была такая вещь, если инт -128 - 127 (вроде как, уже давно смотрел), то он обект берется из кеша
вывод токой, зная платформу и ее особености можно забыть об оптимизациях об которых позаботились за нас

Quantum Harmonizer
29.01.2018
22:20:07


Bogdan
29.01.2018
22:24:37
Ну да, мы знаем про JIT-компиляцию.
Кэш Integer'ов явно прописан в исходнике класса, это даже не оптимизация VM.
Ну вот как вместо объекта вернуть либо инт, либо специальное значение? Вернуть лонг :)
ну для начала можно возращать кешуруемый инт. Возращать лонг не варянт, так как jvm жестко прописывает команды, и для чтения лонга по акту нужно два вызова чтения, для этого (вроде) есть специальная команда в jvm. А вообще начинать писать на джава\котлин и думать о анбоксинге, дурустика; экономить памть в масивах там да есть смысл. А если сильно хочется ест специальные либы, которые прям нативный код позволяют делать, правда думаю в джава 9 они не будут работать, хотя хз, если не через Unsafe то будут работать

Quantum Harmonizer
29.01.2018
22:26:06

Bogdan
29.01.2018
22:26:52
тут дело не в котлине или корунтинах а в JVM

Quantum Harmonizer
29.01.2018
22:27:34

Bogdan
29.01.2018
22:27:54

Quantum Harmonizer
29.01.2018
22:28:03
Тогда можно использовать Byte, у него весь диапазон кешируется.

Bogdan
29.01.2018
22:29:05
это только для инта
потому-что часто используется

Quantum Harmonizer
29.01.2018
22:30:19