Size: a a a

Compiler Development

2020 April 20

KR

K R in Compiler Development
Andrei Kurosh
Как с любым костылем - в одном конкретном случае работает, но шаг в сторону - и скрипт стреляет вам в лицо. Иногда такой подход имеет право на жизнь, но назвать его правильным и советовать другим у меня язык не повернется
Это не скрипт, это интерактивная сессия.
источник

AK

Andrei Kurosh in Compiler Development
Для интерактивного исследования неизвестного json’а тем более лучше открыть что-то типа vscode, чтобы были подсветка/форматирование/свертывание блоков, а не в консоли ковырять :)
источник

ИЧ

Илья Чистяков in Compiler Development
Andrei Kurosh
Для интерактивного исследования неизвестного json’а тем более лучше открыть что-то типа vscode, чтобы были подсветка/форматирование/свертывание блоков, а не в консоли ковырять :)
как заворачивание json в объект поможет не стрелять скриптами в лицо?

вообще непонятно по какому принципу объект генерить, тем же курлом, получил json, курл про формат ничего не знает
источник

AK

Andrei Kurosh in Compiler Development
Илья Чистяков
как заворачивание json в объект поможет не стрелять скриптами в лицо?

вообще непонятно по какому принципу объект генерить, тем же курлом, получил json, курл про формат ничего не знает
когда json в виде строки, искать значение по конкретному пути с помощью строковых операций и регулярок сложно и ненадежно. когда json распаршен в дерево, применить путь становится тривиальной задачей
источник

AK

Andrei Kurosh in Compiler Development
в "прекрасной консоли будущего" можно нанизать через все через пайпы: curl возвращает текст, его принимает парсер и возвращает объект-дерево, а его в свою очередь принимает и обрабатывает кто угодно дальше
источник

ИЧ

Илья Чистяков in Compiler Development
Andrei Kurosh
когда json в виде строки, искать значение по конкретному пути с помощью строковых операций и регулярок сложно и ненадежно. когда json распаршен в дерево, применить путь становится тривиальной задачей
ну да, для этого есть jq, и unix-way - разделяй и властвуй
источник

SM

Sailor Moon in Compiler Development
Andrei Kurosh
в "прекрасной консоли будущего" можно нанизать через все через пайпы: curl возвращает текст, его принимает парсер и возвращает объект-дерево, а его в свою очередь принимает и обрабатывает кто угодно дальше
чего не хватает сегодняшней консоли что бы стать прекрастной?
источник

KR

K R in Compiler Development
Sailor Moon
чего не хватает сегодняшней консоли что бы стать прекрастной?
Это мы не знаем, т.к. не проходили стадию сбора требований. Как обычно в програзме, короче.
источник

AK

Andrei Kurosh in Compiler Development
Илья Чистяков
ну да, для этого есть jq, и unix-way - разделяй и властвуй
Только современные никсы сами не следуют этой идеологии. Кажется ссылка уже была в этом канале:

https://danluu.com/cli-complexity/

А причина как раз в том, что утилита может вернуть наружу только текст, а не некое универсальное представление, с которым сможет работать другая произвольная утилита
источник

МБ

Михаил Бахтерев in Compiler Development
Andrei Kurosh
в "прекрасной консоли будущего" можно нанизать через все через пайпы: curl возвращает текст, его принимает парсер и возвращает объект-дерево, а его в свою очередь принимает и обрабатывает кто угодно дальше
И как ввод этого дерева будет выглядеть для программы на Си?
источник

AK

Andrei Kurosh in Compiler Development
Условно говоря, есть ls и есть ps. Обе утилиты возвращают таблицу с данными. К любой таблице должны быть применимы такие операции как сортировка, фильтрация строк\столбцов, агрегация и т.д. - но каждая утилита вынуждена реализовывать весь этот функционал самостоятельно, потому что он возможен только на уровне внутреннего представления, а не на уровне текста. Вместо этого в nushell есть одна универсальная команда where, которая фильтрует табличный вывод любой другой команды. Это очень удобно и гибко, но возможно только при общении объектами
источник

МБ

Михаил Бахтерев in Compiler Development
Andrei Kurosh
Условно говоря, есть ls и есть ps. Обе утилиты возвращают таблицу с данными. К любой таблице должны быть применимы такие операции как сортировка, фильтрация строк\столбцов, агрегация и т.д. - но каждая утилита вынуждена реализовывать весь этот функционал самостоятельно, потому что он возможен только на уровне внутреннего представления, а не на уровне текста. Вместо этого в nushell есть одна универсальная команда where, которая фильтрует табличный вывод любой другой команды. Это очень удобно и гибко, но возможно только при общении объектами
Это понятно, что удобно. Но, всё же, важно, как с этим великолепием должны работать пользовательские программы. Вот сижу я, отлаживаюсь, и мне надо в консольку чё-то дампить. Писать полноценный генератор json для того, чтобы чиселки выводить? Или как?
источник

AK

Andrei Kurosh in Compiler Development
Михаил Бахтерев
И как ввод этого дерева будет выглядеть для программы на Си?
не знаю, может как-то так:

#include "arg_obj.h"

int main(arg_obj* arg) { ... }
источник

МБ

Михаил Бахтерев in Compiler Development
Ну, ок. А дальше? Что делать, если формат не тот? Как понять, что формат не тот? Можно ли выводить неполные объекты? Вопросов много...
источник

AK

Andrei Kurosh in Compiler Development
Михаил Бахтерев
Это понятно, что удобно. Но, всё же, важно, как с этим великолепием должны работать пользовательские программы. Вот сижу я, отлаживаюсь, и мне надо в консольку чё-то дампить. Писать полноценный генератор json для того, чтобы чиселки выводить? Или как?
Представьте, что вывод программы - это произвольный токен json. Это может быть объект, массив, или просто строка. Тот же nushell все это позволяет и вывести просто строку, если вы хотите, можно без проблем
источник

ИЧ

Илья Чистяков in Compiler Development
Sailor Moon
чего не хватает сегодняшней консоли что бы стать прекрастной?
лично мне не нравятся sed, awk и подобное, и ещё способ отключить всей цепочке пайпа буферизацию
источник

AK

Andrei Kurosh in Compiler Development
Михаил Бахтерев
Ну, ок. А дальше? Что делать, если формат не тот? Как понять, что формат не тот? Можно ли выводить неполные объекты? Вопросов много...
Анализировать объект и ругаться. Так же, как любое приложение парсит аргументы из строки. Просто здесь не последовательность char'ов, с которыми нужно ковыряться вручную, а уже распаршенные объекты
источник

МБ

Михаил Бахтерев in Compiler Development
Andrei Kurosh
Представьте, что вывод программы - это произвольный токен json. Это может быть объект, массив, или просто строка. Тот же nushell все это позволяет и вывести просто строку, если вы хотите, можно без проблем
Мне не хочется выводит json. Его сложно генерировать потоково. А для отладки нужна именно потоковая генерация. События всякие смотреть в разных местах, не открывая и не закрывая скобки. А объект - это такая, скобочная (деревянная) структура.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Это понятно, что удобно. Но, всё же, важно, как с этим великолепием должны работать пользовательские программы. Вот сижу я, отлаживаюсь, и мне надо в консольку чё-то дампить. Писать полноценный генератор json для того, чтобы чиселки выводить? Или как?
Вы так говорите, как будто сериализовать в строку чтобы скормить программе, работающей со строками — какой-то rocket science... 🤷‍♀️
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Вы так говорите, как будто сериализовать в строку чтобы скормить программе, работающей со строками — какой-то rocket science... 🤷‍♀️
Да серилизовать - не проблема. Вопрос о том, как я из программы на Си должен писать/читать. Парсить какие-то универсальные представления типа JSON - это так себе удовольствие.
источник