
Oleksandr
27.10.2016
06:18:03
"А так то скала с ним мало общего имеет." — где-то 90% "идей" котлина взято из скалы

Dmitry
27.10.2016
06:18:10
Ну вот потму и говорю что он скале не конкурент
Это каких кроме дата класса ?
Вал вар, обжект

Google

Dmitry
27.10.2016
06:19:04
Патерн матчинга нет, имплиситов нет.

Oleksandr
27.10.2016
06:19:18
патмат недо есть, и недо имплиситы есть
точнее, имплисит расширение, но это ближе к шарпу

Dmitry
27.10.2016
06:20:04
Нет там пм, и не спешат, по словам жетбрейнс людей. Мол, не нужно это.

Oleksandr
27.10.2016
06:20:19
в 1.1 делают таплы типа val (a, b) = foo
не нужно, ага

Dmitry
27.10.2016
06:20:57
Это не особо-то пм :-) такого сахарка везде полно

Юрий
27.10.2016
06:21:25
это называется деструктуризация, и это отдельная фича

Dmitry
27.10.2016
06:21:27
Это ж как ее.. деструктуриз
Да :-)

Oleksandr
27.10.2016
06:21:43
и в чем разница от патмата?
кроме того, что последний умеет больше?

Юрий
27.10.2016
06:21:58
в том, что ты так поматчить не сможешь

Google

Oleksandr
27.10.2016
06:22:04
эээ
ещё как могу

Dmitry
27.10.2016
06:22:13
Вот если б
Матч п {
Кейз (33,б) ..
Кейз (а, 22) ...
}

Oleksandr
27.10.2016
06:22:27
вон тот кусок кода выше — именно патмат именно в скале

Юрий
27.10.2016
06:22:29
скажем, без деструктуризации не будет паттерн матчинга

Kirill
27.10.2016
06:22:51
угу, и такой патмат работает с меньшей производитеьлностью, чем обычный instanceof и кастинг

Dmitry
27.10.2016
06:23:00
Ыы, о нет
А без инстансоф да кастинга вообще огонь jmp по адресу да пошел

Kirill
27.10.2016
06:24:49

Mikhail
27.10.2016
06:24:54
паттерн матчинг и деструктуризация - это сахарок и в котлине его также не трудно будет добавить

Dmitry
27.10.2016
06:25:50
Наверн не в кассу, не правильно понял твое про производительность :-)

Oleksandr
27.10.2016
06:26:29
едем дальше по фичам — строковая интерполяция (опять-таки слабее оригинала), тайп алиасы
фишка в том, что вот все эти "слабее оригинала" иногда будут преимуществом

Kirill
27.10.2016
06:27:19

Dmitry
27.10.2016
06:28:18
Значит наверное таки в касс2

Mikhail
27.10.2016
06:28:23
проблема котлина в том, что он именно недоскала, а самый главный минус явы который решает котлин - уменьшение кол-ва кода которое надо писать(простенький вывод типов и т.д.) - и это со стороны явы и так довольно активно пилится. но публика у него тем не менее всегда будет за счет джетбрейнс)

Dmitry
27.10.2016
06:28:26
*кассу

Oleksandr
27.10.2016
06:28:32

Mikhail
27.10.2016
06:29:04

Kirill
27.10.2016
06:29:25

Google

Mikhail
27.10.2016
06:29:28
инстансоф - это довольно хороший случай в патмате)

Kirill
27.10.2016
06:29:41
ещё про анбоксинг можно наверное в таких случаях вспомнить

Mikhail
27.10.2016
06:30:06
плохой случай - это выполнение пачки кастомных доп функций для определения насколько входные данные соответствуют этому паттерну

Andrey
27.10.2016
06:30:20

Kirill
27.10.2016
06:30:52
я бы сказал, 99%
ну если он ещё и предсказуемый байткод выдаёт с предсказуемым поведением в большинстве случаев, то вообще почти 100

Dmitry
27.10.2016
06:31:24
Читабельность и понятность сильно важнее производительности в 95% случаев. Какая разница сколько ты на матчинге потеряешь 5 или 50нс все равно потом на I/O на 70мс заблочишься.

Kirill
27.10.2016
06:31:37

Oleksandr
27.10.2016
06:31:58

Kirill
27.10.2016
06:32:44

Oleksandr
27.10.2016
06:33:15
вот на работе и гляну)

Mikhail
27.10.2016
06:33:19
типа при case Foo(Bar(s: String),_ , Baz(i: Int)) ?
не стоит забывать что каждый case который не сводится к инстансофу или сравнению по значению - выполняется проверка через unapply для каждого case class , чем больше указал - тем больше в конце концов может выполнится)

Dmitry
27.10.2016
06:34:06

Mikhail
27.10.2016
06:34:34
мало того, что микровызовы плодятся как грибы, так еще и неизвестно что внутри зачастую выполняется - если unapply не стандартный

Kirill
27.10.2016
06:34:44

Mikhail
27.10.2016
06:35:08

Dmitry
27.10.2016
06:35:08
Есть, и в этих задачках есть 5% горячих мест

Kirill
27.10.2016
06:35:13
плюс выше правильно сказали - пока этих вызовов десять, это ок, но миллион вызовов по наносекундам уже по тебе ударят

Oleksandr
27.10.2016
06:36:01
http://pastebin.com/mW8mGRQc

Dmitry
27.10.2016
06:36:34
Да, но еще сильнее ударит по тебе попытка въехать в код коллеги уоптимизированый в хлам когда новы требования вкатят :-)

Oleksandr
27.10.2016
06:37:34
два unapply, две проверки типов, один equals, остальное фигня

Google

Oleksandr
27.10.2016
06:38:08
вот jmh точно поленюсь сейчас доставать

Dmitry
27.10.2016
06:38:20

Ilya
27.10.2016
06:38:59
Ребят, где список докладов сегодняшних можно посмотреть?
Киньтемь ссылкой пожалуйста

Dmitry
27.10.2016
06:39:54
@notxcain будешь выступать?
Я распечатку принтассембли твоих .freek сделаю, чтоб потралить.

Denis
27.10.2016
06:40:53
Nope, так и не успел подготовиться

Mikhail
27.10.2016
06:41:06

Dmitry
27.10.2016
06:41:08
Тогда не сделаю :-(

Oleksandr
27.10.2016
06:41:24

Mikhail
27.10.2016
06:42:13
но такие простые случаи они все равно линейно разворачиваются
без вызова unaply
по большей части паттерн матчинг как раз и раскладывается в обычный бойлер плейт

Oleksandr
27.10.2016
06:43:26
да, нету unapply

Mikhail
27.10.2016
06:43:39
поэтому можно не заморачиваться в большинстве случаев

Oleksandr
27.10.2016
06:43:42
не то написал /=
ну вот там большая часть команд вроде как быстрые

Dmitry
27.10.2016
06:44:16

Oleksandr
27.10.2016
06:47:29
без вызова unaply
я вот как раз хочу его в байткоде для патмата увидеть
потому что думал, что такого не бывает

Mikhail
27.10.2016
06:48:11
сделай свой unapply подходящий и тогда он у тебя вызовется)

Google

Oleksandr
27.10.2016
06:48:30
аа, да, для кейс классов там все оптимизировано
вот ещё кейс: http://pastebin.com/tEuDy9um
вроде как эквивалентные действия, почему для первого куда более страшный байткод?


Mikhail
27.10.2016
07:05:35
*они умные ровно на столько
часто бывает так, что глазами видишь код и понимаешь что вот тут 2 строчки равны десяти строчкам и ничего не сломается если их заменишь - но как это формализовать для компилятора чтобы это решало класс задач - это уже проблема. причем засунуть узкейс не проблема, но в первую очередь пихают самые частые юзкейсы которые подходят для многого, могут также попасть те, которые понравились а что-то как в данном случае - возможно просто пропустилось или не посчиталось важным) опять таки - каждая доп проверка на ряд факторов - увеличивает время компиляции, ведь проверку надо сделать для каждого под-кусочка кода - вот и пытаются найти баланс между скоростью и тотальной оптимизацией - в этом процессе очень легко пропустить казалось бы такие очевидные оптимизации


Dmitry
27.10.2016
07:12:23
Эти оптимитизации джит поправит
Транслятор толькл банальщину оптимизирует
Проогони раз 1000 и посмотри что джит сделает с этого куска
В javac оптимизации повыпиливали еще в 1.3

Mikhail
27.10.2016
07:19:10

Dmitry
27.10.2016
07:19:36
Ага, только очевидные констант инлайн
И десахар. Отсальное джит и то тольк если статистика покажет что это хотспот

Mikhail
27.10.2016
07:22:41
тогда возможно, что в скале пытаются оптимизировать только то, что джит сложно переваривает - одерски уж точно тесты проводил) не просто так там во втором случае не создается лишнего)

Dmitry
27.10.2016
07:25:10
В рантайме у вмашины гораздо больше информации что нужно оптимизировать, что нет. Некоторые куски вообще выпиливаются. И да, лучше починить оптимизатор в жвм чем подпереть костыль :-) пример https://plumbr.eu/blog/performance-blog/self-healing-jvm

Mikhail
27.10.2016
07:26:51
паттерн матчинги могут породить большие методы, если полностью раскрывать все до мелочей - этого джит вроде как не любит и у него должны быть более веские причины, чтобы начать оптимизировать эти участки - наверное это и есть причина столь пристального внимания к ним в скале)

Dmitry
27.10.2016
07:30:46
Если причины не вымышлены, конечно. Почему-то мне кажется что код в котором заметно тормозит патернмтчинг наверняка имеет и другие, граздо более пугающие болезни :-)
Либо это такая экзотика, автоген на 1000 кейзов
Что тоже сомнительное решение :-)

D
27.10.2016
07:47:44

Aleksey
27.10.2016
08:22:57
Список докладов на сегодняшнем Московсом митапе:
1) Дмитрий Мешков, IOHK Research, Scorex Project Developer, Разработка приложений с использованием криптографии
2) Дмитрий Зуев, SberTech, ex-Pimpay, Введение в программирование на уровне типов
3) Евгений Остапенко, Введение в CRDT