@scala_ru

Страница 824 из 1499
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
Кто читал advanced scala with cats, хорошее чтиво, стоит прочесть?
очень книга хорошая , мне очень понравилась

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

KrivdaTheTriewe
15.07.2017
12:41:08
потомок моноида
https://habrahabr.ru/post/333362/

Vladislav
15.07.2017
13:34:57
https://habrahabr.ru/post/333362/
Полезный лонгрид, имхо

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
полезная очень map.mapValue инфа, я на ней споткнулся в свое время :д
но ведь для map.mapValues(f) не нужно пересчитывать хеши ключей, в отличие от map.map(f(_._2))

(теоретически, по крайней мере, это может быть оптимизацией)

Grigory
15.07.2017
16:17:17
но ведь для map.mapValues(f) не нужно пересчитывать хеши ключей, в отличие от map.map(f(_._2))
главное тут знать что функции разные и ведут себя по-разному

KrivdaTheTriewe
15.07.2017
16:18:42
главное тут знать что функции разные и ведут себя по-разному
а я всегда смотрю , что функция делает. то есть есть же идея , можно быстро перейти к определению

Oleksandr
15.07.2017
16:21:33
главное тут знать что функции разные и ведут себя по-разному
ну это само собой mapValues как раз один из примеров плохого дизайна — там смешано "view" и "не надо пересчитывать хеш", добиться только лишь второго вроде как невозможно

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

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
да и вообще для не подготовленного пользователя, выглядит как сахар для мап %|
кстати вот да, не задумываешься, жмёшь ctrl+space, ищешь подходящий по названию метод, и такой - вау, он делает то что мне нужно

A
15.07.2017
18:54:18
А линтеров нет, котрые такие мелочи сами правят

Или подсказывают

Ide что-то похожее ведь делает

Daniel
15.07.2017
19:13:40
но ведь для map.mapValues(f) не нужно пересчитывать хеши ключей, в отличие от map.map(f(_._2))
для Immutable.Map и так не надо хэш считать, там по дефолту дерево используется

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
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
хаскелль не пишет в рекламном буклете про нулевую стоимость абстракций

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
@gurinderu привет, а такое видел/пробовал использовать https://github.com/btlines/pbdirect ? там коты и шейплез
как проводить миграцию версий при использовании подобной штуки?

Oleg
17.07.2017
07:42:38
Иметь два ADT ?
В смысле при каждой правке весь неймспейс переименовывать?

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

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