@scala_ru

Страница 568 из 1499
Vladislav
17.03.2017
19:22:00
мне всегда казалось, что активное комьюнити это когда тебе накинут векторов куда смотреть, к кому идти и тд

что читать, где искать

а не хуями обложат или проигнорят)

Mikhail
17.03.2017
19:22:32
или когда активно на йух шлют)

Google
Vladislav
17.03.2017
19:22:43
нахуй такое комьюнити, я такое сам нахуй пошлю

ну сириосли

честно говоря, я думаю, что многие и так знают, что о скала комьюнити ходят слухи разные, что не самое дружелюбное и тд, и вот я теперь вижу почему, ага )

Daniel
17.03.2017
19:24:08
Леша просто еще видать не успел отметить день Патрика, вот и злой

Aleksei
17.03.2017
19:24:15
успел

Vladislav
17.03.2017
19:24:22
я вообще на работе сижу

у меня тут старый хадуп с тасками из серии - работает не трогай и кучу гемора с этим

Daniel
17.03.2017
19:25:04
Vladislav
17.03.2017
19:26:00
мне порой хочется обощить любителей по одноу кейсу обощить не лучше поведения, с которого началось
нет, ну а как? мне надо было промолчать? я вспыльчивый, всегда был таким

не один барух может открыто посылать

мягко говоря

я извиняюсь, если кого-то обидел, конечно

Daniel
17.03.2017
19:27:18
давайте закроем тму

Google
Vladislav
17.03.2017
19:27:20
но комьюнити для того и существует, чтобы подсказывать

Daniel
17.03.2017
19:27:58
ну так и подсказывали на сколько это возможно в текущей ситуации

Sergey
17.03.2017
19:28:32
Всем привет, хотел сказать большое всем спасибо за советы и отклик — это правда помогает нам в текущей ситуации, так как она достаточно затруднительная. Мы будем очень рады любой помощи, и конечно же ищем человека на постоянной основе в штат, потому что инфраструктурны проблемы будут расти с количеством пользователей и нагрузкой, а она потенциально очень высокая.

Vadim
17.03.2017
19:55:44
вы срач чтоли в другом чате устроили и перенесли сюда?)

а то я как-то начала не вижу

Aleksei
17.03.2017
19:55:55
Вот за помощью сюда

За советами сюда

А не туда

Oleg
18.03.2017
13:14:25
@rudogma а что такое FastOption
я сбрасывал пару раз такой вот анбоксед https://github.com/rklaehn/radixtree/blob/master/src/main/scala/com/rklaehn/radixtree/Opt.scala

Mikhail
18.03.2017
15:09:09
я сбрасывал пару раз такой вот анбоксед https://github.com/rklaehn/radixtree/blob/master/src/main/scala/com/rklaehn/radixtree/Opt.scala
val x = Opt[Int](11) println("x: "+x.get) BIPUSH 11 INVOKESTATIC scala/runtime/BoxesRunTime.boxToInteger (I)Ljava/lang/Integer; INVOKEVIRTUAL tests/TestMiniBox$Opt$.apply (Ljava/lang/Object;)Ljava/lang/Object; CHECKCAST java/lang/Integer PUTFIELD tests/TestMiniBox$.x : Ljava/lang/Integer; это не похоже анбоксед. есть условия при которых value class теряет все свои преимущества и боксинг появляется. оно слегка быстрее обычного опшина, но в целом такое же уг. без @specialized не обойтись. да и var нужен.

Oleksandr
18.03.2017
15:29:58
а есть jmh сравниловка для разных опшнов?

Mikhail
18.03.2017
18:29:09
А что тебе specialized даст?
в jvm все дженерики в рантайме становятся java.lang.Object - не важно, что ты там в компайл там ограничивал (исключение Array[T] - для него сохраняется componentType который ты можешь узнать в рантайме - платформой предусмотрено). Скала разворачивает в бойлер плейт. Чтобы лучше понять - стоит почитать разницу как jvm работает с примитивами и обьектными эквивалентами int => java.lang.Integer, и про specialized тоже можно почитать и посмотреть код который генерируется на выходе ( через jd-gui например)

Nick
18.03.2017
18:29:51
ну пока эт экономия на спичках)

Mikhail
18.03.2017
18:30:21
ошибаешься. когда речь о сотнях тысяч - да. если речь о сотнях миллионов операций в секунду - это на порядок быстрее

Nick
18.03.2017
18:30:21
да и сложно сказать примитив там будет или нет, поэтому он всеравно часто в Integer превратитс

Mikhail
18.03.2017
18:30:33
нет, не сложно. есть факты и опыт использования

следствием того, что дженерики воспринимаются в рантайме как java.lang.Object (это как type* в плюсах) - просто адрес. является то, что можно использовать для хранения любого типа case class Item0(index:Int) case class Item1(value:String) val map = new java.util.HashMap[String,Item0]() val item1 = Item1("Hello") val method = map.getClass.getDeclaredMethods.find( _.getName == "put").get method.invoke(map, "key", item1) val item1_got = map.get("key").asInstanceOf[Item1] println("item1_got"+item1_got)

Google
Nick
18.03.2017
18:31:01
сотни миллионов операции в секунду эт уже не скала)

Mikhail
18.03.2017
18:31:36
сотни миллионов операции в секунду эт уже не скала)
смотря для кого. меня скала устраивает и работает так же хорошо, как плэйн ява - этого мне достаточно для poc

Nick
18.03.2017
18:31:56
Object эт не просто адрес

Mikhail
18.03.2017
18:32:00
вернее не просто для поц, а для поца который не скоро придется на плюсы перекладывать

Nick
18.03.2017
18:32:28
и что твои пример показывает?

Mikhail
18.03.2017
18:33:31
Object эт не просто адрес
примитивы передаются по значению, все обьекты - по ссылке. ссылка - это место в памяти с адресом на реальный блок данных. поэтому val param:Object = это просто ссылка, а не сам обьект

Nick
18.03.2017
18:34:28
param ссылка, в памяти сам object)

Mikhail
18.03.2017
18:35:34
ArrayList[Object] - не будет хранить обьект, только ссылки. код выше как раз показывал, что можно подменить ссылку на что угодно - потому, что ArrayList ничего о твоем обьекте не знает

Nick
18.03.2017
18:36:13
а, ты про это

не, ну вопрос то про другое был, что тебе специализация даст

Mikhail
18.03.2017
18:37:11
не, ну вопрос то про другое был, что тебе специализация даст
она делает несколько вариантов моделей хранения. один вариант для java.lang.Object (для всех дженериков) и отдельно под каждый примитив

Oleksandr
18.03.2017
18:37:39
@rudogma ты предлаешь специализацию под все примитивы?

Nick
18.03.2017
18:37:51
я ж сказал, компилятору очень сложно понять часто, примитив это или не примитив

поэтому реально со specialized толку не сильно много

Mikhail
18.03.2017
18:38:37
@rudogma ты предлаешь специализацию под все примитивы?
по всей либе? нет. но для себя в фастопшин - я сужаю. проблем нет. к тому же мне все равно все примитивы нужны

Nick
18.03.2017
18:38:43
я даж думаю, что в некоторых случаях эт можешь навредить escape анализу)

Mikhail
18.03.2017
18:40:04
поэтому реально со specialized толку не сильно много
не сложно. потому что со specialized - все FastOption[Int] - используются соответствующие методы с примитивами. если ты конечно сделаешь val x:FastOption[AnyRef] = Some[Int](5). то сам обьект будет хранить примитив. но произойдет боксинг при x.get

но если специально не обобщать - компилятор прекрасно разбирается во всем

Nick
18.03.2017
18:40:29
дык вопрос откуда берется 5

Google
Nick
18.03.2017
18:40:45
часто такие циферки приходят из вне)

и компилятор прост не знает что эт

Mikhail
18.03.2017
18:41:42
часто такие циферки приходят из вне)
ну и что. у меня сериализаторы параметризованные ( Serializer[T] ) - но работают с примитивами - получают откуда угодно - не важно. тебе байты снаружи поступают, как ты с ними работаешь - сам решаешь.

KrivdaTheTriewe
18.03.2017
18:43:55
Я просто не могу понять,почему не прозвуали слова box unbox

Nick
18.03.2017
18:44:09
а за размер классов ты типо не боишься?)

KrivdaTheTriewe
18.03.2017
18:45:17
case class Parcel[A](value: A) That’s our basic implementation. What’s the drawbacks here? Well, as A can be anything, it will be represented as an Java object, even if we’d only ever put Int into boxes. So the above class would cause us to box and unbox primitive values, because the container is working on objects: val i: Int = Int.unbox(Parcel.apply(Int.box(1)))

Admin
ERROR: S client not available

Mikhail
18.03.2017
18:45:22
и компилятор прост не знает что эт
ты похоже не понимаешь. что по факту компилятор - это просто линковщик( ну и бойлер плейт местами разворачивает). многие вещи он просто проверяет в компайл тайм, но никак не лимитирует и в рантайме. как ты его повернешь - так он и сделает. вот смотри фишку опять val x:FastOption[AnyRef] = Some[Int](5) val intBoxed = x.get.asInstanceOf[Int] // сначало примитив 5 обернется в боксед Integer(5) - затем возможно произойдет unboxing ( от кода дальше зависит) но! val intPrimitive:Int = x.asInstanceOf[FastOption[Int]].get // здесь боксинга-анбоксинга с учетом того, что FastOption[@specialized T] - не будет!

KrivdaTheTriewe
18.03.2017
18:45:44
если не сделать спец версию, такая фигня будет.

Mikhail
18.03.2017
18:46:19
а за размер классов ты типо не боишься?)
нет. потому что опыт показывает, что можно не боятся

Oleksandr
18.03.2017
18:47:58
повторю вопрос про jmh :) набросать что-то на коленке — дело 20 минут, зато будет более-менее реальный результат (сам я без ноута сейчас)

Nick
18.03.2017
18:48:09
нет. потому что опыт показывает, что можно не боятся
да? то есть рост по экспонененте эт фигня?)

Mikhail
18.03.2017
18:48:41
по всей либе? нет. но для себя в фастопшин - я сужаю. проблем нет. к тому же мне все равно все примитивы нужны
не сужаю вернее. под все примитивы генерится специализация. благо их не много и класс из базовых, что юзаются повсеместно.

повторю вопрос про jmh :) набросать что-то на коленке — дело 20 минут, зато будет более-менее реальный результат (сам я без ноута сейчас)
я тестил. я с большими обьемами довольно плотно работаю, поэтому и заморачивался (не хотелось все на плюсах делать). @specialized Option + var дает выигрыш по скорости х15-х20 - но это очень условный показатель. в любом случае речь идет об ускорении на порядок, а не просто десяток процентов

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

Arcady
18.03.2017
18:53:23
По спарку есть чат?

Mikhail
18.03.2017
18:53:31
а с var фишка в том, что val идет как final - что как ни парадоксально при определенных условиях мешает jit и замедляет доступ к полю

Mikhail
18.03.2017
18:54:12
а с var фишка в том, что val идет как final - что как ни парадоксально при определенных условиях мешает jit и замедляет доступ к полю
но там уже нужен тот, кто прям совсем в кишочках байткода любит покопаться и моделях памяти - чтобы прям точно все обьяснить зачем так

Google
Mikhail
18.03.2017
18:55:24
Хм, эт как
просто факт опыта использования. методом тыка получено. пробовал разные возможные конфигурации доступов, композиции доступов.

Nick
18.03.2017
18:55:37
Вроде как наоборот )))

Mikhail
18.03.2017
18:55:49
Дык есть исследования в реальном приложение ? Мол это сберегло нам 10процентов времени и убрало gc?)
эм. гц никуда не девается. оно с этим никак не связано. главное что убирается - боксинг-анбоксинг - это уже очень много

Вроде как наоборот )))
да. но есть конфигурации при которых наоборот скорость работы с полем падает

Nick
18.03.2017
18:56:29
KrivdaTheTriewe
18.03.2017
18:56:30
По спарку есть чат?
а какой вопрос

Mikhail
18.03.2017
18:57:04
возможно это не так если обьекты живут долго. возможно это связано с инициализацией - у меня десятки-сотни миллионов обьектов создаются в секунды

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

Если ты убрал боксинг и анбоксинг, то логично что и гц будет проще
да. обьектов станет слегка меньше. хотя байткод база в рантайме безусловно вырастет

Mikhail
18.03.2017
19:03:16
По спарку есть чат?
вроде @krivdathetriewe что-то такое создавал или я ошибаюсь?

главное не делать specialized на миллиен полей)
ну это да. но я собственно и не видел обьекто с Item[T0 ... T100k] . а когда ты делаешь case class Item(var value:Int) - тут и так примитив идет.

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

KrivdaTheTriewe
18.03.2017
19:35:00
вроде @krivdathetriewe что-то такое создавал или я ошибаюсь?
есть, ну я стараюсь не спамить https://t.me/hadoopusers

Alexander
18.03.2017
21:36:30
Смотрю пример использования Discipline в Cats, там есть вот такое: FunctorTests[Either[Int, ?]].functor[Int, Int, Int] Пример у меня не работает, а вот есть ли такой знак вопроса где-то узнать интересно. Он, насколько я понимаю, является аналогом записи: type MyType[A] = Either[Int,A]

А, это отсюда https://github.com/non/kind-projector

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