Слово автору @swagshasha
---
Всем привет!
Все слышали, наверное, про знаменитый проект json2dir.
Да-да, тот самый, который берёт JSON и превращает его в структуру директорий и файлов.
Звучит как технология, которую никто не просил, но она существует.
Идея простая: описал дерево файлов в JSON — получил его на диске.
Странно, просто и неожиданно удобно.
Но есть один маааленький недостаток: никакого RFC и всего одна реализация — на Rust.
Мы решили, что так дело не пойдёт.
Так появился Awesome json2dir — со спецификацией, conformance tests и реализациями на всём, до чего удалось дотянуться.
Начинали мы с Zig, Go, C#, Java и Haskell.
Потом подтянулась старая школа: C, C++, Ada, Kotlin, Scala, Nim, Odin, Fortran, Pascal, COBOL и PL/I.
Функциональные: Erlang, Elixir, Gleam, OCaml, PureScript, Clojure и Common Lisp.
Скриптовые: Python, Ruby, Perl, JavaScript, Lua, Julia и MATLAB/Octave.
Просто писать json2dir стало скучно, поэтому появились версии на Rocq/Coq, Lean 4 и TLA+ — потому что мало создать директорию, надо ещё математически доказать, что ты создал её правильно.
Байткоды и ассемблеры: json2dir на x86-64 assembler в MASM-синтаксисе (работает без libc), вручную написанном CIL, WebAssembly и даже прямо на LLVM IR.
Шеллы: Bash, zsh, PowerShell и Nushell. Заодно json2dir на AWK и json2dir на sed.
DSL и инструменты как json2dir: Nix, Puppet, Ansible, CMake, MSBuild, jq, XSLT, SQL и Typst.
И даже nginx: реализация на nginx njs строит дерево файлов через запросы к собственному WebDAV endpoint'у. То есть да, веб-сервер тоже умеет быть json2dir.
Дальше начинается сумеречная территория: INTERCAL, Befunge-98, Brainfuck, Ook!, Whitespace, Chef, ArnoldC, Rockstar, Shakespeare, Hexagony, Unlambda, Fractran, Aheui, Subleq, Pikachu, Taxi и Malbolge.
json2dir на Velato, где программа — это MIDI.
json2dir на Piet, Brainloller и Braincopter, где программа — это картинка (приложены к посту).
json2dir на SystemVerilog и VHDL.
И, наконец, самописные json2dir на bimbo-lang и ludka-trade, компилирующиеся в LLVM IR.
Мы всё это для вас собрали, прогнали через тесты и выложили:
результаты всех реализаций
Попутно даже нашли баг в апстриме самого json2dir: если имя заканчивается на
/, он следует по симлинку и записывает данные в его цель.В общем, пользуйтесь json2dir на здоровье — в любом стеке и практически на любом языке программирования.
Если вдруг обнаружите стек или язык, на котором json2dir у нас ещё не запускается, — заводите тикет. Мы с радостью попробуем это исправить. Ну или написать ещё одну реализацию.
И не стесняйтесь делать свои реализации, даже если ваш язык уже есть в списке. Ещё один json2dir никогда не бывает лишним.
---
Вроде бы просто проект для развлечения, но подход серьёзный. Посмотрите на отчёт, который показывает как хорошо каждая реализация проходит набор тестов, прелесть же
