
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
Вот за помощью сюда
За советами сюда
А не туда

Nikolay
17.03.2017
21:21:50
Ой, уже нет

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

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

Nick
18.03.2017
17:48:22


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

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

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

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

Mikhail
18.03.2017
18:38:37

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

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

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

Nick
18.03.2017
18:53:45

Mikhail
18.03.2017
18:54:12

Google

Nick
18.03.2017
18:54:18

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

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

Mikhail
18.03.2017
18:55:49

Nick
18.03.2017
18:56:29

KrivdaTheTriewe
18.03.2017
18:56:30

Nick
18.03.2017
18:56:41

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

Nick
18.03.2017
19:02:49

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

KrivdaTheTriewe
18.03.2017
19:35:00

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