Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

YAML 真是一個很棒的語言

Posted on 2025 年 9 月 1 日2025 年 9 月 1 日 By 日落 在〈YAML 真是一個很棒的語言〉中尚無留言

反串注意!

接觸 YAML 大概是因為遇到 docker 和 kubuernetes 的關係,因為設定檔都必須使用 YAML,然後受到各種荼毒。

先來看一下 spec。

YAML 目前支援常見的幾種資料型態:

  • 整數:100、-100、不同進位的表示法 0xC
  • 浮點數:`1230.15`、12.3015e+02、負無限 -.inf、以及非數字 .nan
  • boolean:true、false
  • 字串:不加上引號的字串 John 、加上引號 "John" 或 'John'

先到這邊即可,其他容器類型的陣列、物件這邊先不討論。


這邊先來看一下可能會遇到的問題這個描述:

Name: Zeroplex
version: 3.2.9
stable: 3.2

這邊使用 Symfony\Component\Yaml 來 parse 上面的設定,結果為:

array(3) {
  'Name' =>
  string(8) "Zeroplex"
  'version' =>
  string(5) "3.2.9"
  'stable' =>
  double(3.2)
}

二個版本號,一個是字串,一個是數字。

為什麼會這樣?YAML 中並沒有規範怎麼樣的文字會應該是數字、什麼狀態是文字。也就是說如果字串沒有加上引號時,依照不同的 parser 實作方式,可能會有不同的結果。

這就是規範不明確導致的 undefine behaviour,最慘的是不同的 parser 實作方式不同,因此相同的設定檔使用不同的 parser 可能會被轉譯成不同的內容,而且無法誤測。

上述指示其中一個小問題,如果你想知道其他的問題,可以參考 The yaml document hell 這篇文章,設計不良讓大家都下地獄。


除了 YAML 以外,其實還有不少設計很好的語言,可以用來協助標示設定、狀態:

  • JSON:以電腦讀取為主,不適合人類閱讀
  • XML:同上
  • TOML:語法簡單適合人類閱讀,電腦也不需要費力 parse

只因為 YAML 定義不明確,浪費幾個工作天除錯,真是浪費生命。

Tags:資訊學習

文章導覽

Previous Post: PHP 的小故事

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.