caasih.net

RFC 6902

在自己的 RFC 6902 diff 做得差不多時,才發現 @chbrown 早就做了 diff 和 patch 。他沒做 move ,但無傷大雅。正如他所說, RFC 6902 diff 不是決定性的。

我的實作更慘,對這些例子,生不出 RFC 範例中給的 patch :

  • A.2. Adding an Array Element
  • A.4. Removing an Array Element
  • A.7. Moving an Array Element
  • A.16. Adding an Array Value

肇因於將 Array 跟 Object 都視為 hash 好簡化演算法。如果這樣做,我只需將要比較的兩個集合中所有 key 找出來,再分別取值看有沒有那一方為 undefined 就好。要是使用簡單版的 diff ,甚至只會生出 add, remove, replace 。

為了吐出 move ,我得看過所有的 add ,找出有沒有值相同的 remove 。什麼? remove 沒有留值?只好先存起來,用完再砍掉。 copy 更慘,得看過所有的值,和所有 add 比較,看有沒有一樣的。只好把值都攤平,看完再砍掉。

寫得很開心,但是為了什麼?還是說其實規格默許我按自己方便生出可用的 patch 就好?一如老瀏覽器對壞掉的 HTML 很寬容。

Isaac Huang 發佈於