@scala_ru

Страница 1431 из 1499
Google
Henadz
24.04.2018
09:49:21
ноду эта фича не спасла
ну я б не сказал, что бэкэндовский жс на ноде такой уж простой

Sergei
24.04.2018
09:49:40
Не ну ГО имеет свою нишу - это перформанс на высокой нагрузке, там он и используется. + распределенность

Скала - это некий бекенд, который требует валидации с т.з. дизайна хотя бы. + математические уклоны типа биг дат

Daniel
24.04.2018
09:52:18
биг дата /= математика (от слова совсем)

Henadz
24.04.2018
09:53:53
биг дата /= математика (от слова совсем)
чаще всего там в бигдате матан 3его класса )

Nick
24.04.2018
09:58:34
go get raspedeli mne vse plz

Throughput гохи будет меньше jvm
можно и про лэитенси забиться)

Nikita
24.04.2018
09:59:41
как новый gc релизнут, го только в Debian stable останется

Nick
24.04.2018
10:00:25
zgc? шенаду?

Google
Nikita
24.04.2018
10:00:34
Шенанду

Нужно только чтобы go добавили в GraalVM

Тогда JVM захватит мир

Nick
24.04.2018
10:02:07
скорее как только научатся бинари делать мелкие

и в докере нормально работать станет)

Oleksiy
24.04.2018
10:02:35
>3 миллиарда устройств Разве, добро уже не победило?

Henadz
24.04.2018
10:04:53
Nick
24.04.2018
10:05:46
слишком дорого картинку переделывать

λoλcat
24.04.2018
10:07:27
и это число не меняется уже 10 лет
Но ведь неравенство продолжает быть верным. Зачем?

Henadz
24.04.2018
10:08:27
Но ведь неравенство продолжает быть верным. Зачем?
так я и не спорю, что продолжает. Вот только кол-во устройст увеличивается => процент девайсов, на которых юзается джава, падает

Ilya
24.04.2018
10:09:33
А нубские вопросы в этом чатике задавать позволительно?)

Nick
24.04.2018
10:09:53
конечно

Daniel
24.04.2018
10:10:03
я только этим и занимаюсь:))

тут)

ещё флужу

Ilya
24.04.2018
10:13:09
В java-классе есть 2 метода по следующими сигнатурами 1 - public static Stubber doReturn(Object toBeReturned) 2 - public static Stubber doReturn(Object toBeReturned, Object... toBeReturnedNext) из scala-класса пытаюсь выполнить следующий код Mockito .doReturn(products) - важное тут .when(requesterSpy) .receiveProductIds(urlCaptor.capture(), paramsCaptor.capture()) и получаю ошибку ambiguous reference to overloaded definition, both method doReturn in object Mockito of type (x$1: Any, x$2: Object*)org.mockito.stubbing.Stubber and method doReturn in object Mockito of type (x$1: Any)org.mockito.stubbing.Stubber match argument types (List[Int]) .doReturn(products) Можно как-то вызвать .doReturn метод чтобы зафорсить использование метода с 1ой сигнатурой?

OlegYch
24.04.2018
10:16:57
scalamock лучше

Stepan
24.04.2018
10:17:00
https://stackoverflow.com/questions/41337468/mockito-ambiguous-reference-to-overloaded-definition

KrivdaAllStars
24.04.2018
10:18:20
го для крудов норм и когда бизнесправил не много,

Sergei
24.04.2018
10:56:03
Хз, рассуждая про ГО, я скорее говорил про идеи дизайна, типа этих https://talks.golang.org/2013/distsys.slide

Google
Sergei
24.04.2018
10:57:01
Вообще, что я видел про хай лоад, говорили что на определенном объеме нагрузки, уходят от GC и управляют помятью вручную, типа C++



Let Eat
24.04.2018
11:42:02
Господа. Решил достигнуть просветления, обчитался всех этих "кодируйте ваши инварианты в типах" , пробую применить. Вот скажем типичная статья https://blog.codecentric.de/en/2016/02/phantom-types-scala/ там есть Hacker[State] и в зависимости от State у него разные методы появляются. Все красиво. Я вот над чем туплю: этого хакера надо где-то создать и куда то передать. Отдават/принимать будут общий тип Hacker[State] ведь так? Но тогда Мне ж потом до конкретного класса не добраться изза стирания типов. Где ошибка? Как использовать эти инварианты в типах на практике? Какие слова гуглить?

OlegYch
24.04.2018
11:45:23
там же в примерах и создается и отдается

отдавать принимать будешь не общий а конкретный тип

типа Hacker[T<:Caffeinated]

Let Eat
24.04.2018
11:50:35
типа Hacker[T<:Caffeinated]
Я бы рад, но как создать хакера тогда? Вот пришел запрос, там json , я смотрю в поля и создаю хакера. Но эта функция возвращает Hacker[State] (иначе никак или я чего то не вижу?) .

Alexey
24.04.2018
11:51:27
У тебя в программе должно быть явно известно какой тип вернёт функция, потому что тип известен только в компайл тайме

OlegYch
24.04.2018
11:51:33
какой тип передашь такой и вернет

Alexey
24.04.2018
11:51:38
Если это узнаётся в рантайм, то идём мимо

Oleg
24.04.2018
12:13:30
Похоже на извечный вопрос "зачем мне все ваши зависимые типы, если по сути моя программа это String => Future[String]

Mikhail
24.04.2018
12:15:16
Я бы рад, но как создать хакера тогда? Вот пришел запрос, там json , я смотрю в поля и создаю хакера. Но эта функция возвращает Hacker[State] (иначе никак или я чего то не вижу?) .
запрос из вне - это именно, что извне. это просто набалдашник который ты навешиваешь на свою программульку. свою программульку ты пишешь по феншую, потом организовываешь транспорт с внешним миром, а потом связываешь свою программульку с неопределенным внешним миром через Runtime => Compiletime

Oleg
24.04.2018
12:27:40
Я бы рад, но как создать хакера тогда? Вот пришел запрос, там json , я смотрю в поля и создаю хакера. Но эта функция возвращает Hacker[State] (иначе никак или я чего то не вижу?) .
Я попробую. Вначале у тебя извне ведь приходить не json, так? А что-то вроде Array[String] или Source[ByteString] или типа того Ты запускаешь некоторый процесс который превращает это во что-то вроде Either[JsonError, Json] можно также записать как JsonError Either Json. Оба результата - и Left(error) и RIght(json) валидны. Но тебя гораздо больше интересует второй. Ветка обработки, связанная с ним гораздо длинее и интереснее. Точно так же, имея Json ты можешь откопать в нём какое-то поле "caffeinated": true или "caffeindated" : false и и получить BoringCase Either Hacker[Caffeinated] Either Hacker[Decaffeinated] . Один раз проверив необходимое качество в Json, ты можешь запомнить на уровне типа, что твои данные этому качеству соответствуют. И все дальнейшие вычисления могут "сохранять" этот факт на уровне типов. Тебе не придётся каждый раз проверять значение какого-то поля caffeinated в рантайме. Т.е. весь длинный путь в каждой ветке от одного State до другого ты можешь пройти, сохраняя инварианты в типах.

Alexey
24.04.2018
12:43:31
никто не вкурсе собирались ли завезти -Xlint:strict-unsealed-patmat в обычную скалу из тайплевел?

Let Eat
24.04.2018
13:04:22
Я попробую. Вначале у тебя извне ведь приходить не json, так? А что-то вроде Array[String] или Source[ByteString] или типа того Ты запускаешь некоторый процесс который превращает это во что-то вроде Either[JsonError, Json] можно также записать как JsonError Either Json. Оба результата - и Left(error) и RIght(json) валидны. Но тебя гораздо больше интересует второй. Ветка обработки, связанная с ним гораздо длинее и интереснее. Точно так же, имея Json ты можешь откопать в нём какое-то поле "caffeinated": true или "caffeindated" : false и и получить BoringCase Either Hacker[Caffeinated] Either Hacker[Decaffeinated] . Один раз проверив необходимое качество в Json, ты можешь запомнить на уровне типа, что твои данные этому качеству соответствуют. И все дальнейшие вычисления могут "сохранять" этот факт на уровне типов. Тебе не придётся каждый раз проверять значение какого-то поля caffeinated в рантайме. Т.е. весь длинный путь в каждой ветке от одного State до другого ты можешь пройти, сохраняя инварианты в типах.
Спасибо, это хорошее объяснение, я подумаю, потом перечитаю и может пойму что конкретно мне кажется не совсем понятным. Пока хочется ответить "но ведь..." , только сформулировать конкретно не могу. По ощущениям такой способ годится для небольших вариаций, если у хакера много состояний (женатость, пол, гражданство и проч), которые еще и зависят друг от друга (мгогоженство разрешено только для мужчин саудитов) то Either умаяться можно. Это вопрос образа мышления, который я пытаюсь разглядеть, чем конкретных приемов.

Mikhail
24.04.2018
13:10:43
Спасибо, это хорошее объяснение, я подумаю, потом перечитаю и может пойму что конкретно мне кажется не совсем понятным. Пока хочется ответить "но ведь..." , только сформулировать конкретно не могу. По ощущениям такой способ годится для небольших вариаций, если у хакера много состояний (женатость, пол, гражданство и проч), которые еще и зависят друг от друга (мгогоженство разрешено только для мужчин саудитов) то Either умаяться можно. Это вопрос образа мышления, который я пытаюсь разглядеть, чем конкретных приемов.
во-первых женатость, пол, гражданство - это разные характеристики и у каждой свой собственный набор состояний, а не разные состояния одной характеристики (как было в хакере). а значит незачем их пихать все в одно. во-вторых - многоженство разрешено только для мужчин саудитов - не стоит так сильно забегать вперед, да и вобще не стоит слишком сильно упарываться в таких вещах - говнокод он и на типах - говнокод)

Alexey
24.04.2018
13:13:17
Я попробую. Вначале у тебя извне ведь приходить не json, так? А что-то вроде Array[String] или Source[ByteString] или типа того Ты запускаешь некоторый процесс который превращает это во что-то вроде Either[JsonError, Json] можно также записать как JsonError Either Json. Оба результата - и Left(error) и RIght(json) валидны. Но тебя гораздо больше интересует второй. Ветка обработки, связанная с ним гораздо длинее и интереснее. Точно так же, имея Json ты можешь откопать в нём какое-то поле "caffeinated": true или "caffeindated" : false и и получить BoringCase Either Hacker[Caffeinated] Either Hacker[Decaffeinated] . Один раз проверив необходимое качество в Json, ты можешь запомнить на уровне типа, что твои данные этому качеству соответствуют. И все дальнейшие вычисления могут "сохранять" этот факт на уровне типов. Тебе не придётся каждый раз проверять значение какого-то поля caffeinated в рантайме. Т.е. весь длинный путь в каждой ветке от одного State до другого ты можешь пройти, сохраняя инварианты в типах.
Я могу вставить своё "но ведь" Hacker[Caffeinated] Either Hacker[Decaffeinated] по сути с фантомными типами тебе ничего не даст, как в этой точке программы можно понять, какой именно вариант у тебя сейчас?

Let Eat
24.04.2018
13:14:48
Ну или Extends ... With ... With ... With...

во-первых женатость, пол, гражданство - это разные характеристики и у каждой свой собственный набор состояний, а не разные состояния одной характеристики (как было в хакере). а значит незачем их пихать все в одно. во-вторых - многоженство разрешено только для мужчин саудитов - не стоит так сильно забегать вперед, да и вобще не стоит слишком сильно упарываться в таких вещах - говнокод он и на типах - говнокод)
Если не забегать то простые инварианты я и руками проверю. Хочется получить как раз неошибиться в сложных состояниях. Пока кажется что золотые гора близко и можно получить 1) невозможность создать невалидного хакера и 2) когда настанет время делать что-то с хакером (например делить его наследство после смерти) то компилятор (пусть и в рантайме), но заставит меня проверить все что нужно через match или еще как-нибудь

Google
Mikhail
24.04.2018
13:20:02
Да, я про множество отдельных состояний и говорю: Hacker[CoffeeState, Citizenship, Marital, Sex]
давай я просто намекну, что скала не тайп левел язык, а язык с некоторыми возможностями тайп левел шкодинга. а ты сам там уже решишь, когда будешь готов остановиться (в итоге все равно ведь бросишь заниматься моделированием на типах в скале всего подряд, особенно того для чего они плохо предназначены)

Mikhail
24.04.2018
13:22:18
@rossmohax чем тебе не угодили кейс классы? case class Hacker(coffeeState:CoffeeState, ..... ) ? я к тому - откуда у тебя такое маниакальное желание все на типы в скале перевести?

Alexey
24.04.2018
13:22:28
Нужно помещать в класс какой то evedence, который уже можно сматчить в рантайме

Admin
ERROR: S client not available

Oleg
24.04.2018
13:22:38
Как? Поматчить ты тут ничего не можешь
не можешь Left \ Right поматчить?

Alexey
24.04.2018
13:22:53
Grigory
24.04.2018
13:24:21
посоны хочу лифтануть функцию до функтора кошками (K, List[B]) => (K, List[B]) и чет не хочет лифтить скалаз лифтила прост парой импортов а тут не схватывает простой пример чтото типа (((_: Int) * 3) map {_ + 100}) (1) работает в том же скоупе где я хочу поднять пред функцию

Grigory
24.04.2018
13:25:52
я хочу map использовать

оно чтото типа fa andThen f должно быть

Oleg
24.04.2018
13:26:12
У Function1?

Grigory
24.04.2018
13:26:14
да

Oleg
24.04.2018
13:26:30
import cats.instances.function._ ?

import cats.syntax.functor._

Mikhail
24.04.2018
13:27:15
Как откуда, увидел игрушку, глаза загорелись
Видимо скоро потухнут. Хотя возможно есть надежда, что до этого ты все же успеешь осознать для каких игр подходит эта игрушка и тогда будет тебе счастие)

Let Eat
24.04.2018
13:27:25
@rossmohax чем тебе не угодили кейс классы? case class Hacker(coffeeState:CoffeeState, ..... ) ? я к тому - откуда у тебя такое маниакальное желание все на типы в скале перевести?
Вон академики говорят, кодируйте состояния в типах, пусть компилятор проверит или заставит вас в рантайме проверить. Вот и пробую, но на практике в моем неумелом рантайме типов не остается :( пытаюсь понять, как это все на практике применить. Может TypeTag протаскивать?

Grigory
24.04.2018
13:27:50
import cats.syntax.functor._
проклятье яже проверял у меня не поднималось

Google
Grigory
24.04.2018
13:27:56
наверное пересекались имплиситы

спасибо Олег

Nick
24.04.2018
13:28:37
наверное пересекались имплиситы
тогда бы была ошибка красноречивая

Grigory
24.04.2018
13:29:41
тогда бы была ошибка красноречивая
w00t? верно все было он имплисит кейс класс типа не подставлял потому что много подходило

ну это есдинвтенное обяснение

Let Eat
24.04.2018
13:39:08
"заставит" значит что без проверок не скомпилится просто
Это и имею ввиду: заставит вставить рантайм проверку. Я непротив, лишь бы по рукам бил в нужный момент. Писать программульку по фен шую как рекоммендует @rudogma вроде могу представить как, но вот как из рантайма перескочить в компайлтайм пока не могу увидеть , видимо надо взять паузу и обдумать :)

Alex
24.04.2018
13:41:32
это надо шейплес курить, но вообще без завтипов оно всё будет муторно :)

что-то типа https://github.com/fthomas/refined наверное будет неплохим решением

ну или можно угореть по связкам со сторонними пруверами, типа там https://github.com/epfl-lara/leon https://github.com/epfl-lara/ScalaZ3/ https://github.com/larsrh/libisabelle

Let Eat
24.04.2018
13:47:32
это надо шейплес курить, но вообще без завтипов оно всё будет муторно :)
Книжку по Shapeless купил, прочитал и даже кажется что-то понял :)

Mikhail
24.04.2018
13:47:52
Это и имею ввиду: заставит вставить рантайм проверку. Я непротив, лишь бы по рукам бил в нужный момент. Писать программульку по фен шую как рекоммендует @rudogma вроде могу представить как, но вот как из рантайма перескочить в компайлтайм пока не могу увидеть , видимо надо взять паузу и обдумать :)
ну ты напиши программку по фен шую, а там посмотрим. сначало фен шуй твой может быть подправим, потом уже подскажем как связку сделать - хотя возможно там и само все встанет на свои места, когда фен шуй подправим))

Alex
24.04.2018
13:48:02
ну вообще сам шейплесс немного про другое, а именно про generic алгоритмы

там ключевой момент - witness-типы

которые недавно вмержили в виде http://docs.scala-lang.org/sips/42.type.html

Konstantin
24.04.2018
13:49:07
всем привет! Я с очередным нубовским вопросом. я правильно понял, что yield всего-лишь формирует список при работе с циклами?

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