@scala_ru

Страница 189 из 1499
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 по адресу да пошел

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
ну, тут все так надрачивают на патмат (как собственно и все скалисты), но мало кто задумывается что он на перфоманс может влиять
да не так уж сильно, смотря какой патмат в хорошем случае он сводится к switch/case, в плохом — к пачке isInstanceOf

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

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

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

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:32:44
типа при case Foo(Bar(s: String),_ , Baz(i: Int)) ?
во, норм пример, printassembly сделай, и сравни с серией instanceof)))

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
во, норм пример, printassembly сделай, и сравни с серией instanceof)))
Как в той бородатой шутке, ты пока это писал потратил больше времени чем средний проект сэкономит в рантайме за счет этих микрооптимизаций :-)

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
плюс выше правильно сказали - пока этих вызовов десять, это ок, но миллион вызовов по наносекундам уже по тебе ударят
Потому я и говорю 95% случаев. Низкоуровневые библиотеки? Да и то тлько после профилирования. Бизнес - ну его нафиг.

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
два unapply, две проверки типов, один equals, остальное фигня
а где там два unapply? помоему там все к сравнениям свелось, без вызова unapplн

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

Oleksandr
27.10.2016
06:41:24
два unapply, две проверки типов, один equals, остальное фигня
если заменить Bar(any: Any) и проверять Bar(s: String), то появляется isInstanceOf

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
не то написал /=

ну вот там большая часть команд вроде как быстрые

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
вот ещё кейс: http://pastebin.com/tEuDy9um вроде как эквивалентные действия, почему для первого куда более страшный байткод?
компиляторы они ровно на столько, насколько этого добьется программист) в данном случае при встрече match видимо больше внимания уделено оптимизации - насколько я вижу, он b даже не создает в памяти, просто вырезает. а в первом случае развернул по полной с созданием всех переменных без всякой оптимизации)

*они умные ровно на столько

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

Dmitry
27.10.2016
07:12:23
Эти оптимитизации джит поправит

Транслятор толькл банальщину оптимизирует

Проогони раз 1000 и посмотри что джит сделает с этого куска

В javac оптимизации повыпиливали еще в 1.3

Mikhail
27.10.2016
07:19:10
В javac оптимизации повыпиливали еще в 1.3
вобще не режет ничего? просто сахарок раскладывает?

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

Страница 189 из 1499