
Wystan
05.09.2017
16:51:09
ну хип же не задашь отдельно; я написал sbt compile "gatling:test" -J-Xmx2G -J-Xss2M
подозреваю, что это имплиситы в гатлинге довели до такого греха. но, видимо, узнать нельзя

Nick
05.09.2017
16:52:21
Xss стек и задает
прост ты не дописал параметры, я тебе про эт и написал

Google

Nick
05.09.2017
16:53:11
вообще это бывает довольно часто, так что не парься и прост Xss оставь
ох, doobie уже M6
круто

Mikhail
05.09.2017
17:39:17
кто-нибудь пробовал выводить импилиситы в макросах? c.inferImplicitValue ? интересует вывод имплисита внутри тела метода (defdef). Проблема в том, что для метода и для всех поддеревьев один позишин выдает, а мне нужен позишин изнутри именно, чтобы вывод с учетом параметров метода произошел(
Вобщем сработала такая связка. Есть макрос, который генерирует бойлерплейт, внутри сгенерированного кода проставляется еще одна макро аннотация (внутри нужного метода по дереву), таким образом новый макрос попадает в контексте внутри метода и начальная позиция этой аннотации уже подходит и все нужные имплиситы внутри второго макроса выводятся. а этот второй макрос уже трансформирует дерево сгенерированное другим макросом до него с целью оптимизации имплиситных вызовов, чтобы по деревьям раскинулись единожды созданные варианты, а не плодились копии


Nikolay
05.09.2017
19:16:44
да, была такая идея
а если структуры данных сильно вложенные, это получится сделать теми средствами, что мета предоставляет сейчас?

Aleksey
05.09.2017
19:20:28
Котоны, есть техника для написания асинхронного кода в синхронном, императивном стиле, помогите вспомнить название. Суть в том, что внутри некого блока любой вызов бросает исключение и уходит выполяться в тредпул. По выполнению блок начинает выполняться заново, но вызов вместо исключения вернет вычисленное значение. Я видел такое на Ocaml много лет назад, вчера что-то вспомнилось и захотелось найти реализацию для Scala.

Nick
05.09.2017
19:21:34

Mikhail
05.09.2017
19:23:12


Nick
05.09.2017
19:28:01
Это явно не про await async

Google

Nick
05.09.2017
19:28:08
И корутинки
Я вообще о таком впервые слышу

Mikhail
05.09.2017
19:29:52
Это явно не про await async
эвейт асинк - не ждет выполнение, а меняет аст дерево таким образом, как будто ты сам руками писал код
for {
result <- future
result2 <- future2
} yield xunya-munya
это не совсем то, о чем Фомкин говорит, но смысл тот же

Nick
05.09.2017
19:30:24

Mikhail
05.09.2017
19:33:39
@fomkin ты же семантику эвейт-асинк жиэсную имел ввиду? Потому что единственная альтернатива на жвм, без трансформации аст в Future[], мне видится - while (not ready){ lock.wait } , что естественно никак не годится для масштабных действий)

Aleksey
05.09.2017
19:38:32

Daniel
05.09.2017
19:39:15
как ты стек вернешь потом?

Aleksey
05.09.2017
19:39:53

Nick
05.09.2017
19:39:53
А он нужен?
В общем асинк эвеит так и делает

Mikhail
05.09.2017
19:40:18

Daniel
05.09.2017
19:40:41
конечно нужен, тебе же нужно вернуться в прошлый контекст

Mikhail
05.09.2017
19:40:56

Nick
05.09.2017
19:40:58

Mikhail
05.09.2017
19:41:13

Nick
05.09.2017
19:41:42
Там нет возвращения в него , эт прост сахар вроде как, по факту все в другом потоке будет

Aleksey
05.09.2017
19:41:42

Mikhail
05.09.2017
19:41:48

Aleksey
05.09.2017
19:42:07
в общем мне просто название хочется вспомнить.

Nick
05.09.2017
19:42:19
http://docs.paralleluniverse.co/quasar/

Google

Nick
05.09.2017
19:42:33

Mikhail
05.09.2017
19:44:29

Nick
05.09.2017
19:44:31

Mikhail
05.09.2017
19:45:36

hohserg
05.09.2017
19:46:46
Всем ку

Mikhail
05.09.2017
19:48:38

Aleksey
05.09.2017
19:48:51

Nick
05.09.2017
19:49:49
Хз чем кончилось
Всем ку
Сразу скажу, что ты делаешь дичь.
Исходя из инфы в скайпе

Mikhail
05.09.2017
19:51:13
Хз чем кончилось
если ты про континуации, то врятли чем-то хорошим может закончиться). логику континуаций чуть сложнее хелоуворда становится невыносимо читать)

Aleksey
05.09.2017
19:51:43

Nick
05.09.2017
19:52:02
Все там ок было

Mikhail
05.09.2017
19:52:30
Все там ок было
на уровне компилятора - да. но на уровне человека - мозг наизнанку может вывернуть
reset {
shift { k: (Int=>Int) =>
k(k(k(7)))
} + 1
} * 2 // result 20
интуитивненько же)
def foo() = {
1 + shift(k => k(k(k(7))))
}
def bar() = {
foo() * 2
}
def baz() = {
reset(bar())
}
baz() // result 70
вот это вобще огонь прям)

Nikolay
05.09.2017
19:55:52

Mikhail
05.09.2017
19:57:24
hohserg ващет можно)
def test[T: ClassTag]:T = implicitly[ClassTag[T]].runtimeClass.newInstance

Google

Nikolay
05.09.2017
19:58:15
а что там было?

hohserg
05.09.2017
19:58:35
Мне требуется сериализовывать разные сложные объеты, их типы примерно такие: HashMap[String, Map[Int,Int]].
Значений у меня несколько, у каждого свой тип, но все их мне нужно сериализовать и сохранить/загрузить на/с диска. Я написал функцию, которая принимает значение для сохранения и путь.
—--Лирическое отступление---
Еще я столкнулся с затиранием типов, но не сразу понял.
Например, до изменения кода у меня было HashMap[String, Set[Int]], но после рефакторинга я сделал обертку для Set[Int] и получилось HashMap[String, ItemDamageSet], когда мапа загрузилась с диска - она хранила Set[Int] и при чтении не возникало исключения, но оно возникло когда программа пыталась обработать Set[Int] как ItemDamageSet. Поэтому я попробовал юзать ClassTag и TypeTag(пока не тестировал, т.к. мне нужно new T(), а это не дает делать)
—------
Функция загрузки выглядит так:
https://pastebin.com/41HcY2Vj
Заранее спасибо за помощь

Igor
05.09.2017
19:59:25
дикий бот)

Daniel
05.09.2017
20:00:59
надо исключения впилить, ишью вроде даж есть


Mikhail
05.09.2017
20:01:03
Мне требуется сериализовывать разные сложные объеты, их типы примерно такие: HashMap[String, Map[Int,Int]].
Значений у меня несколько, у каждого свой тип, но все их мне нужно сериализовать и сохранить/загрузить на/с диска. Я написал функцию, которая принимает значение для сохранения и путь.
—--Лирическое отступление---
Еще я столкнулся с затиранием типов, но не сразу понял.
Например, до изменения кода у меня было HashMap[String, Set[Int]], но после рефакторинга я сделал обертку для Set[Int] и получилось HashMap[String, ItemDamageSet], когда мапа загрузилась с диска - она хранила Set[Int] и при чтении не возникало исключения, но оно возникло когда программа пыталась обработать Set[Int] как ItemDamageSet. Поэтому я попробовал юзать ClassTag и TypeTag(пока не тестировал, т.к. мне нужно new T(), а это не дает делать)
—------
Функция загрузки выглядит так:
https://pastebin.com/41HcY2Vj
самое простое и дикое - Serializable - оно вроде и типы все восстановит как надо. Но это прям вобще дичь) Сериализуй в жисонку и пихай туда сюда. Если нет понимания платформы, то жисон хотя бы позволит читабельные данные сохранить и что-то с ними сделать, преобразовать - если напортачишь


hohserg
05.09.2017
20:05:29
"самое простое и дикое - Serializable - оно вроде и типы все восстановит как надо." А можно подробнее? ItemDamageSetнаследует Serializable, если че. Дело то в том, что на стадии выполнения нет отличия между A[B] и A[C], а это мне нужно во время загрузки с диска. Пока данные используются тестовые - их не жалко и их не много, чтобы воостановить в нужном виде. С json хорошая идея вообще.

Mikhail
05.09.2017
20:07:51

hohserg
05.09.2017
20:10:07
Да, но в A[B] можно засунуть C в рантайме и это останется незамеченным до поры-до времени

Mikhail
05.09.2017
20:10:49

hohserg
05.09.2017
20:15:54
Ну так у меня эти A и C не лежат на одной цепочке наследования и возникает ClassCastException, но не на стадии загрузки, а когда пытается юзать загруженные данные.
Ну да ладно, это не основная проблема и решается крепкой памятью. А основная проблема в том, что у мне нужна универсальная функция, принимающая пут до файла и возвращающая загруженную из файла структуру...
Сейчас до меня дошло, что у меня все значения - это HashMap, и, кажется, затирание типов туту будет на руку:
всместо new T() делать new HashMap[Any,Any]()
Еще вопрос:
можно писать что-то вроде
def a[T: ClassTag](...)={...}
Где подробнее почитать о таком синтаксисе?

Mikhail
05.09.2017
20:24:46

Nick
05.09.2017
20:25:28
а в чем проблем сохранить HashMap просто как массив из пар ключ значение?
можно тупо строкой

hohserg
05.09.2017
20:25:38
Ну да, сахар. А свои типы как нужно оформлять, чтобы юзать как ClassTag?
Nick, не понял.

Mikhail
05.09.2017
20:26:33

Nick
05.09.2017
20:26:45
или проблема с десериализации?

hohserg
05.09.2017
20:26:45
В скайпе ответили, что это context bounds - про сахар

Google

hohserg
05.09.2017
20:26:51
десериализаций

Nick
05.09.2017
20:27:16
возьми protobuf

Mikhail
05.09.2017
20:27:56

hohserg
05.09.2017
20:28:58
Nick, он типы сохраняет полностью? Если я запишу A[B] в файл, а потом попытаюсь прочитать A[C] - он выдаст исключение при чтении?

Nick
05.09.2017
20:29:25

hohserg
05.09.2017
20:29:46
Хорошо ,попробую его

Nick
05.09.2017
20:30:36
можешь по тупому сделать match по классу и сохранять Int и потом из него восстанавливать
а вообще тебе Михаил правильно сказал про json
можно взять circe с автоматической деривацией
он все сам сделает

Mikhail
05.09.2017
20:31:33

Nick
05.09.2017
20:32:34

Mikhail
05.09.2017
20:33:00

Nick
05.09.2017
20:33:14
ну в котах так любят делать, везде

hohserg
05.09.2017
20:33:17

Nick
05.09.2017
20:33:37
MySingle эт просто уточненный тип