
Kirill
15.07.2017
11:56:33
а вот сейчас обидно было
Кто читал advanced scala with cats, хорошее чтиво, стоит прочесть?

Daniel
15.07.2017
11:58:13
в подкасте @l3h3r советовал

KrivdaTheTriewe
15.07.2017
12:03:37

Google

Kirill
15.07.2017
12:03:48
спасибо

KrivdaTheTriewe
15.07.2017
12:41:08

Vladislav
15.07.2017
13:34:57

KrivdaTheTriewe
15.07.2017
13:36:02

illiatshurotshka❄️
15.07.2017
13:37:32
https://pavelfatin.com/scala-collections-tips-and-tricks/

Grigory
15.07.2017
14:11:57
полезная очень map.mapValue инфа, я на ней споткнулся в свое время :д

Oleksandr
15.07.2017
16:12:32
(теоретически, по крайней мере, это может быть оптимизацией)

Grigory
15.07.2017
16:17:17

KrivdaTheTriewe
15.07.2017
16:18:42

Oleksandr
15.07.2017
16:21:33
и вообще его реализация через зад какая-то, с кучей левых аллокаций /=

Grigory
15.07.2017
16:23:07

Google

Grigory
15.07.2017
16:24:52
да и вообще для не подготовленного пользователя, выглядит как сахар для мап %|
Может семантики добавить в имя во избежание конфузов


Oleksandr
15.07.2017
16:38:42
хотя есть mutable.AnyRefMap, где таки есть адекватный (вроде как) mapValuesNow:
scala> import scala.collection.mutable.AnyRefMap
import scala.collection.mutable.AnyRefMap
scala> case class Key(k: Long) { override def hashCode() = { println("!!!");super.hashCode() } }
defined class Key
scala> val m = AnyRefMap(Key(1) -> 2, Key(3) -> 4)
!!!
!!!
m: scala.collection.mutable.AnyRefMap[Key,Int] = Map(Key(1) -> 2, Key(3) -> 4)
scala> m.mapValuesNow(_ * 2)
res10: scala.collection.mutable.AnyRefMap[Key,Int] = Map(Key(1) -> 4, Key(3) -> 8)
scala> m.map{ x => x._1 -> x._2 * 2}
!!!
!!!
res11: scala.collection.mutable.AnyRefMap[Key,Int] = Map(Key(1) -> 4, Key(3) -> 8)
ага, ну и в редизайне
/** Transforms this map by applying a function to every retrieved value.
* @param f the function used to transform values of this map.
* @return a map view which maps every key of this map
* to `f(this(key))`. The resulting map wraps the original map without copying any elements.
*/


Kirill
15.07.2017
17:08:01

A
15.07.2017
18:54:18
А линтеров нет, котрые такие мелочи сами правят
Или подсказывают
Ide что-то похожее ведь делает

Daniel
15.07.2017
19:13:40

Oleksandr
15.07.2017
19:14:41

Daniel
15.07.2017
19:15:30
для def map() перетасовки не будет, ключи то не меняются

Oleksandr
15.07.2017
19:17:16

Daniel
15.07.2017
19:18:10
я тоже про них
перестраивать дерево не нужно по сути этих операций

Oleksandr
15.07.2017
19:18:22
во втором случае нельзя гарантировать отсутствие перетасовки
дерево будет то же (с точностью до ключей), но ряд операций (типа подсчета хешей и построения дерева) будет вызван, и этого хорошо бы избежать

Daniel
15.07.2017
19:21:58
protected class MappedValues[W](f: V => W) extends AbstractMap[K, W] with DefaultMap[K, W] {
override def foreach[U](g: ((K, W)) => U): Unit = for ((k, v) <- self) g((k, f(v)))
def iterator = for ((k, v) <- self.iterator) yield (k, f(v))
override def size = self.size
override def contains(key: K) = self.contains(key)
def get(key: K) = self.get(key).map(f)
}
mapValue просто враппит в этот класс, единственная лишняя аллокация
здесь не надо ни хэшей, ни перестроения дерева

Oleksandr
15.07.2017
19:25:05
стоп-стоп, надо отделить мух от котлет
1) у mapValues есть и ленивость, и отсутствие рехешинга
первое скорее минус, второе же явный плюс
2) рехешинг у .map(...)
в статье говорится избегать mapValues из-за граблей с ленью, в качестве альтернативы дают .map
я говорю о том, что это не всегда целесообразная замена, именно из-за рехешинга
ну и "не через зад" реализация -- mapValuesNow

Google

Oleksandr
15.07.2017
19:29:37
и ничего, афаик, не мешает сделать энергичный mapValues дефолтом у всех мап
(это уже немного оффтоп)

Daniel
15.07.2017
19:30:28
не так понял тебя значит

Nick
15.07.2017
19:46:16
а почему у mapValues должен быть рехешинг?
Олег ушёл в раст чатик и теперь тут слишком тихо

illiatshurotshka❄️
16.07.2017
19:50:52
там тоже самое

KrivdaTheTriewe
16.07.2017
20:02:48
я тоже там

Vladislav
16.07.2017
20:08:33
Киньте в лс ссылку?

illiatshurotshka❄️
16.07.2017
20:12:19
поменяй scala на rustlang

Nick
16.07.2017
20:16:40

Vladislav
16.07.2017
20:17:57

Vadim
16.07.2017
20:43:28

Nick
16.07.2017
20:46:33

Nick
17.07.2017
05:14:04
@optician_owl пусть поспят)

Daniel
17.07.2017
05:14:21
а ты го ботай
не позорь скалачатик в расточатике

Nick
17.07.2017
05:14:39
послал как бог)

Daniel
17.07.2017
05:14:42
?

Luger
17.07.2017
05:16:38
расточат подозрительно наводнен людьми из скалачата. Все скала-программисты в тайне мечтают писать на Rust ? я думал, на haskell %)

Daniel
17.07.2017
05:17:22
хаскелль не пишет в рекламном буклете про нулевую стоимость абстракций

Nick
17.07.2017
05:17:53

Google

Daniel
17.07.2017
05:18:12
эти как раз на это целят

Nick
17.07.2017
05:18:24
ну врут значит

Daniel
17.07.2017
05:18:31
ссылаясь еще на цитату Страуструпа

Nick
17.07.2017
05:18:49
эт на какую
Daniel ты главное не верь им, потому что эт не может быть правдой)

Admin
ERROR: S client not available

Daniel
17.07.2017
05:20:21
что плюсы должны не делать не нужных вещей, а если что-то делают, то делать так, чтобы другим способом эффективнее нельзя было сделать

Nick
17.07.2017
05:20:54
пффф, именно поэтому плюсы делают дохера ненужных вещей?)

Daniel
17.07.2017
05:21:43
я с тобой об абстрактных вещях не собираюсь трындеть)

Nick
17.07.2017
05:22:06
ну ок)
зато реклама уехала подальше
а, уже удалили)

Kirill
17.07.2017
05:23:17
Как ни зайдешь в скала-чат, тут все про плюсы. Подозрительно

Nick
17.07.2017
05:24:45
да не, тут про раст сейчас
@optician_owl в общем моя мысль простая, llvm сможет мало чего сделать с нашими любимыми монадками и работать это будет, но не очень хорошо)

Daniel
17.07.2017
05:26:25
какая связь между растом и монадками?

Nick
17.07.2017
05:27:17
ну как бы абстракция) которая точно не бесплатна

Daniel
17.07.2017
05:27:45
какая связь между растом и монадками?

Nick
17.07.2017
05:28:15
прямая, там ж можно монадки писать

Daniel
17.07.2017
05:28:21
нет

Google

Daniel
17.07.2017
05:28:50
точнее в нормальном виде нет

Nick
17.07.2017
05:29:30
можно, но да, страшно
https://m4rw3r.github.io/rust-and-monad-trait
я вот на это смотрю, когда про монадки в расте говорю

Daniel
17.07.2017
05:30:17
короче, займись делом уже
поконтрибьють в скала-нейтив хотя бы

Nick
17.07.2017
05:30:47
а еще, абстракции не могут быть бесплатными, когда у тебя есть линк каунтер под боком)
да, пойду пожалуй гляну чего там нового

Nikita
17.07.2017
07:32:56
@gurinderu привет, а такое видел/пробовал использовать https://github.com/btlines/pbdirect ? там коты и шейплез

Aleksey
17.07.2017
07:33:40
https://live.webuild.sg/048-haoyi-li/

Nikita
17.07.2017
07:39:38

Denis
17.07.2017
07:41:29

Oleg
17.07.2017
07:42:38

Nikita
17.07.2017
07:43:15
Иметь два ADT ?
Предположим я хочу пометить поле depricared, и удалить его из case class
Не очень очевидно как это сделать без схемы

Denis
17.07.2017
07:44:26
Еще непонятно как с индексами быть

Oleg
17.07.2017
07:46:05