Size: a a a

Чат подкаста «Разбор Полётов»

2020 May 19

AA

Alexey Abashev in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
смертью, видимо?
Да
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Рак он такой, да. Иногда проходит, иногда лечится, оба редко.
источник

AL

Alexander Levin in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
Насчёт паттерн матчина по позициям — осознанный дизайн десижн для интеропа с джавой, конечно
Правда теперь может стрельнуть, ибо в Джаве вроде не очень хотят по позиции делать деструктурирование. Но посмотрим, вроде финального решения ещё нету.
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
Насчёт паттерн матчина по позициям — осознанный дизайн десижн для интеропа с джавой, конечно
Не знаю, как одно с другим связано. Я уверен, что этот код должен компилиться в

Int id = user.id;
String username = user.username;
String email = user.email;
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Не знаю, как одно с другим связано. Я уверен, что этот код должен компилиться в

Int id = user.id;
String username = user.username;
String email = user.email;
вопрос в том, как на уровне байткода разрулить вариант не с component1(), component2() и так далее. Надо понимать что сейчас ты произволый класс можешь сделать деструктурируемым, просто добавив к нему правильые методы.
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Должен ли компилятор val (a,b,c) = n расценивать как
val a = n.a
val b = n.b
val c = n.c

?
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
У этого подхода тоже есть проблемы: shading и конфликты
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
/cc @JBaruch

Язык хороший. Когда появился в 2016м, в него положили кучи приятных вещей, которые облегчали людям жизнь. По эргрномике язык (не окружения - ide, тулзов, библиотек) был близок к его тогдашним современникам - TS и Swift. Но имхо развиваться дальше он не стал так же быстро, как TS, и после TSа писать на Котлине очень кринжово. Вроде бы все так, но шаг вправо-влево и не хватает мелочей.

Например, array и object destructuring в Котлине работает не по именам, а по позициям полей. Штааа???

У меня есть класс, в нем id, username, email типов int, string, string. Я в коде пишу

val (id, username, email) = user;

все круто.

Теперь прилетяет реквест юзерам роли добавить. Я добавил поле role: string после юзернейма, и теперь в строке выше в переменную email попадет роль. Компилятор и Идея мне ничего не скажет. Получается, позиционные аргументы я не могу юзать без опасений. И я в 2020м году должен писать кода вида

val email = user.email;

как какой-то крестьянин.

Еще напрягает то, как в языке сделаны Корутины. Ты делаешь контекст, в нем уже можешь awaitить. Но из-за того, что асинхронный код в языке явно не виден, в Идее для мест разрывов управления слева добавлен еще один столбик гаттеров и рисуются такие извилистые стрелки. Язык создавался для JVM - среды, где полно синхронного io, и есть большой риск помешать в одном куске кода бликирующие вызовы и корутины. Явно нужно было для корутин сделать синтаксис. Его не сделали, и получается, что в свою среду разработки пришлось добавлять костылики, чтоб визуально асинхронщина была видна. Ну а если ты Котлин пишешь не в их ide, то ссзб, страдай.

Также мне как человеку, который 10 лет под JVM не писал, был непонятен зоопарк с Фьючерами. Чтобы юзать корутины, нужно все джавашные фьючи конвертить в котлиновские. Чем джавашные не угодили я хз. Но даже если и так, что, нельзя автогенерить при компиляции код для конверсии? И нельзя было его сделать для Scala/Akka фьюч и их аналогов в Clojure и мб Groovy (хз есть ли они там). А так пришлось писать дополнительные методы для конвертации ручками.

Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.

Есть вопросы по тулингу. Я не хочу в 21м веке гонять форматры-линтеры в ide ручками. Я хочу, чтоб а прекоммит хуке у меня все форматилось и линтилось само собой. Почему JetBrains не предоставляет форматилку-линтилку в виде cli-тулзы? Они что, предлагают мне в CI поднимать в доккере IDEA и по ней чем-то Силиниум-подобным кликать кнопки, чтоб провалидировать, что код в пул-реквесте правильно отформатирован? Нашлись конечно отчаянные ребята в Австралии, которые написали свой линтер. Но не понятно, как гарантируется его совместимость с форматтером, который в Idea зашит.

Я пописал на Kotlin неделю в Виксе в 2019. После TS выглядело как привет мой 2015й. Я понимаю, что им восхищаются андроидщики, тк все ж не Java 6. Но имхо надо стараться лучше.
Про фьючеры джавовые каша. Фьючеры и корутины - две совершенно разные вещи. Потому вопрос чем не угодили вызывает как минимум недоумение.... Или понимание того что ты просто не в теме - это норм и простительно, конечно :)
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Andrey Listochkin
/cc @JBaruch

Язык хороший. Когда появился в 2016м, в него положили кучи приятных вещей, которые облегчали людям жизнь. По эргрномике язык (не окружения - ide, тулзов, библиотек) был близок к его тогдашним современникам - TS и Swift. Но имхо развиваться дальше он не стал так же быстро, как TS, и после TSа писать на Котлине очень кринжово. Вроде бы все так, но шаг вправо-влево и не хватает мелочей.

Например, array и object destructuring в Котлине работает не по именам, а по позициям полей. Штааа???

У меня есть класс, в нем id, username, email типов int, string, string. Я в коде пишу

val (id, username, email) = user;

все круто.

Теперь прилетяет реквест юзерам роли добавить. Я добавил поле role: string после юзернейма, и теперь в строке выше в переменную email попадет роль. Компилятор и Идея мне ничего не скажет. Получается, позиционные аргументы я не могу юзать без опасений. И я в 2020м году должен писать кода вида

val email = user.email;

как какой-то крестьянин.

Еще напрягает то, как в языке сделаны Корутины. Ты делаешь контекст, в нем уже можешь awaitить. Но из-за того, что асинхронный код в языке явно не виден, в Идее для мест разрывов управления слева добавлен еще один столбик гаттеров и рисуются такие извилистые стрелки. Язык создавался для JVM - среды, где полно синхронного io, и есть большой риск помешать в одном куске кода бликирующие вызовы и корутины. Явно нужно было для корутин сделать синтаксис. Его не сделали, и получается, что в свою среду разработки пришлось добавлять костылики, чтоб визуально асинхронщина была видна. Ну а если ты Котлин пишешь не в их ide, то ссзб, страдай.

Также мне как человеку, который 10 лет под JVM не писал, был непонятен зоопарк с Фьючерами. Чтобы юзать корутины, нужно все джавашные фьючи конвертить в котлиновские. Чем джавашные не угодили я хз. Но даже если и так, что, нельзя автогенерить при компиляции код для конверсии? И нельзя было его сделать для Scala/Akka фьюч и их аналогов в Clojure и мб Groovy (хз есть ли они там). А так пришлось писать дополнительные методы для конвертации ручками.

Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.

Есть вопросы по тулингу. Я не хочу в 21м веке гонять форматры-линтеры в ide ручками. Я хочу, чтоб а прекоммит хуке у меня все форматилось и линтилось само собой. Почему JetBrains не предоставляет форматилку-линтилку в виде cli-тулзы? Они что, предлагают мне в CI поднимать в доккере IDEA и по ней чем-то Силиниум-подобным кликать кнопки, чтоб провалидировать, что код в пул-реквесте правильно отформатирован? Нашлись конечно отчаянные ребята в Австралии, которые написали свой линтер. Но не понятно, как гарантируется его совместимость с форматтером, который в Idea зашит.

Я пописал на Kotlin неделю в Виксе в 2019. После TS выглядело как привет мой 2015й. Я понимаю, что им восхищаются андроидщики, тк все ж не Java 6. Но имхо надо стараться лучше.
Не очень понял пример про
val email = user.email
А как ты это по-другому видишь?
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Anton Arhipov
Про фьючеры джавовые каша. Фьючеры и корутины - две совершенно разные вещи. Потому вопрос чем не угодили вызывает как минимум недоумение.... Или понимание того что ты просто не в теме - это норм и простительно, конечно :)
Ну там был аргумент про то, что нет способа глазами отличить асинхронный код от синхронного и, в целом, это правда
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Anton Arhipov
Не очень понял пример про
val email = user.email
А как ты это по-другому видишь?
ну он хочет матчинг по именам, я чуть выше написла в чём проблема этого подода
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
Ну там был аргумент про то, что нет способа глазами отличить асинхронный код от синхронного и, в целом, это правда
Нене, я не про это. Про визуальный аспект я понял. Там дальше было про конвертирование и чем джавовые фьючи не угодили и нафига заводить корутины. Я это так понял
источник

AL

Alexander Levin in Чат подкаста «Разбор Полётов»
Anton Arhipov
Не очень понял пример про
val email = user.email
А как ты это по-другому видишь?
Я предположу, что поскольку сравнение с TS было, то и деструктурирование хочется такое же (выдёргивается не по позиции, а по имени параметр объекта)
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Anton Arhipov
Нене, я не про это. Про визуальный аспект я понял. Там дальше было про конвертирование и чем джавовые фьючи не угодили и нафига заводить корутины. Я это так понял
а, да, тут смешал
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
> Опять же. В один мавен артифакт нельзя положить код на Java, Scala, и Kotlin сразу. Почему? Я чего-то думал, что все компилится в .class-файлы и они совместимы между собой. Почему все эти "языки будущего" на JVM за 6-17 лет не смогли друг с другом уживаться, я в упор не понимаю. Но я должен ради них дробить проект на отдельные артифакты, писать билд-скрипты для каждого и для них всех общий.

Это вот странное утверждение. Я про мавен мало знаю, но грэдлм многажды это делал
может быть. В компании в тот момент шла большая миграция на Bazel. Я хотел с ним начать, но коллега резонно заметил, что мы и с Котлином можем на грабли понаступать (с учетом того, что нужно было его подружить со Скала), то лучше взять что-то с чем уже умеем.
источник

AL

Andrey Listochkin in Чат подкаста «Разбор Полётов»
Alexander Levin
Я предположу, что поскольку сравнение с TS было, то и деструктурирование хочется такое же (выдёргивается не по позиции, а по имени параметр объекта)
Да
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Alexander Levin
Я предположу, что поскольку сравнение с TS было, то и деструктурирование хочется такое же (выдёргивается не по позиции, а по имени параметр объекта)
Там пример:

Val email = user.email

Как это писать по другому?

Val email = user

А компилятор пускай сам достанет из юзера что надо, так что-ли?
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Andrey Listochkin
Да
Ну чуть выше я описал проблемы этого подхода и достоинства другого. То есть тут сознательный трейдофф
источник

ПФ

Паша Финкельштейн... in Чат подкаста «Разбор Полётов»
Anton Arhipov
Там пример:

Val email = user.email

Как это писать по другому?

Val email = user

А компилятор пускай сам достанет из юзера что надо, так что-ли?
val (name, age, email) = user. Это компилятор мог бы разрулить, но
источник

AA

Anton Arhipov in Чат подкаста «Разбор Полётов»
Паша Финкельштейн
val (name, age, email) = user. Это компилятор мог бы разрулить, но
А, ок.
источник