今天阅读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上搜索结果就还相当少),也都尚未通过约定俗成而自然获得术语之全部内涵。因此我认为目前仍有机会考虑一些更好的译法,故而在此提出“用引”一译,抛砖引玉,以求方家。
分享到:
- 2008-01-25 14:52
- 浏览 8293
- 评论(8)
- 论坛回复 / 浏览 (8 / 4139)
- 查看更多
相关推荐
Apache FtpServer是一个100%纯Java的、基于现有开放式协议基础上、完整、小巧的FTP服务器。此外,FtpServer还可以作为Windows服务器、Unix / Linux后台程序或是被嵌入在Java应用程序而独立运行。有了MINA...
Fix: C++: fix to pointer dereference using std::unique_ptr. Fix: Search Results: Incorrect codepage might be used to display results for some searches using Lookup References and Search Files.
5. C++: fix to pointer dereference using std::unique_ptr. 6. Search Results: Incorrect codepage might be used to display results for some searches using Lookup References and Search Files.
计算机编程常用术语英语词汇汇总是一个涵盖了大量计算机编程相关术语的词汇大全。以下是根据该文件内容生成的知识点: 一、数据库相关术语 1. create/creation:创建、生成 2. Crosstab query:交叉表查询 3. CRTP...
一、Linux 中的 ll 命令的详细解释 Linux 中的 ll 命令实际上是 ls -l 的一个别名。Ubuntu 默认不支持 ll 命令,必须使用 ls -l,但是可以通过修改 ~/.bashrc 文件来添加 ll 命令的别名。ll 命令的主要功能是查看...
2. 指针的使用:指针的使用需要小心,否则可能会出现错误。 3. 指针的释放:指针的释放需要小心,否则可能会出现内存泄露。 指针是 C++ 编程语言中的一种基本数据类型,用于存储变量的地址。通过指针,可以实现对...
项目中碰到的问题
"A Beginner's Guide to ...《A Beginner's Guide to Pointers》是关于C++和C指针问题的详细指导,涵盖了指针的定义、使用和dereference操作符的使用。通过学习和实践,读者可以掌握指针的使用,提高编程技能和效率。
- **定义**:汇编语言是一种低级编程语言,它使用助记符来代替机器语言指令。 - **应用场景**:在编写操作系统内核、设备驱动程序等对性能要求极高的场景下,汇编语言仍然有着不可替代的地位。 ### Assign 指派/...
4. **CRTP(Curiously Recurring Template Pattern)**:一种模板编程技术,允许基类依赖于派生类的类型。 5. **通用类型系统(Common Type System, CTS)**:.NET框架的一部分,确保所有.NET语言之间的类型兼容性。...
Linux TAR命令是Linux系统中的一种归档工具,用于将文件或目录归档到一个单独的文件中,以便于存储和传输。TAR命令的参数众多,本文将对TAR命令的参数进行详细的解释。 基本参数 * -A, --catenate, --concatenate...
FindBugs会检测到这种情况,并报告一个缺陷,提醒开发者使用equals()方法比较字符串或对象。 安全性: 1. ANP: Null pointer dereference in method:方法中存在空指针,这可能会导致NullPointerException。 ...
Linux中的`du`命令是一个非常实用的工具,用于查看文件和目录在磁盘上占用的空间。这个命令对于管理和优化磁盘空间特别有用,因为它可以详细地显示每个文件或目录的大小,帮助用户找出哪些文件或目录占用了大量空间...
这个模板类允许程序员以一种灵活的方式包装现有的迭代器类型,以适应特定的需求或扩展其功能。`iterator_adaptor`的设计理念是基于`iterator_facade`,一个用于构建迭代器的基类模板,它定义了迭代器的基本接口。 #...
Linux磁盘管理是系统管理员日常工作中不可或缺的一部分,而`df`命令则是用于检查Linux系统中文件系统的磁盘空间使用情况的工具。这个命令能够提供关于挂载在系统上的各个分区的详细信息,包括已用空间、可用空间以及...