
Daniel
10.02.2017
10:29:51
страница старая, свежее глянь

Vasily
10.02.2017
10:30:03
Это про конверсию типов

Daniel
10.02.2017
10:30:09
из отличий только что метод прибит к структуре

Vasily
10.02.2017
10:30:10
Этим никто не пользуется

Google

Vasily
10.02.2017
10:30:30
во всяком случае в суровом российском энтерпрайзе

Daniel
10.02.2017
10:31:02
https://msdn.microsoft.com/en-us/library/zk2z37d3.aspx

Vasily
10.02.2017
10:31:08
Эта ваша неявная конверсия типов

Daniel
10.02.2017
10:31:16
но тоже не сильно сложнее

Vasily
10.02.2017
10:31:33
Ну я про то, что в С# это не очень принято
Можно написать
Но это сложно поддерживать потом
Т.е. по факту это маппинг типов
Посему возникает соблазн писать в таком стиле маппинг dto->entity, например
И тут уже сам черт ногу сломит при более-менее больших объемах кода

Sergey
10.02.2017
10:34:29

Misha
10.02.2017
10:35:50
потому что для того, чтобы понять в чем баг, мне пришлось лезть в git log вместо того, чтобы компилятор мне сказал, что не так

Sergey
10.02.2017
10:37:39
Так с точки зрения компилятора там все норм.

Google

Misha
10.02.2017
10:37:40
в данном случае это конечно вопрос не к языку, это косяк дизайнеров библиотеки, но это хороший пример того, почему имплиситы не надо использовать пока уже других вариантов нет
очевидно хорошее их применение - type classes
вся scalaz на этом сделана
а вот за пихание имплиситов куда не попадя просто для синтаксических упрощений надо бить по рукам

Sergey
10.02.2017
10:41:16
> @lolepezy
а вот за пихание имплиситов куда не попадя просто для синтаксических упрощений надо бить по рукам
Истово плюсую

Rustam
10.02.2017
10:44:33

Daniel
10.02.2017
10:48:24
как будто языка это не касается
"если есть возможность, то ей обязательно кто-то воспользуется"

Nikolay
10.02.2017
10:48:53
все популярные json библиотеки на scala построены на этих самых тайпклассах. и это оправданно, думаю тут многие согласны. но я думаю что у многих бывали проблемы:
1. Так, какого имплисита тут не хватает, раз оно все не компилится
2. Ой, почему он сериализовался так, а не как я хотел? Хм, похоже где-то используются дефолтные derived энкодеры, а не те что я хочу. А! так я же забыл импорт поставить
второй случай в рантайме обнаруживается.

Vasily
10.02.2017
10:49:01
Парни, что вы спорите . Больше всего способов отстрелисть себе ногу все же в с++

Aleksei
10.02.2017
10:51:43
первый способ - это выбрать с ++?

Vasily
10.02.2017
10:51:57
Ну типа того, да

Oleg
10.02.2017
10:52:47

Vladimir
10.02.2017
10:58:10

Nikolay
10.02.2017
10:58:58
да, как раз это и требует много тестов как правило

Oleg
10.02.2017
11:00:07

Nikolay
10.02.2017
11:00:11
просто это как раз вносит эту самую неявность. один импорт может сделать так, чтобы у тебя кейс классы сериализовались в цирковых собачек, а не json

Oleg
10.02.2017
11:00:57

Aleksey
10.02.2017
11:01:00

Vasily
10.02.2017
11:01:03
Нунафиг такое поведение

Google

Oleg
10.02.2017
11:01:29

Vasily
10.02.2017
11:01:30
Если у меня компилятор не отлавливает, то лучше не использовать, канеш

Nikolay
10.02.2017
11:01:51

Vyatcheslav
10.02.2017
11:03:44

Oleg
10.02.2017
11:03:49
нет, может
не не может. Во всех эти библиотеках тебе нужно либо намеренно написать deriveCircusDog для каждого кейз-класса. Либо у тебя будет ambiguity для внутреннего типа. Т.е. тебе нужно не просто найти такой волшебный import который введёт в скоуп все нужные CircusDog[_] для всех нужных типов, но ещё и убрать нужные
Ну т.е. если честно
0 раз такое случалось с кем угодно
Это просто бабушкины пугалки про имплиситы

Nikolay
10.02.2017
11:05:46
я вообще не намеревался пугать никого. просто сказал пару проблем которые встречал не один и не два раза

Oleg
10.02.2017
11:06:01
я понимаю, если у тебя implicit Long в библиотеке использвется, но мы-то про развитую систему generic deriving говорим

Nikolay
10.02.2017
11:06:47
ну черт, да тот же самый Either в circe сереализуется как { "foo" : { "a" : 1 } }
пишешь свой энкодер, забываешь его импортировать, и получаешь не то что хотел

Nikolay
10.02.2017
11:07:22
очень просто ошибиться
вот сейчас мне скажут "сам дурак, не стреляй себе в ногу, нормально делай - нормально будет"

Vladimir
10.02.2017
11:08:12

Oleg
10.02.2017
11:08:46

Nikolay
10.02.2017
11:08:47
но тоже самое в pro.jvm чате говорят про какую-то дичь, которую в scala ловим на этапе компиляции

Vyatcheslav
10.02.2017
11:09:08

Nikolay
10.02.2017
11:09:10
импортни generic.auto._
или generic.semiauto._

Google

Nikolay
10.02.2017
11:09:54
и вообще, давай в scalafiddle

Oleg
10.02.2017
11:10:07
как же херово-то ааа, надо же поставил дискриминатор
говённый сирс
А самое главное, что это в сто раз лучше, чем reflection-based говно вроде json4s, где вот реально фиг найдёшь, что будет в итоге юзаться для сериализации

Nikolay
10.02.2017
11:14:37
да json4s вообще с пониженой социальной ответственностью

Aleksey
10.02.2017
11:46:16
Уродливый джесончик сирка генерит. То ли дело пушка
scala> write(Right(2): Either[String, Int])
res4: String = {"right":2}

Admin
ERROR: S client not available

The mirror
10.02.2017
11:47:02
каждый раз проигрываю, когда слышу про этот фреймворк

Denis
10.02.2017
11:47:16
все решается настройкой принтера

The mirror
10.02.2017
11:47:18
это просто пушка

Aleksey
10.02.2017
11:47:53

Denis
10.02.2017
11:49:07
ну я думаю использовать Either в такой моделе в любом случае не круто
что пушка что серси

Aleksey
10.02.2017
11:49:43

Vadim
10.02.2017
11:50:17
врядли потребиль json'а будет рад получить Either

Denis
10.02.2017
11:50:20
ну скажем так если это общение между двумя серверами где автоматически выводтся декодеры энкодеры - пофиг вообще
если это публичное API - то лучше явный копродукт заюзать с названиями

Aleksey
10.02.2017
11:52:02

Google

Aleksey
10.02.2017
11:55:43
Ну в смысле
sealed trait Foo
case class A(x: Int) extends Foo
case class B(x: String) extends Foo
case class C(x: Boolean) extends Foo
A(10).asJson // { "A": { "value": 10 } }

Misha
10.02.2017
11:56:47

Denis
10.02.2017
12:04:07
gRPC смотри
Например etcd с третьей версии тоже на нем
Главное есть имлементация под Go

Vyatcheslav
10.02.2017
12:07:38

Vladimir
10.02.2017
12:08:24

Misha
10.02.2017
12:11:12
а у тебя акка?
нет, у меня полдюжины сервисов на джаве и скале, и также полдюжины программистов, которые считают, что rest api - это вершина программистской мысли, поэтому половина девелоперского времени уходит на парсинги и сериализации jsona. И вот их всех хотелось бы убедить, что на это можно не тратить время. То есть все сложнее, короче.

Vyatcheslav
10.02.2017
12:13:53
понятно. Но, к слову, REST все-таки не так плох. В HTTP уже кеширование продумано и все-все-все. А еще HTTP тестить ну очень просто и удобно, есть удобная питоновская приложуха для этого (названия уже не припомню).
Другое дело, если у тебя реально много данных гоняется между сервисами

Misha
10.02.2017
12:14:12
конечно неплох
прост и понятен и легко дебажить
но можно и лучше сделать
ну во всяком случае мне так кажется

Vadim
10.02.2017
12:16:00
а они в рукопашную чтоли парсят?

Misha
10.02.2017
12:16:40
нет, зачем json4s или что-то там спринговое
просто это дурацкая работа, которую за тебя может делать фреймворк

Alexandr
10.02.2017
12:17:32
но можно и лучше сделать
Эх, видимо по такой логике и действуют node-программисты, судя по тому что у них на каждую простейшую задачу существует по 100500 разных пакетов))

Denis
10.02.2017
12:17:33

Misha
10.02.2017
12:17:34
тем более когда все исходники доступны и все проекты разрабатываются в одном отделе