
Nick
05.10.2016
10:05:09
фп никак не противоречит null

Aleksey
05.10.2016
10:05:42
ага и в scala тоже
На практике в Scala за null бьют примерно так же как за var, если этот var не стейт актора.

Vladimir
05.10.2016
10:05:47
чистое фп подразумевает что если у тебя есть объект типа T, то он не может быть null
скала это не чистый фп язык

Google

Viacheslav
05.10.2016
10:06:24

Ilya
05.10.2016
10:07:45
/scala

Борис
05.10.2016
10:07:46
фп не фп имхо не важо, тут вопрос про типизацию

Grigory
05.10.2016
10:08:11
мне кажется разгооры про чистоту скалы (лол она грязна = сайдэффектовая) это оффтоп

Aleksei
05.10.2016
10:08:24
да

Grigory
05.10.2016
10:08:31
а использовать не использовать нулы это уже кейсы

Aleksei
05.10.2016
10:08:34
давайте уже забаним кого нибудь, а то только одни разговоры

Viacheslav
05.10.2016
10:08:37

Vladimir
05.10.2016
10:09:16
потому что ты не сможешь реализовать Required, который будет тебе обеспечивать отсутсвие null в compile time. а в рантайме проверять то же самое что проверять на null

Viacheslav
05.10.2016
10:10:26
чойта?
опшн вроде тоже это не обеспечивает

Aleksey
05.10.2016
10:11:04

Google

Nick
05.10.2016
10:11:09
а Erlang эт функциональный язык?

Grigory
05.10.2016
10:11:34
блин ну не каждый фп язык чист
окамл не чистый

Nick
05.10.2016
10:11:51
да что за бред
null вообще ортогонален ФП

Viacheslav
05.10.2016
10:12:19

Nick
05.10.2016
10:18:34

Aleksei
05.10.2016
10:18:50
на прямую?

Daniel
05.10.2016
10:19:15
Не очень понял вопрос. Во втором случае будет что-то типа
{
"subModel": { "d1": {"field1": 10, "field2": [2,3,4,5,6,6,7]} },
"i": 5,
"str": "some string value"
}
Так не работает у меня. Прошел только вариант, который в гисте.
Хотелось же, чтобы обрабатывался вариант
{
"subModel": {"field1": 10, "field2": [2,3,4,5,6,6,7]},
"i": 5,
"str": "some string value"
}

Oleksandr
05.10.2016
10:19:54
null ломает многие системы типов, если про него не думать специально
на практике все просто -- за наллы бить ногами

Viacheslav
05.10.2016
10:20:46
а если чел уже свалил с конторы, вопрос что бить:
1. искать чела?
2. бить монитор?
3. бить соседа?
...

Oleksandr
05.10.2016
10:20:58
исправить кож
код

Aleksei
05.10.2016
10:21:10
не бить, а читать
читать и читать русскую классику

Viacheslav
05.10.2016
10:21:24
пару десятков тысяч строк кода - оо это будит весело)

Aleksei
05.10.2016
10:21:31
пока "на прямую" не превратится в НАПРЯМУЮ

Grigory
05.10.2016
10:21:35
кончайте уже с налами) это бед стайл офк

Nick
05.10.2016
10:22:16

Viacheslav
05.10.2016
10:22:32
чуваки я поэтому и спрашиваю - почему бед стайл не исправили на уровне компилятора. Ежу понятно что можно писать по соглашениям и осторожно и всё будет ок

Google

Nick
05.10.2016
10:22:35
местами null очень даже ничего

Aleksey
05.10.2016
10:22:36
Так не работает у меня. Прошел только вариант, который в гисте.
Хотелось же, чтобы обрабатывался вариант
{
"subModel": {"field1": 10, "field2": [2,3,4,5,6,6,7]},
"i": 5,
"str": "some string value"
}
В таком случае только кастомные Reader/Writer :( Дело в том что если так сделать, то не понятно как обрабатывать случаи типа case class E(s1: D, s2: D)

Oleksandr
05.10.2016
10:23:10
ну и иногда оверхед от налла опаснее самого налла

Vladimir
05.10.2016
10:23:53

Aleksey
05.10.2016
10:23:56

Oleksandr
05.10.2016
10:24:26
*оверхед от опшна, конечно

Daniel
05.10.2016
10:24:30
т.е. пушка нуждается в инфе, которая однозначно скажет, что здесь нужен такой то наследник трейта и не будет перебирать сама варианты?

Aleksey
05.10.2016
10:25:49

Grigory
05.10.2016
10:25:51
в окмпиляторе не поправили засчет полной сометсимостью с джавой
hz как копмпилить код если у тебя в зависимостях какая джава либа

Nick
05.10.2016
10:26:32

Grigory
05.10.2016
10:26:38
ахах)
ну все все
:D

Aleksey
05.10.2016
10:26:56

Daniel
05.10.2016
10:27:31
Конечно.
Ясно.
Был еще момент с привидением имени класса к имени поля.
Clazz превратится в "clazz", а MyClazz я так и не осилил. Пришлось в одно слово называть (хотя читаться стало лучше в конкретном месте =) )

Aleksey
05.10.2016
10:28:43

Luger
05.10.2016
10:29:54

Daniel
05.10.2016
10:30:34
Сейчас сработало в воркшите, дома почему-то сфейлился. Спасибо за помощь.

Google

Nick
05.10.2016
10:30:49

Aleksey
05.10.2016
10:39:49
а почему в дрож бросает?) можно ж передавать не класснеим
Не люблю служебную информацию в человекочитаемых форматах. Стараюсь ее максимально облагородить. Могу объяснить, почему в пушке сделаны вот такие конструкции { "fieldName": { "childOfSealedTrait": { ... } } }. Дело в том, что я обратил внимание, что у нас в проектах, почти везде во внешнем API, где используется перечисление на силед трейтах, наследники это либо кейсобжекты либо кейс-классы с одни полем. Кейс-обжекты пишутся как строки, а кейс-классы с одни полем пишутся без объекта-обертки ( case class Foo(x: Int = 1) --> 1 ). По этому такая запись получается компактной: { "fieldNameOfSt": "myCaseObject", "anotherFiledNameOfSt": { "foo" : 1 } }.

Oleksandr
05.10.2016
19:03:20
http://www.lihaoyi.com/post/BenchmarkingScalaCollections.html
любопытно сравнение Map/Set с их мутабельными аналогами, все совсем плохо

Wystan
05.10.2016
19:05:58
на 1024 элементах все одинаково

Oleksandr
05.10.2016
19:06:43
для меня шок, что вроде как на больших обьемах юзаются деревья
кто-то обьяснит, зачем?

Wystan
05.10.2016
19:07:44
а почему шок? сбалансированные деревья дают норм гарантии

Nick
05.10.2016
19:08:10
На больших объёмах хеш таблица получше будет =)

Admin
ERROR: S client not available

Oleksandr
05.10.2016
19:08:21
ну как видно, не особо те гарантии и норм

Nick
05.10.2016
19:09:21
Вообще я бы не стал данной статье доверять. Поскольку не может массив интов и лонгов в памяти одном место занимать

Oleksandr
05.10.2016
19:10:17
ну автор вроде шарит
я пока не проверял вдумчиво

Daniel
05.10.2016
19:10:35
так у него и нет одинакового
разные объемы
меня больше смутили моменты, когда результат не получился
имхо, надо там как минимум проверить тесты

Nick
05.10.2016
19:11:34
Как нет
Размер 1
Лонг и инт равны

Oleksandr
05.10.2016
19:11:45
ну к результатам доверия не добавляют числа типа "-200" время доступа

Google

Nick
05.10.2016
19:12:01
Он написал свою херню, когда есть jol
Нет ему доверия)

Daniel
05.10.2016
19:12:31
я похоже слепой
разные же

Nick
05.10.2016
19:13:15
Эт саиз 64
А ты смотри саиз 1
Где по 24

Daniel
05.10.2016
19:13:43
и?

Nick
05.10.2016
19:14:09
Что и? Как такое возможно

Daniel
05.10.2016
19:14:17
выравнивание

Nick
05.10.2016
19:14:18
Лонг в два раза больше занимает, не?

Daniel
05.10.2016
19:14:36
выравнивание идет на 8 байт

Oleksandr
05.10.2016
19:14:44
те что бит с байтом одинаково весят, тебя не смущает?)
(а это уже претензии к джвм)

Nick
05.10.2016
19:15:03
Не причём тут жвм
И какое выравнивание)))))
Не логично оно там, вроде каа

Oleksandr
05.10.2016
19:17:34
джвм все выравнивает для кратности 8, как это она ни при чем
(оракл/опен, по крайней мере)

Daniel
05.10.2016
19:18:50
пустой массив 16 байт
дальше добавляют один элемент от 1 до 8 байт
но за счет выравнивания на 8, они все одинаковые

Nick
05.10.2016
19:19:46
Ща постом посчитаю на бумажке