EnglishРусский Map

Dhall

Toolbox toolboxconfigurationlanguagetypesfunctionalHaskell (reference impl)with bindings in many languagesBSD-3-Clause ↳ show in map Markdown
title
Dhall
type
toolbox
summary
Типизированный тотальный язык конфигурации с функциями, импортами и семантическими хешами; генерирует YAML/JSON
tags
configuration, language, types, functional
language
Haskell (reference impl), with bindings in many languages
license
BSD-3-Clause
created
2026-05-21
updated
2026-05-21
lang
ru
translation_of
dhall
source_updated
2026-05-21
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

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

Что он даёт

  • DRY-конфигурация - задаётся единый источник правды, на который ссылаются разные цели развёртывания. Один и тот же файл Dhall конвертируется в YAML или JSON для любого инструмента ниже по цепочке.
  • Рефакторинг с семантическими хешами - семантический хеш выражения в Dhall инвариантен к рефакторингу, сохраняющему поведение, что гарантирует: переименование или реорганизация структуры не изменили фактическое содержимое конфигурации. Скринкаст на главной странице показывает, что хеш остаётся прежним после нескольких синтаксических переписываний.
  • Семантический diff - проверка того, что внесённое изменение затрагивает только то, что планировалось изменить.
  • Интеграция с редакторами - навигация с учётом типов, автодополнение, кликабельные импорты, всплывающие подсказки для выведенных типов. Поддержка VSCode показана в демо.

Модель безопасности

Dhall прямо заявляет о поддержке выполнения ненадёжного кода:

Язык нацелен на безопасный импорт и вычисление ненадёжного кода на Dhall, даже если он написан злоумышленником. Невозможность сделать это мы считаем ошибкой в спецификации.

Сочетание тотального вычисления (гарантированное завершение), отсутствия побочных эффектов и ограниченного разрешения импортов делает это возможным: враждебный ввод может не пройти проверку типов или не импортироваться, но по самому дизайну языка не способен повысить привилегии или нанести вред.

С чем конкурирует

  • YAML/JSON с языками шаблонизации (Jsonnet, Helm templates, CUE, ksonnet). Система типов Dhall отлавливает ошибки, которые Jsonnet пропускает.
  • Язык Nix для сценариев вне NixOS - схожие принципы ленивости и чистоты, но другая эргономика.
  • Классы конфигурации на TypeScript/Pydantic - Dhall не привязан к конкретной платформе или языку, поэтому одна и та же конфигурация подходит для инструментов на Go, Rust, Haskell и Python.

Обратная сторона - порог входа. Система типов Dhall сложна, а механизм импортов и хешей требует отдельного понимания ментальной модели.

Где находится

Перекликается с whitelist-capability-config - аргументацией Refaktor в пользу встраиваемого скриптинга с запретом по умолчанию через Rye, - однако Dhall выбирает противоположный подход: полноценный функциональный язык со строгими гарантиями тотальности, а не минимальный с deny-by-default. Оба решения отвечают на одно и то же противоречие между выразительностью конфигурации и безопасностью. Dhall говорит: "сделай язык слишком ограниченным, чтобы совершить что-то опасное". Rye говорит: "начни с нуля и регистрируй возможности для каждого слова отдельно".

Сайт: dhall-lang.org