打印

何为引用何为接引用

[复制链接]
2885|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FVJFIFE|  楼主 | 2011-9-24 00:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
FVJFIFE|  楼主 | 2011-9-24 00:44 | 只看该作者
今天阅读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上搜索结果就还相当少),也都尚未通过约定俗成而自然获得术语之全部内涵。因此我认为目前仍有机会考虑一些更好的译法,故而在此提出“用引”一译,抛砖引玉,以求方家。

使用特权

评论回复
板凳
FVJFIFE|  楼主 | 2011-9-24 00:45 | 只看该作者
c语言中“解引用”为什么理解这么困难
对于c语言中指针的操作符有两个:&和*。对于&,好理解,翻译的也不错,就是“取地址”的意思。但对于*,翻译为“解引用”,字面意思不好理解,即使看了后面内容才知道不过是“取指针指向的地址的内容”,也仍然是觉得怪怪的,“解引用”这个词难记也难于从字面直接判断意思,以致时间长了还是感觉像见了熟悉的陌生人。

翻了好多资料,以及各种网上解释,现在大约有点意思了。依我现在的理解,约摸是这样:

“引用”这个词,出现最多的场景就是:在**或者注脚里,写上“引用(或摘自)某某作者某篇**”,意思很明了,就是出现在本文的不是作者自己的话,而是别个作者的话,于是“引用”的意思就是拿过来用。(一下提到”场景“,就是指的这个例子)

国外资料出现的一词“reference",应译为”参考,参照“,在我们中文技术资料上翻译为了”引用“,照上面说的那种场景,倒也可以理解的通。而”dereference“翻译为”解除参照“,资料上翻译为”解引用“,如果回到上面那种场景,那”解引用“或者”解除参照“就是:我们拿了(引用)别个作者的话,却没有注解(解除参照)说这是别人的话,实际上我认为”去引用化“也许更能表达这个过程或者这个意思。那么对应到C语言中,指针变量是存储”其它变量“的地址的,当我们用”*“去操作指针时,我们的意思就是把那个”其它变量“的内容拿过来放在这里,却不说明这是别人(在这里就是指针存储的变量)的东西,当然这只是类比。过程差不多相似,只要能帮助理解,就阿弥陀佛了。于是”解引用“这样来理解,貌似好多了。不知道大家懂我说的了没?汗

网上查的”dereference“在技术资料上翻译真是各种多阿,这里不说了,反正其它翻译也许更难理解。

翻译别国资料,用词真是难,毕竟两种语言词汇不一定完完全全的相对应。尤其技术资料,还要讲究专业术语,翻译成中文时,那是真的千挑万选,才搞出一个像”专业术语“的词汇来表达。现在国内作者翻译水平参差不齐,加上对术语的创造,使得翻译后的中文资料难于阅读啊。比如上面的”解引用“就是一例。再说个”正则表达式“,从字面意思来看,完全不懂,(谁要真能从字面看出意思来,那我拜你为神,来教教我吧),或许看英文都比我们自己的中文好理解一点。但是纯英文看的累,还慢,真是两难啊。

经考证,C语言是女的...原因如下: 1.无论你让他干什么,她绝对不可能自己找到方法。 2.总是用复杂的方法解决简单的问题 3.不可能自主认识到本身错误 4.浪费时间是十分正常的事情 5.无论跟她说什么,都得用她能理解的方式做充分说明 6.只要你有一点错,她一定可以挑出来 7.反正,是你的错

使用特权

评论回复
地板
FVJFIFE|  楼主 | 2011-9-24 00:51 | 只看该作者
综合2楼3楼的意思,我觉得首先   解引用== 用引

且  用了引用的东西,还不改变引用,所以叫解引用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

897

帖子

1

粉丝