v1.0.0

TOML

[Tom's Obvious Minimal Language]

Формат файлов конфигурации
для людей.

# Это документ на TOML

title = "Пример TOML"

[owner]
name = "Tom Preston-Werner"
dob = 1979-05-27T07:32:00-08:00

[database]
enabled = true
ports = [ 8000, 8001, 8002 ]
data = [ ["дельта", "фи"], [3.14] ]
temp_targets = { cpu = 79.5, case = 72.0 }

[servers]

[servers.alpha]
ip = "10.0.0.1"
role = "фронтенд"

[servers.beta]
ip = "10.0.0.2"
role = "бэкенд"
TOML приоритизирует людей

TOML стремится быть минималистичным форматом файлов конфигурации, который:

  • легко читаем ввиду очевидной семантики
  • однозначно переводится в хэш-таблицу
  • легко парсить в структуры данных в широком ряде языков
В TOML присутствуют полезные, родные типы
  • Пары Ключ/Значение
  • Массивы
  • Таблицы
  • Встроенные таблицы
  • Массивы таблиц
  • Целые Числа & Числа с Плавающей Запятой
  • Булевы переменные
  • Даты & Времена, со смещениями по желанию
TOML широко поддерживается

У TOML уже существуют имплементации в большинстве самых популярных языков программирования для использования на сегодняшний день: C, C#, C++, Clojure, Dart, Elixir, Erlang, Go, Haskell, Java, JavaScript, Lua, Objective-C, Perl, PHP, Python, Ruby, Rust, Scala, Swift, … и во многих других.

Краткий Обзор TOML

Комментарии

TOML считает, что все файлы конфигурации должны поддерживать коммментарии.

# Это комментарий в TOML

# Это - многострочный
# комментарий в TOML

Мощные Строки

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

str1 = "Я строка."
str2 = "Вы можете \"цитировать\" меня."
str3 = "Имя\tВячасла\u045E\nГород\tМинск."

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

str1 = """
Розы красные
Фиалки синие"""

str2 = """\
  Съешь ещё этих \
  мягких французских \
  булок, да выпей чаю. \
  """

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

Буквальные строки обрамляются одиночными кавычками. Экранирование не производится, так что вы получаете то, что видите:

path = 'C:\Users\nodejs\templates'
path2 = '\\User\admin$\system32'
quoted = 'Tom "Dubs" Preston-Werner'
regex = '<\i\c*\s*>'

Так как экранирование не производится, то внутри буквальной строки, обрамлённой одиночными кавычками, нельзя вписать одиночную кавычку. Вот здесь и пригождаются многострочные буквальные строки:

re = '''Это \d{1} яблоко [м]не понадобится.'''
lines = '''
Первый перенос обрезан
в буквальных строках.
Остальная пустота
остаётся.
'''

Числа

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

# целые числа
int1 = +99
int2 = 42
int3 = 0
int4 = -17

# шестнадцатеричные с префиксом `0x`
hex1 = 0xDEADBEEF
hex2 = 0xdeadbeef
hex3 = 0xdead_beef

# восьмеричные с префиксом `0o`
oct1 = 0o01234567
oct2 = 0o755

# двоичные с префиксом `0b`
bin1 = 0b11010110

# десятичные дроби
float1 = +1.0
float2 = 3.1415
float3 = -0.01

# экспоненциальная запись
float4 = 5e+22
float5 = 1e06
float6 = -2E-2

# оба
float7 = 6.626e-34

# разделители
float8 = 224_617.445_991_228

# бесконечность
infinite1 = inf # положительная бесконечность
infinite2 = +inf # положительная бесконечность
infinite3 = -inf # отрицательная бесконечность

# не число (not a number)
not1 = nan
not2 = +nan
not3 = -nan 

Даты и Времена

TOML поддерживает даты, времена, и дату и время вместе, с и без сдвигов.

# сдвинутые дата и время
odt1 = 1979-05-27T07:32:00Z
odt2 = 1979-05-27T00:32:00-07:00
odt3 = 1979-05-27T00:32:00.999999-07:00

# местные дата и время
ldt1 = 1979-05-27T07:32:00
ldt2 = 1979-05-27T00:32:00.999999

# местная дата
ld1 = 1979-05-27

# местное время
lt1 = 07:32:00
lt2 = 00:32:00.999999

Больше Спецификации

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

Начать программировать

TOML уже имплементирован в более чем 40 языках программирования: