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

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

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

Google

Aleksander
23.03.2018
06:44:31

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

Diemust
23.03.2018
06:47:07

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?
посмотрел экзамплы, там как я понял только обработанные исключения будут логироваться? а как же необработанные?
для того и хочу прикрутить, проект огромный, всё за раз не найдёшь / не обработаешь, должны же быть оптимальные решения?)

Oleg
23.03.2018
06:52:12

Aleksander
23.03.2018
06:52:15

Google

Aleksander
23.03.2018
06:52:35

Oleg
23.03.2018
06:52:35

Константин
23.03.2018
06:53:23

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

Aleksander
23.03.2018
06:55:17

Константин
23.03.2018
06:56:14

Oleg
23.03.2018
06:57:02
аааа стоп, не увидел : Int

Александр
23.03.2018
07:00:42

Константин
23.03.2018
07:03:03

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

Oleg
23.03.2018
07:08:29

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
Об этом Петрашка рассказывал в одном из скалалазов
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

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

Oleg
23.03.2018
07:22:03

M
23.03.2018
07:28:47

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/

Daniel
23.03.2018
07:56:54

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
}
};

Oleg
23.03.2018
08:01:02

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

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

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

Daniel
23.03.2018
08:10:30

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
Ну, я больше про парсеры в соседнем чате просчто по тому, что сам из парсеров. А энузиасты от БД нужны. Может хоть расскажут, как оно там на самом деле)
Как, напрмиер, сделать комбинаторы так, чтобы людям, которые хотят "просто писать запросы" было удобно пользоваться?

Daniel
23.03.2018
14:56:03

Oleg
23.03.2018
14:57:03

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


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

Alexander
23.03.2018
15:39:35

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

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