What have you found for these years?

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 retries:

Plumm said...

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

godfat 真常 said...

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

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

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

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

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

波卡 said...

(亂入

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

godfat 真常 said...

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

波卡 said...

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

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

godfat 真常 said...

我剛剛試了一下手上的 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 確實滿有問題的 @@

波卡 said...

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

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

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

godfat 真常 said...

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

Post a Comment

All texts are licensed under CC Attribution 3.0