聊一聊TOML

最近配置 Gitlab Runner,發現他的配置文件是.toml後綴。對toml類型一番了解之後,發現這是個非常值得使用的配置文件語言。

TOML的由來

TOML是Toms Obvious, Minimal Language.的首字母縮寫,是Tom的淺顯的、極簡的語言。

那麼問題來了,Tom是誰?搜索之後得到答案,TomTom Preston-Werner,全球最大的同性交友網站Github聯合創始人。

還有小道消息,GitHub 新項目轉用CoffeeScript 之後,CoffeeScript 比 JavaScript 要簡潔優雅得多。同樣地,GitHub 也覺得 YAML 不夠簡潔優雅,因此搗鼓出了一個 TOML。

TOML的目標

成為一個極簡的配置文件格式。

關鍵詞:極簡、配置文件

TOML的語法足夠簡單,同時保證一個標準的TOML文件的所有配置項目都能被無歧義的轉換成一個哈希表。TOML可以被各種語言解析使用。

TOML目前的版本還是0.4.0,官網還是提示在1.0以前,語言表現可能還是不穩定。這個只是個免責條款,在很多生產系統裡面,TOML配置文件已經大規模使用了,比如友商GitLab

簡單樣例

# This is a TOML document.nntitle = "TOML Example"nn[owner]nname = "Tom Preston-Werner"ndob = 1979-05-27T07:32:00-08:00 # First class datesnn[database]nserver = "192.168.1.1"nports = [ 8001, 8001, 8002 ]nconnection_max = 5000nenabled = truenn[servers]nn # Indentation (tabs and/or spaces) is allowed but not requiredn [servers.alpha]n ip = "10.0.0.1"n dc = "eqdc10"nn [servers.beta]n ip = "10.0.0.2"n dc = "eqdc10"nn[clients]ndata = [ ["gamma", "delta"], [1, 2] ]nn# Line breaks are OK when inside arraysnhosts = [n "alpha",n "omega"n]n

上面的樣例就展示了很多TOML的特點。

  • 主要通過鍵值對表達
  • 使用 # 作為注釋
  • 支持數字、字元串、布爾量、日期等數據類型
  • 有塊、列表等數據結構

還有一些特性,也列出來

  • TOML是大小寫敏感的
  • TOML文件必須是UTF8編碼的
  • 空白符可以是製表符(0x09)或空格(0x20)
  • 換行符可以是 LF (0x0A) 或 CRLF (0x0D0A)
  • 可以使用空字元串作為key 強烈不推薦這麼用

看完樣例,對TOML就能有基本的認識,參照文檔就能快速寫出合適的配置文件。

很棒的點

Offset Date-Time

TOML支持RFC 3339格式的時間,可以精準的描述一個地區時間。

多行字元串

str1 = """nRoses are rednViolets are blue"""nn# On a Unix system, the above multi-line string will most likely be the same as:nstr2 = "Roses are rednViolets are blue"nn# On a Windows system, it will most likely be equivalent to:nstr3 = "Roses are redrnViolets are blue"n

直接換行編寫配置文件,在各個系統都能準確表達。

_分割z數字

數字,可以加入_作為標記,不影響數值。每三位加一個,快速區分量級。玩EVE再也不用擔心多付ISK了。

num1 = 1_000 # 一千nnum2 = 2_000_000 # 兩百萬nnum3 = 3_000_000_000 # 三十億n

.表示層級

塊可以用.表示層級。

參考資料

  • Github TOML
  • TOML: GitHub 這是要革 YAML 的命呀!

TOML Github 的目錄

  • Example
  • Spec
  • Comment
  • Key/Value Pair
  • String
  • Integer
  • Float
  • Boolean
  • Offset Date-Time
  • Local Date-Time
  • Local Date
  • Local Time
  • Array
  • Table
  • Inline Table
  • Array of Tables
  • Filename Extension
  • Comparison with Other Formats
  • Get Involved
  • Projects using TOML
  • Implementations
  • Validators
  • Language agnostic test suite for TOML decoders and encoders
  • Editor support
  • Encoder
  • Converters

原文鏈接 作者 @柳純

本文版權屬於再惠研發團隊,歡迎轉載,轉載請保留出處。

推薦閱讀:

如果軟體要實現以下功能 要用什麼編程語言編寫比較合適?
D語言的前景如何?在中國的發展情況如何?
自學R語言 ,有什麼注意的細節或好的習慣?

TAG:编程语言 | 互联网 | 配置文件 |