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)

Ответ на: комментарий от 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
() автор топика

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

filosofia
()

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

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

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

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

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

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

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

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

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

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

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

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

alysnix ★★★
()
Ответ на: комментарий от 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 ★★★★★
()