Size: a a a

Kotlin Community

2021 January 06

L

LevT in Kotlin Community
Что за expect/actual? Дайте ссылку
источник

RI

Ruslan Ibragimov in Kotlin Community
Andrew Mikhaylov
Мне кажется, это больше про линковку всё же. Да, expect/actual позволяет слинковать неидентичные типы, но он настолько ограниченный, что интереса с этой точки зрения вряд ли много вызвать может.
Структурная типипизация в номинативной? Звучит же очень круто)
источник

AM

Andrew Mikhaylov in Kotlin Community
LevT
Что за expect/actual? Дайте ссылку
https://kotlinlang.org/docs/reference/mpp-connect-to-apis.html
Это в общем случае про мультиплатформенные возможности котлина.
источник

RI

Ruslan Ibragimov in Kotlin Community
+Два “цвета” функций (suspend)
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
https://kotlinlang.org/docs/reference/mpp-connect-to-apis.html
Это в общем случае про мультиплатформенные возможности котлина.
Ааа.. я ещё не выбрался за JVM
источник

L

LevT in Kotlin Community
Ruslan Ibragimov
Ну визуально не видно каких-то киллер фич там или тут, надо экспертов искать, Брагилевского спроси 😉
Я не думаю, что Брагилевского нанимали "евангелистом"/"адвокатом" котлина. Вряд ли услышу что-то лестное
источник

AM

Andrew Mikhaylov in Kotlin Community
LevT
Ааа.. я ещё не выбрался за JVM
В двух словах — есть несколько диалектов котлина (Kotlin/JVM, Kotlin/JS, Kotlin/Native), различающихся в небольших деталях, и есть отдельный т.н. common диалект, коду на котором нельзя обращаться ни к чему, кроме другого common-кода (щас там сложнее всё, но не принципиально для понимания). При сборке кода под, к примеру, JVM можно взять модули на Kotlin/JVM и на common, они все вместе будут собираться. Вот механизм expect/actual позволяет те вещи, которые не реализуемы в common (к примеру, вывод в консоль везде разный) задекларировать как expect, в платформенном коде написать совместимые actual-декларации, и оно соединится вместе при сборке.
источник

RI

Ruslan Ibragimov in Kotlin Community
Andrew Mikhaylov
В двух словах — есть несколько диалектов котлина (Kotlin/JVM, Kotlin/JS, Kotlin/Native), различающихся в небольших деталях, и есть отдельный т.н. common диалект, коду на котором нельзя обращаться ни к чему, кроме другого common-кода (щас там сложнее всё, но не принципиально для понимания). При сборке кода под, к примеру, JVM можно взять модули на Kotlin/JVM и на common, они все вместе будут собираться. Вот механизм expect/actual позволяет те вещи, которые не реализуемы в common (к примеру, вывод в консоль везде разный) задекларировать как expect, в платформенном коде написать совместимые actual-декларации, и оно соединится вместе при сборке.
Ну и интересное место в данном контексте, в том что можно подсунуть готовый тип

actual typealias AtomicRef<V> = java.util.concurrent.atomic.AtomicReference<V>
источник

L

LevT in Kotlin Community
Andrew Mikhaylov
В двух словах — есть несколько диалектов котлина (Kotlin/JVM, Kotlin/JS, Kotlin/Native), различающихся в небольших деталях, и есть отдельный т.н. common диалект, коду на котором нельзя обращаться ни к чему, кроме другого common-кода (щас там сложнее всё, но не принципиально для понимания). При сборке кода под, к примеру, JVM можно взять модули на Kotlin/JVM и на common, они все вместе будут собираться. Вот механизм expect/actual позволяет те вещи, которые не реализуемы в common (к примеру, вывод в консоль везде разный) задекларировать как expect, в платформенном коде написать совместимые actual-декларации, и оно соединится вместе при сборке.
Благодарю за TLDR!
источник

AM

Andrew Mikhaylov in Kotlin Community
LevT
Я не думаю, что Брагилевского нанимали "евангелистом"/"адвокатом" котлина. Вряд ли услышу что-то лестное
А зря, кстати — у него довольно взвешенная позиция, насколько я понимаю, и он как раз со своим багажом может адекватно сравнить позитивные и негативные стороны разных систем типов, включая котлиновскую.

Если, конечно, ему интересно будет об этом рассказывать :)
источник

RI

Ruslan Ibragimov in Kotlin Community
Ruslan Ibragimov
Ну и интересное место в данном контексте, в том что можно подсунуть готовый тип

actual typealias AtomicRef<V> = java.util.concurrent.atomic.AtomicReference<V>
Тайпклассы на минималках (ха-ха)
источник

AM

Andrew Mikhaylov in Kotlin Community
Ruslan Ibragimov
Ну и интересное место в данном контексте, в том что можно подсунуть готовый тип

actual typealias AtomicRef<V> = java.util.concurrent.atomic.AtomicReference<V>
Ну да, при этом у типа, который тайпалиасом в actual задекларирован, могут быть и другие свойства/методы. С сильной натяжкой, наверное, это можно назвать row polymorphism, но возможность применения этой штуки всё же ограничена.
источник

AM

Andrew Mikhaylov in Kotlin Community
Какие люди. Теперь точно срач начнётся, я пошёл.
источник

JS

Jerzy Syrowiecki in Kotlin Community
Andrew Mikhaylov
Сабтайпинг — он один, да. А вот из всех видов полиморфизма в том же хаскеле нет вроде только полиморфизма подтипов.
Я вот не знаю, а flow typing в хаскеле есть? Условно, в котлине можно написать
val a: String? = null
if(a != null) {
   // a: String
}

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

JS

Jerzy Syrowiecki in Kotlin Community
(меня попросили ответить на этот вопрос) если надо, могу развернуть мысль
источник

AM

Andrew Mikhaylov in Kotlin Community
Jerzy Syrowiecki
(меня попросили ответить на этот вопрос) если надо, могу развернуть мысль
Да нет, не надо, я хорошо понимаю, в чём прелесть паттерн-матчинга.
источник

AM

Andrew Mikhaylov in Kotlin Community
Джава, собственно, той же дорогой пошла. А котлин, насколько я понимаю, ожидает реализацию патмата в джаве, дабы собрать грабли и учесть их при реализации у себя. Но это не точно.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Джава, собственно, той же дорогой пошла. А котлин, насколько я понимаю, ожидает реализацию патмата в джаве, дабы собрать грабли и учесть их при реализации у себя. Но это не точно.
Официальная позиция Бреслава была такая: там много граблей лежит, так что подождем и посмотрим, на что они наступят. А на данный момент кроме компиляторщиков он никому особо не нужен.

От себя могу добавить, что опровержения последнего тезиса так и не было. Под нужен подразумевается не "душа просит", а нельзя заменить почти таким же кодом без него.
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Джава, собственно, той же дорогой пошла. А котлин, насколько я понимаю, ожидает реализацию патмата в джаве, дабы собрать грабли и учесть их при реализации у себя. Но это не точно.
В джава до паттерн матчинга в понимании хаскеля - как до луны. Там даже в планах ничего нет на эту тему
источник

AM

Andrew Mikhaylov in Kotlin Community
Alexander Nozik
Официальная позиция Бреслава была такая: там много граблей лежит, так что подождем и посмотрим, на что они наступят. А на данный момент кроме компиляторщиков он никому особо не нужен.

От себя могу добавить, что опровержения последнего тезиса так и не было. Под нужен подразумевается не "душа просит", а нельзя заменить почти таким же кодом без него.
Ну вы опять за своё. Конечно, можно и без патмата жить, и живём. Но патмат с деструктуризацией при работе с типами данных с парой-тройкой уровней композиции удобен.
источник