http://blog.163.com/xiaochunxu@126/blog/static/854233362008725114653448/
dereference的一種新譯法:用引
今天閱讀RFC3986(URI: Generic Syntax)時,遇到了dereference一詞。
dereference一個URI的意思是:
To use that access mechanism to perform an action on the URI's resource is to "dereference" the URI.
dereference也可做名詞,如 dereference of the URI ,意思就是對URI進行derefernce的操作。
dereference簡單來說,就是根據reference取得資源。
這個詞,在C/C++中較常見,*pointer操作,就叫做dereference,即取回指標所指的值。
wikipedia的詞條上是這樣寫的:Accessing the value referred to by a reference is called dereferencing it.
本身dereference在英文中可能並不難理解。reference的過程可以記做:
reference of B => A
而dereference的過程可以記做:
dereference of A => B
正好是個相反的過程。
但是要找一個容易理解的漢語詞來對應dereference看來比較困難。
常見的譯名有:
解引用 1200
解除引用 435
反引用 234
逆向引用 8
間接引用 1170
複引用 23
遞引用 1
reference也有譯作“參考”、“參照”的:
解參考 276
解除參照 243
解參照 107
逆參照 82
另有侯捷所採用的譯法:提領(881)。
上面所附的數字是google.cn上搜尋結果數量(譯名加上引號,並加上dereference單詞一併搜尋)。
一些搜尋結果數量很少的譯名沒有列於此,“逆向引用”是因為某本C++書是這樣譯的,所以雖然google結果甚少,仍忝列於此;“複引用”和“遞引用”因為頗有意思,也列於此;使用“逆參照”的則都是日文網頁。
這些譯法中,逆向引用、反引用等在中文表意上不甚恰當(儘管dereference確實與reference相反),使用也較少。解除引用的譯法 則是錯誤的。複引用和遞引用雖然意思可以說通,但“複”和“遞”兩字不是在其本義上使用的,因此也容易誤解。比如遞引用或可解為傳遞引用。
剩下的,就是目前使用最多的“解引用”、“間接引用”和“提領”。
其中“間接引用”並非是dereference的譯名,而是因為C/C++的*pointer操作的標準名字是indirection operator。在C/C++的語境中,*即可以叫做indirection operator也可叫做dereference operator(與*類似,&既可叫做address-of operator,也可叫做reference operator)。所以間接引用當然不能作為dereference的一般譯名。
侯捷所採用的“提領”有點怪異,總讓人想到提綱挈領,不知做何解。所以流傳雖廣,但接受不多。
這樣,在排除法之後,似乎只有“解引用”了。這個譯法應該說還是較貼切的。“解”字的一個常用義項就是“解決、確定”。所以可以理解為“將引用解回所指之物(資源、值)”。在RFC3986中,有這樣一段話:
URI "resolution" is the process of determining an access mechanism and the appropriate parameters necessary to dereference a URI; this resolution may require several iterations. To use that access mechanism to perform an action on the URI's resource is to "dereference"
the URI.
其中的resolution正好對應於“解”字。
不過,精確說來,resolution並非dereference的核心意思。resolution是確定acesss mechanism的過程,而dereference是使用access mechanism(對資源執行某種操作)的過程。它們是相關但是獨立的兩個步驟。C/C++中的dereference就沒有resolution的步 驟。
由此點來說,“解引用”這個譯法,還是存在小小瑕疵,因為它只突出了“解”,但是關鍵在“用(access)”上。
dereference的核心含義,還是根據reference來access(resource或者value),通常可以認為就是根據引用來存取資源或存取值。
根據這個意義,我曾想到或許可以譯作“取用”。
“取用”這個譯法的好處是,非常容易理解,在多數場合也是可以說得通的。
但是“取用”譯法也存在很大的問題:
1. “取用”是一個過於日常化的詞彙,不宜用來翻譯有特定涵義的技術術語。而且取用A,並非是取A來用,而是取A之所指來用,這樣就與原意有了微妙的差別。當然,“引用”也是一個日常詞彙,不過這並不能推匯出“取用”也可以適合。
2. “取用”在某些場合存在問題,因為access可以是取也可以是存。比如C/C++中的dereference操作,也是可以用來賦值的。URI的dereference也是如此,對於所執行的操作並沒有限定。
所以我否定了“取用”。
既然否定了,為什麼又提呢?這是因為,對於第2點問題的考察,給了我啟示,雖然在C/C++中access就是存取,但是URI的access更為廣泛——其實access只是一個廣義的“訪問”,而不限於存取兩種動作。
這樣,根據reference來access,就不是理解成“根據引用來存取資源或存取值”了,而是“根據引用來對所引用之物做某些事情”。簡單 的說,我們就是在“運用引用”——當然這個有點過於簡化,因為如果不涉及引用所指之物(比如符號運算),是不需要dereference的。
如果更精鍊一點,我們是不是可以直接把這一操作稱作“用引”呢?“用引”一詞甚至沒有上面這個過於簡化的問題。因為單單一個“引”字,意涵更廣。 “用引”從文言解,可以包含雙重意思,第一層意思是:利用引用,第二層意思是:使用所引之物。兩層意思疊加正好是:通過引用來使用所引之物,恰與 dereference的含義完美吻合。
“用引”一詞還有一個顯而易見的優點,就是與“引用”互為迴文,恰與reference和dereference的對照異曲同工。
當然,凡事都有正反兩面。“用引”譯法,帶一點文言感,常為某些人一概拒斥。
平心而論,“用引”在做名詞的時候,相對容易接受,我們說“對於指標的用引操作”或者“一個URI的用引過程”,還是相當自然的。但是在做動詞的 時候,就存在問題。說“用引一個URI”,會覺得拗口,因為這不符合中文的習慣。這個問題可以通過對句子稍作變通來解決,比如說成“對於一個URI進行用 引”,即進行名詞化(類似於變成了dereferencing)。此外,如果“用引”將來流行開來,逐漸成為一個專有名詞的時候,再說“用引一個URI” 也就不覺尷尬了。
以上。
通常來說,在翻譯的時候我首先傾向於採用既有之譯法。不過dereference一詞本來使用就較少,最常用的幾種譯法,也因此還沒有流傳開來 (比如google上搜尋結果就還相當少),也都尚未通過約定俗成而自然獲得術語之全部內涵。因此我認為目前仍有機會考慮一些更好的譯法,故而在此提出 “用引”一譯,拋磚引玉,以求方家。
評語:根據使用的文字環境,可以直接翻譯成“使用”,“反向引用”,