LINUX.ORG.RU

Tree как универсальный формат общения программ и людей

 , , , ,


0

2

Есть прикольный формат данных, который может использоваться для простого создания DSL-ей под различные нужды: от конфигов и межсерверной коммуникации, до программирования и логирования.

Он в 2 раза компактнее XML, в 20 раз проще YAML, в 2 раза быстрее JSON.

Он является бинарным, но человекопонятным, но не требует экранирования, но парсится как машиной так и человеком предельно однозначно.

Нативная модель данных у него похожа на XML, но без всех его сложностей и куда более гибкая. Он вообще сам себе AST.

Несколько интересных идей, как он может использоваться, в чём он особо хорош:

  • удобные расширяемые конфиги
  • структурированное логирование
  • коммуникация любых консольных утилит без парсинга текста регулярками

Подробно о нём тут: https://page.hyoo.ru/#!=8i7ao7_xfyxah

А вкратце тут: https://github.com/nin-jin/tree.d

Тут пример использования спец DSL для добавления подсветки синтаксиса для своего DSL за 3 минуты: https://www.youtube.com/watch?v=33k5ryVu0Uc

А тут пример пайплайна его обработки на js: https://page.hyoo.ru/#!=b6c11q_ocy5oh

Ну а здесь онлайн песочница с разными трансформациями: https://tree.hyoo.ru/

Что думаете об этом всём? Пока что есть реализациии лишь на D и TS, почти нет тулинга. Не хотели бы присоединиться к развитию?



Последнее исправление: nin-jin (всего исправлений: 2)

Ты на хабре всех достал уже своими поделками, теперь сюда их притащил? tree не нужен, $mol - говно.

slovazap ★★★★★
()

С двоеточиями и дефисами вместо \ красивее.

firkax ★★★★★
()
Ответ на: комментарий от einhander

Например, это может быть такой DSL:

precision 14
zlib output_compression +
zend
	enable_gc +
	exception_ignore_args -
memory_limit 128 M
error_reporting
	+ ALL
	- DEPRECATED
	- STRICT
default_mimetype \text/html
mail
	smtp
		host \localhost
		port 25
	add_x_header -
session gc
	probability 1
	divisor 1000
nin-jin
() автор топика

Весна.

Любой формат должен иметь какое-то целеполагание. Если цель - human readable, то данная поделка вообще мимо. Любая другая цель не предполагает участие человека, а , значит, нет необходимости использовать что-то, кроме binary.

Anoxemian ★★★★★
()
Последнее исправление: Anoxemian (всего исправлений: 1)
Ответ на: комментарий от Anoxemian

Совсем не мимо. Он прекрасно понимается человеком. При любой другой цели участие человека всё равно происходит при отладке. Ну и опять же, это бинарный формат. Вас никто не заставляет использовать человекочитаемые имена узлов.

nin-jin
() автор топика

Он является бинарным, но человекопонятным

Чувствую запах свежего налюбилова

erfea ★★★★★
()
Ответ на: комментарий от erfea

запах свежего налюбилова

Читаемый текст с нечитаемыми символами (раз бинарный). Неукоснительное соблюдение, все как мы любим.

Nervous ★★★★★
()

Голосом старушки:

чово накинулися на молодого человека? Он делом занимаетсяа не так как вы, всё время курите, ироды

DumLemming ★★★
()
Ответ на: комментарий от untitl3d

Может, оно движется в топку в 3 раза быстрее жсона.

Nervous ★★★★★
()
Ответ на: комментарий от nin-jin

В сортах квадратиков и вопросиков не разбираюсь, к сожалению. А может, к счастью.

Nervous ★★★★★
()
Ответ на: комментарий от nin-jin

Буквально зашел на Github, посмотрел пример JSON vs JSON.tree, JSON выглядит понятнее, без слэшей и прочего. Что я вижу не так, товарищ автор?

HerbertHoover
()
Ответ на: комментарий от Nervous

Да, он с отступами компактней, чем JSON без отступов.

nin-jin
() автор топика

Ну и вообще, как вы яхту назовете, так она и. Какое-то скучное название, ящетаю. С таким названием ты слона не продашь.

Предлагаю назвать Python Readable Object Notation, сокращенно PRON.

Nervous ★★★★★
()

Что думаете об этом всём?

Наркомания какая-то.

shell-script ★★★★★
()

Интересно. Для себя выдумывал что-то похожее, но без разделения на struct/data и обязательного требования объявлять каждый node на отдельной строке.

X512 ★★★★★
()
Ответ на: комментарий от X512

Разделение необходимо, чтобы в данных не интерпретировалась структура и можно было обойтись без экранирования. Ноды на отдельных строках обязательны лишь, когда их больше 1 на одном уровне. Если нода одна - можно оставить на той же строке, не увеличивая уровень отступов.

nin-jin
() автор топика
Ответ на: комментарий от nin-jin

Вообще довольно круто. Может быть возьму себе для описания правил сборки пакетов. К YAML у меня претензии в его сложности и лёгкости выстрелить себе в ногу из-за автоматической конвертации типов.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от X512

Если убрать из yaml-а всю чушь то останется примерно то же самое что у автора, только спецсимволы другие и, как итог, выглядит (для человека) приятнее.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Очень слабая документация в корне репозитория. Ты жонглируешь какими-то терминами, одному тебе понятными. Как результат, я например нифига не понял твой формат. Ты бравируешь тем, что экранирование не нужно, но в то же время твои примеры переполнены \мразотным \хуесосным \синтаксисом, а часть символов и вовсе запрещены к использованию (где именно запрещены — хер поймёшь, потому что в документации табличка, где ты наставил себе пятёрок ЛОЛ!!!, вместо документации).

Не, может тема крутая, я не хочу обсирать твою идею, но подача — отстой. С такой подачей в опенсорсе далеко не уедешь.

filosofia
()
Ответ на: комментарий от filosofia

Дмитрий Карловский в мире разработки - это как @saahriktu, @den73 или @mertvoprog - человек не от мира сего, идущий против комьюнити, отчаяно ищущий единомышленников, но всюду гонимый и никем непонятый.

javascript
()
Ответ на: комментарий от javascript

Но ведь нонконформист не должен искать единомышленников, иначе он станет конформистом внутри своей секты и перестанет быть нонконформистом…

ЗЫ желаю автору всяческих успехов!

filosofia
()
Ответ на: комментарий от filosofia

Так он не выбирал быть нон. Как и все люди из моего списка. Он хочет быть кон. Не выходит, уже очень много-много лет.

javascript
()
Ответ на: комментарий от erfea

Я бы сказал, что хорошо настоенного метапрога.

hobbit ★★★★★
()
Ответ на: комментарий от javascript

«Хочет быть кон» из твоего списка только @den73. Остальных двоих вполне устраивает роль альтернативщиков.

hobbit ★★★★★
()

Indents must use tabs

Закапывайте. Еще одно говно, которое зависит от невидимого форматирования, а при повреждении проще все переписать.

Im_not_a_robot ★★★★★
()
Последнее исправление: Im_not_a_robot (всего исправлений: 1)

Он является бинарным, но человекопонятным, но не требует экранирования, но парсится как машиной так и человеком предельно однозначно.

3 «НО» в одном предложении? Два из них точно лишние, угадаешь какие?

julixs ★★★
()
Последнее исправление: julixs (всего исправлений: 1)

Свойства, да и сами объекты не всегда являются строками.
Как в tree поместить бинарные данные?

Формат интересный, но пока не понял для каких задач его удобно использовать.

----------------------------------
XML, JSON, ... да и этот формат предопределяют то, что лишь разработчик понимает предназначение каждого тега.
Это порождает лавинообразную разработку велосипедов.

Проще говоря - «В голове у меня бигуди, а на большее ты не надейся».

Формат скорее всего имеет нишу использования ту же, что и protobufer, ...

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 1)
Ответ на: комментарий от nin-jin

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

а в сериализованном виде это даже длинней в байтах, чем классика с началом и концом блока, как в жысоне.

то есть идея с отступами порочна изначально.

alysnix ★★★
()

в 2 раза быстрее JSON

По каким параметрам? С какой парсилкой джейсона сравнивали?

И да, если уж сравнили в репозитории INI, то стоит попробовать и TOML

dikey0ficial
()
Ответ на: комментарий от nin-jin

В читаемости сильно потеряло, нет комментариев и дефолтных значений, формат необходимо сперва изучить, а потом пользоваться, в отличие от того же php.ini, где нужно изучить сами опции, а не формат конфига.

einhander ★★★★★
()

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

https://neerc.ifmo.ru/wiki/index.php?title=%D0%90%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%BD%D1%8B%D0%B5_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D0%B8%D1%80%D1%83%D1%8E%D1%89%D0%B8%D0%B5_%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B8

alysnix ★★★
()

а еще замечание.

автор, вы изобретаете не «формат данных», а «формальную грамматику». потому, прежде всего вам нужно почитать все по этому вопросу, и вы видимо откроете для себя много интересного.

гуглите - «формальные грамматики» или «formal grammar».

атрибутные грамматики(подмножество формальных) я уже выше привел.

alysnix ★★★
()

Что думаете об этом всём?

О будущем линукса (комментарий)

Походил по вашим ссылкам

Ни один формат не способен поддержать всё многообразие типов предметных областей, поэтому неизбежно возникает необходимость упаковки данных в некоторый формат и последующей обратной распаковки.

XML хватит всем. Тут надо в тексте пример привести какой тип, XML не потянет. Я с таким в работе не сталкивался, по-моему XML и JSON хватает для всего.

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

В JSON такое тоже есть, объекты можно вкладывать друг в друга бесконечно.

mydibyje ★★★★
()
Последнее исправление: mydibyje (всего исправлений: 1)
Ответ на: комментарий от mydibyje

XML хватит всем.

В XML проблемы с вставкой многострочного текста, который может содержать < >. Проблемы с неоднозначностью использовать аттрибут или текстовое значение. <object value="123"/> vs <object><value>123</value></object>.

X512 ★★★★★
()
Ответ на: комментарий от Forum0888

Как в tree поместить бинарные данные?

Я так понимаю что бинарные данные можно класть напрямую между \ и переносом строки. байт переноса строки в бинарных данных экранировать (\n -> \n (\t)^n \). Правда текстовые редакторы такое нормально понимать не будут.

X512 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.