2008-09-15

再度跟 rails 撞名

跑這行:

if defined?(object)

好像永遠為 true... 吐出 local_variables 確實有 object.
害我一直以為是我寫錯。之前用 VC++ 也是跟他的 STL 撞名過。
大家都知道 VC++ 的 STL 是 Dinkumware 做的吧?
雖然他好像一直是最完整實作 C99, C++03, TR1, 等等 library 的廠商,
只是... 那次撞名給我的印象真的很差。

這表示你最好不要用 using std:: 什麼的,因為一用就等於把 name expose
在 global namespace 裡面。我看過有人說一個 common practice 是一律
使用 using std::, 因為這樣就有機會使用從 candidates 中選出更好的 function.

問題是 VC++ 所使用的名稱,我忘記是哪個了,不知道是 swap 還是 sort?
他的使用方式跟被衝突的名稱是毫無關係的。所以 compiler 就吐出奇怪的錯誤...
我真的查很久,直到 trace 到他的 header 細看才發現這件事。

*

原本覺得 gcc, sgi stl, 等等名稱都用得很爛,各種怪名字,每次都 __ 開頭,
一堆縮寫什麼的。直到那次才忽然驚覺,其實這樣做才是對的...
library 實作者,不應該把內部的名稱跟外部的名稱混在一起!

8 comments:

  1. ruby 強調函式名要直覺,所以撞名機率很大 @@

    ReplyDelete
  2. library 實作者要有所自覺,但 standard library 又是另一回事

    更何況,internal 和 public 又是不同的事

    只能說,越用越覺得 rails 還相當不適合流量極大的 production

    連 ruby 都不夠穩了,遑論 rails.

    有機會想試試 merb 看看會不會比較好

    ReplyDelete
  3. (亂入

    Ruby1.8.6對編碼等等的支援還真是一團混亂 Orz

    ReplyDelete
  4. 敢問碰上什麼問題了嗎?
    我自己固定使用 utf-8 好像沒特別遇上什麼麻煩

    ReplyDelete
  5. 我用Dir[*]抓出來的檔案名稱,想用Regexp去比對,不管怎樣都比對不到 Orz

    regexp後面接/u也試過了,先全部轉utf8也試過了,就是match不到Q_Q

    ReplyDelete
  6. 我剛剛試了一下手上的 ruby, 分別是 1.8.6-p144, 1.8.7-p72

    兩個用 regexp 去跑中文 utf-8 字串,倒是都正常 @_@

    "中文測試" =~ /文/
    => 3

    有沒有加 u 結果都是 3.
    測試 \w 的話:

    "中文測試" =~ /\w/
    => nil

    "中文測試" =~ /\w/u
    => 0

    *

    不知道是怎麼失敗的? @_@
    中文 windows 上檔名可能是 big5 或 utf-16 或 ucs-2,
    我猜 1.8 應該只吃 utf-8?

    不是很確定,因為 1.8 encoding 確實滿有問題的 @@

    ReplyDelete
  7. 我失敗的情況是隨便去日本網站複製一段日文下來,建立一堆各種語系混和的檔案

    然後Regexp裡面也是日文,這樣就match不到了 Orz

    不過我覺得這一路下來可能編碼出問題的地方太多了 囧 實在難以確定阿

    ReplyDelete
  8. ...@_@
    那試試 1.9 好了... XD
    1.9 對 encoding 真的下了不少功夫
    雖然到現在都還有不少 bug report...

    ReplyDelete

Note: Only a member of this blog may post a comment.