TOML
[Tom's Obvious Minimal Language]
Формат файлов конфигурации
для людей.
TOML стремится быть минималистичным форматом файлов конфигурации, который легко читаем ввиду очевидной семантики. TOML разработан, чтобы однозначно переводиться в хэш-таблицу. TOML должен легко парситься в структуры данных в широком ряде языков.
# Это документ на 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 языках программирования: