@scala_ru

Страница 492 из 1499
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
если убрать первый implicit, то все будет компилирваться и даже запускаться, но загадочно не работать
Не пойму, почему загадочно? Контекст имплиситно не передался для создания провайдера и создался по умолчанию. Даже в сорцы не надо лезть, чтобы причинно-следственную связь установить.

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
а вот за пихание имплиситов куда не попадя просто для синтаксических упрощений надо бить по рукам
+1 и опять доказали что кривые ручки всему виной, что написал то и получил, проблема не в языке и не в его фичах, везде надо подходить с умом.

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
в идрисе есть имплиситы
даже в Haskell есть имплиситы

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

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
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
да не, первый пункт еще ладно, но второй - это прям дерьмом несет.
дерьмо, но часто ли приходится писать несколько разных сериализаторов для одного типа?

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

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
все решается настройкой принтера
Тут дело не в принтере, а то какой ast генерится.

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

что пушка что серси

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

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

если это публичное API - то лучше явный копродукт заюзать с названиями

Aleksey
10.02.2017
11:52:02
если это публичное API - то лучше явный копродукт заюзать с названиями
Это ок. Я говорю про вот этот value. Кирка и для адт то же самое сгенерит ведь, так?

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
ну скажем так если это общение между двумя серверами где автоматически выводтся декодеры энкодеры - пофиг вообще
а вот кстати. Кто знает (и пользовался) хорошими RPC для скалы? Я знаю про remotely, но под него надо весь проект перелопачивать и akka-rpc есть вроде, но он какой-то не очень зрелый. Потому что гонять json между серверами как-то тупо и надоело.

Denis
10.02.2017
12:04:07
gRPC смотри Например etcd с третьей версии тоже на нем

Главное есть имлементация под Go

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 разных пакетов))

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

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