@scala_ru

Страница 1364 из 1499
Константин
23.03.2018
06:44:03
да я думал про парсинг логов, мне показалось это не айс

спринг не юзаем

Oleg
23.03.2018
06:44:18
Так где эксепшны?

Константин
23.03.2018
06:44:29
приложение серверное, должно отправлять на собственный сервак интеграции, для разрабов

Google
M
23.03.2018
06:44:32
спринг не юзаем
Это шутка была ;(

Константин
23.03.2018
06:44:45
Это шутка была ;(
сорян) сразу не понял)

Diemust
23.03.2018
06:45:50
просто добавить поле "эксепшон" и писать туда эксепшон нельзя?

Aleksander
23.03.2018
06:45:59
Кстати, 1111 :)

Oleg
23.03.2018
06:46:34
Кстати, 1111 :)
в компиляторском чатике только только празновали 111

Diemust
23.03.2018
06:47:07
в компиляторском чатике только только празновали 111
прям праздновали? сходка там была или чего

Oleg
23.03.2018
06:47:22
да я думал про парсинг логов, мне показалось это не айс
А какой кейз действительно не укладывается в сбор логов?

Andrey
23.03.2018
06:50:25
А как Scala разворачивает несколько case внутри {} (например метода)? Сколько PartialFunction? И вообще как всё это матчится?

Константин
23.03.2018
06:51:22
sentry/raven?
посмотрел экзамплы, там как я понял только обработанные исключения будут логироваться? а как же необработанные?

для того и хочу прикрутить, проект огромный, всё за раз не найдёшь / не обработаешь, должны же быть оптимальные решения?)

Aleksander
23.03.2018
06:52:15
посмотрел экзамплы, там как я понял только обработанные исключения будут логироваться? а как же необработанные?
Там можно поразному заморочиться за мониторинг js ошибок, в целом оч гибкий инструмент и весьма полезный )

Google
Andrey
23.03.2018
06:54:44
зависит от случая
Ну например такое как он развернёт case Some(e: Int) => e case None => 0

Aleksander
23.03.2018
06:55:17
https://docs.sentry.io/clients/java/usage/ это оно, да?
Должно быть оно, через скалку ни разу не юзал(

Константин
23.03.2018
06:56:14
Oleg
23.03.2018
06:57:02
Ну например такое как он развернёт case Some(e: Int) => e case None => 0
это будет приблизительно так val x$1 = Some.unapply(x) if(!x$1.isEmpty){ val e = x$1.get e } else if(x == None){ 0 } else { throw new MatchError }

аааа стоп, не увидел : Int

Константин
23.03.2018
07:03:03
у нас splunk, пишем метрики и ошибки
что-то тяжеловесное и платное, хочется легковесное и бесплатное, нужен минимум по факту функционала

Dmitry
23.03.2018
07:03:46
Elk

Oleg
23.03.2018
07:04:24
Ну например такое как он развернёт case Some(e: Int) => e case None => 0
учитывая субматч, приблизительно так val x$1 = Some.unapply(x) var matched$1 = false var match$1Result: Int = _ if(!x$1.isEmpty){ val x$1$2 = x$1.get if(x$1$2.isInstanceOf[Int]){ val e = x$1$2.asInstanceOf[Int] matched$1 = true match$1Result = e } } if(matched$1) { match$1Result } else if(x == None){ 0 } else { throw new MatchError }

Константин
23.03.2018
07:07:09
Elk
выглядит весьма готовым, за собой тянет много всего(mysql,apache и т.д.). статистику я и сам смогу построить, мне бы просто эксепшины по http принять от своего серверного приложения

Dmitry
23.03.2018
07:07:44
Вааат?

Какой такой мускуль?

Зачем апач?

Ну возьми influx

Google
Dmitry
23.03.2018
07:08:30
Пиши в него напрямую

Ну или поставь какого-нибудь агента на stderr пусть скармливает в логстеш

Тебе к девопсам

Oleg
23.03.2018
07:10:50
Сколько программистов нужно, чтобы вкрутить сбор логов? 0 - иди к девопсам

Andrey
23.03.2018
07:12:08
@odomontois спасибо, вроде бы полегчало

Oleg
23.03.2018
07:13:08
@odomontois спасибо, вроде бы полегчало
если боишься за производительность, самое тяжёлое в матчах - это unapply

Об этом Петрашка рассказывал в одном из скалалазов

unapply в большинстве стандартных реализаций возвращает Option а если несколько полей - Option[TupleN]

эта вот аллокация отнимает больше ресурсов, чем все остальные сравнения

Andrey
23.03.2018
07:14:51
Не, мне было интересно как оно под капотом работает

Так, а какой тип у PartialFunction при большом количестве case?

Oleg
23.03.2018
07:15:53
Петрашка утверждал, что если у тебя большой матч с кучей кейзов с проверкой на тип, нонешняя ЖВМ может пачку if(x instanceof T) за O(1) выполнить

Oleg
23.03.2018
07:16:12
Не, мне было интересно как оно под капотом работает
у PartialFunction тип не зависи от количества case

Andrey
23.03.2018
07:19:59
Ну например val fun: PartialFunction[Double, Double] = {case ...} я явно указываю типы, а когда оно генерируется скалой, что происходит?

Oleg
23.03.2018
07:22:03
Ну например val fun: PartialFunction[Double, Double] = {case ...} я явно указываю типы, а когда оно генерируется скалой, что происходит?
ну тогда можешь считать, что вот тот код будет сгенерирован дважды первый будет для isDefinedAt который будет просто возвращать true или false вместо matchError второй уже такой как я написал для apply

Oleg
23.03.2018
07:29:24
я тоже хотел предложить javap, но хз как это в скалку перевести

M
23.03.2018
07:30:37
https://alvinalexander.com/scala/how-to-disassemble-decompile-scala-source-code-javap-scalac-jad

Anton
23.03.2018
07:56:01
можно вроде даже онлайн смотреть (без регистрации и смс) http://www.javadecompilers.com/

Google
Anton
23.03.2018
07:56:55
сам юзал как-то Procyon, но, например lazy val в 2.12 он не до конца распарсил, выплюнув частично байткод

Oleg
23.03.2018
07:57:32
Так и какой же результат у PF с тем кодом, посоны?

Daniel
23.03.2018
07:59:22
def <init>(): type = { iw.super.<init>(); iw.this.res3 = { case <synthetic> val x1: Option = scala.Option.apply(scala.Int.box(42)); case7(){ if (x1.$isInstanceOf[Some]()) { <synthetic> val x2: Some = (x1.$asInstanceOf[Some](): Some); { val e: Int = scala.Int.unbox(x2.value()); { <synthetic> val x3: Int = e; matchEnd6(x3) } } } else case8() }; case8(){ if (scala.None.==(x1)) matchEnd6(0) else case9() }; case9(){ matchEnd6(throw new MatchError(x1)) }; matchEnd6(x: Int){ x } };

Daniel
23.03.2018
08:01:13
тот

лан, не печатай

scala> Option(42) match { | case Some(e: Int) => e | case None => 0 | }

Admin
ERROR: S client not available

Oleg
23.03.2018
08:01:32
не пойму, там PartialFunction-то есть?

нееее

надо val x: PartiualFunction[Any, Int] = {...}

Daniel
23.03.2018
08:02:05
мне лень набирать консоль была уже открыта, вставил

бомбит?
не понял настолько что не знаю что ответить

Oleg
23.03.2018
08:03:23
не понял настолько что не знаю что ответить
Ну уже в двух чатах заценили Oleg [Tinkoff] is typing, я подумал, что тебя раздражает

Daniel
23.03.2018
08:03:56
а-а не даже живьем не работает

Anton
23.03.2018
08:03:59
выглядит как вставка в статье про SCP, case9() - 3 сотрудника пострадали

Daniel
23.03.2018
08:10:30
надо val x: PartiualFunction[Any, Int] = {...}
https://gist.github.com/optician/aab7f52c9c1ce0e6b60fec64456fb692 пойдет?

Alex
23.03.2018
11:51:55
https://underscore.io/blog/posts/2018/03/20/fs2.html

Daniel
23.03.2018
12:29:14
Google
Semyon
23.03.2018
13:59:33
Всем привет. Наверняка здесь есть те, кто давно мечтает о том, как бы написать свою библиотеку парсер-комбинаторов, получше изучить всякие нетривиальности алгоритмов синтаксического анализа, или таки применить знания на практике. Есть предложение. Создание библиотеки парсер комбинаторов для запросов к граф-структурированным данным (к графовым БД). Уже есть некоторый прототип (https://github.com/YaccConstructor/Meerkat), крвткое описание того, как и почему это работает (https://github.com/YaccConstructor/articles/blob/master/InProgress/GRADES-NDA/Semyon_combinators/paper/combinators_for_graph_querying.pdf), примерный план того, что хочется сделать в ближайшее время (https://github.com/YaccConstructor/Meerkat/issues/28). Если идея кажется кому-то интересной, то можнро 1) высказать своё мнение 2) поменторить проект 3) покодить. С чем можно будет поработать: прсер комбинаторы (основанные на обобщённом LL, он же GLL), графовые БД, парарллельный и распределённый синтаксический анализ (над этим сперва надо много думать).

Oleg
23.03.2018
14:18:02
Всем привет. Наверняка здесь есть те, кто давно мечтает о том, как бы написать свою библиотеку парсер-комбинаторов, получше изучить всякие нетривиальности алгоритмов синтаксического анализа, или таки применить знания на практике. Есть предложение. Создание библиотеки парсер комбинаторов для запросов к граф-структурированным данным (к графовым БД). Уже есть некоторый прототип (https://github.com/YaccConstructor/Meerkat), крвткое описание того, как и почему это работает (https://github.com/YaccConstructor/articles/blob/master/InProgress/GRADES-NDA/Semyon_combinators/paper/combinators_for_graph_querying.pdf), примерный план того, что хочется сделать в ближайшее время (https://github.com/YaccConstructor/Meerkat/issues/28). Если идея кажется кому-то интересной, то можнро 1) высказать своё мнение 2) поменторить проект 3) покодить. С чем можно будет поработать: прсер комбинаторы (основанные на обобщённом LL, он же GLL), графовые БД, парарллельный и распределённый синтаксический анализ (над этим сперва надо много думать).
идея кажется мне интересной, однако

1. я не понимаю, что значит парсер-комбинаторы для <предметная область>. Идея комбинаторов ведь в том, чтобы с нуля написать парсер своего синтаксиса для своей предметной области

В статье, как я понял описывается как раз написание языка запросов с помощью комбинаторов

2. Графовые БД, кажется, находятся в негативном тренде. Есть какой-то проект где эти квери планируется использовать?

Semyon
23.03.2018
14:36:42
1) Имеется в виду комбинаторы как некоторая техника. Когда пишется парсер, обычно принято использовать какие-то библиотеки комбинаторов. И уже с использованием этих комбинаторов строить свой парсер. В статье разговор о том, что точно так же можно построить библиотеку комбинаторов, с использованием которой можно строить запросы к БД. Не язык для запросов (типа ещё один Cypher или что-то такое) а именно запросы. 2) Про тренд ничего не скажу. Какого-то великого проекта пока нету. В качестве "пилота" пытаемся применить для статического анализа (ряд задач типа анализа алиасов выражается через запросы к графовому представлению программы) Это, кстати, ещё один интересный вопрос: где подобное можно применять.

Oleg
23.03.2018
14:41:47
Меня очень интересуют графовые БД. Писал плагины для orientDb для старого проекта. За шаг от вывода arangodb на прод. Но иногда такое ощущение, что интересуют только меня. Даже вон бигдатовец @optician_owl с большим скепсисом отзывался на базе своего опыта

Парсеры, если честно, интересут постольку-поскольку.

Но глядя, на переписку в другом чате, понимаю, что вам нужны именно энтузиасты в сфере парсинга

Semyon
23.03.2018
14:55:22
Ну, я больше про парсеры в соседнем чате просчто по тому, что сам из парсеров. А энузиасты от БД нужны. Может хоть расскажут, как оно там на самом деле)

Как, напрмиер, сделать комбинаторы так, чтобы людям, которые хотят "просто писать запросы" было удобно пользоваться?

Oleg
23.03.2018
14:57:03
Как, напрмиер, сделать комбинаторы так, чтобы людям, которые хотят "просто писать запросы" было удобно пользоваться?
значит, я правильно понимаю, что идея сделать не SQL, идея сделать DSL на языке Х для построения запросов в драйвер?

Semyon
23.03.2018
15:10:53
значит, я правильно понимаю, что идея сделать не SQL, идея сделать DSL на языке Х для построения запросов в драйвер?
Точно не SQL. И даже не DSL (в "простом" понимании). Тут разница примернно как между библиотекой парсер комбинаторов и парсергенератором, у которого есть свой DSL для описания грамматики. Мы хотим сделать библиотеку парсер комбинаторов. А работает она не через генерацию запросов в драйвер, а через низкоуровневое API вида "дай вершину", "дай исходящие рёбра"

В этом (в работе через низкий уровень) есть, конечно, свои плюсы и минусы. Минусы — не попользовать высокоуровненые оптимизации. Плюсы — низкий уровень (типа доступа к вершинам и рёбрам) есть почти у всех и почти всегда простой и достаточно быстрый, так что можно реализовать достаточно абстрактную либу, которую несложно прикрутить к тому, что нужно.

Daniel
23.03.2018
15:25:00
Смотри, есть древняя старая схема .ifc, для определения конструкций здания, оборудования, и т.п. Пригодится ли то, что ты делаешь, к составлению запросов к бд, где хранится файл по этой схеме? (запрос, например, все наружные стены 5 этажа с выходом на восток)?

В чем будет плюс по сравнению с sql запросом?

Daniel
23.03.2018
15:39:47
Получается, что часть логики, которая выполнялась на c++, теперь будет выполняться при помощи парсер комбинаторов?

Vadim
23.03.2018
16:04:02
а причем тут парсер комбинаторы?)

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