Что: 1d492807e6d48a3c5fd29d37970dfdf33e91cbad Когда: 2019-11-12 16:05:32+03:00 ------------------------------------------------------------------------ Темы: nncp ------------------------------------------------------------------------ NNCP переехал на Hjson формат конфигов https://hjson.org/ С самого начала меня YAML напрягал своей сложностью. Соответственно, и сложностью библиотек для работы с ним. Но и читать YAML и понимать дело не простое может быть. Изначально для конфигов какой формат можно использовать из библиотек в Go штатно представляемых? JSON, XML. XML сразу нет, без объяснений. JSON в GoVPN был изначально, да и на работе в паре проектов он так и остался, но очень напрягает в нём отсутствие комментариев и возможность оставлять trailing comma. YAML имеет одну мощную штуку в виде ссылок, где можно меньше делать copy-paste. Теоретически в GoVPN или NNCP это могло бы пригождаться. Но я уверен что все инсталляции достаточно малы чтобы чуть-чуть возможного copy-paste не было бы страшным. Посмотрел на TOML: в целом подходит, относительно прост, но его, как ни крути, но может быть очень сложно интерпретировать человеку: [[foo.bar]] baz = 123 [[foo.bar]] abc = 123 на самом деле будет вот такой структурой: { "foo": { "bar": [ {"baz": 123 }, {"abc": 123 } ] } } плюс само по себе задание словаря в TOML может быть разнесено по файлу. TOML в целом мне нравится: он реально хорошо подходит для конфигурации, относительно прост (существенно проще YAML), имеет достаточно возможностей (в отличии от INI, которого формально то и нет, плюс типов данных мало). Но NNCP-шная конфигурация в нём выглядит по-уродски. И тут я вспомнил про Yggdrasil и dnscrypt проекты, где было что-то типа JSON, но с комментариями и меньшим синтаксическим "мусором" для конфига. Hjson прям то, что надо. Даже diff относительно YAML получается маленьким и всякие "foo: bar\nbar: 123" остаются без изменений. github.com/hjson/hjson-go библиотека достаточно компакта чтобы я её посчитал минималистичной. Более того, она штатно предлагает распаковывать Hjson в структуры через пересериализацию в JSON -- накладно, безусловно, но для конфигов это совершенно несущественно (а ведь Hjson для них только будет использован), зато красиво решена проблема с unmarshal с reflect-ом в структуры. A data format for Humans should be lean and simple. Human !== Developer Human != Developer Human <> Developer Human .NE. Developer Human ne Developer Human /= Developer Human '= Developer Human ~= Developer Human -ne Developer ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20NNCP%20%D0%BF%D0%B5%D1%80%D0%B5%D0%B5%D1%85%D0%B0%D0%BB%20%D0%BD%D0%B0%20Hjson%20%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%20%D0%BA%D0%BE%D0%BD%D1%84%D0%B8%D0%B3%D0%BE%D0%B2%20%281d492807e6d48a3c5fd29d37970dfdf33e91cbad%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0