作者AmosYang (泛用人型编码器)
看板Soft_Job
标题[心得][英文] 如何命名「复制」功能
时间Fri Aug 28 11:52:49 2020
这周的主题是「复制」: Copy, Clone, Duplicate 。
我们将从语源学的角度来分析 copy, clone, duplicate 的「复制」语意差别,辨
别什麽情况适合用哪个字。
* Google 简报
https://bit.ly/3guPFaE
* GitHub 讨论
https://bit.ly/321ResR
---
# Copy
copy 起源於 14 世纪後期,原意是「抄写复制文字/文件」;在 1950 年代开始用
来描述「复制电脑资料」,到今日「电脑资料」包含了从文字到影音的各种数位化
资料、档案。
## 语源
* 14 世纪後期:抄写、复制文字/文件
* 1640 年代:模仿
* 1953 :复制电脑资料
* 1983 :送一份 文件/信/email 给第三方
## 案例
* 复制电脑档案/资料
* 网页内容(文字、图片、影音)
* .NET `File.Copy()`
* 影印机(copy machine)
* 复制保护(copy protection)
* 着作权(copyright)
## 参考资料
*
https://www.etymonline.com/word/copy
*
https://www.lexico.com/definition/copy
*
https://en.wikipedia.org/wiki/Copy
---
# Clone
clone 是相对近代( 1903 年)才出现的字,原意是「一群从母体分支移植培育的
植物」,在 1970 年代开始被用来描述「在遗传基因层级复制人/动物」的观念,
例如 1973 年的电影《The Clones》,即是以「复制人」为剧情设定。
目前没有足够资料来推论 clone 这个字是怎麽转移到电脑领域的,我能找到的最
早的纪录是 Linux 1.0.0 版(於 1994 年 3 月释出)有 `clone` system call 。
## 语源
* 1903 :(植物学)一群从母体分支移植培育的植物
* 1959 :开始被当作动词使用
* 1970 :由单个细胞开始、在遗传基因层级复制人/动物
* 1994 : Linux 1.0.0 system call `clone(2)`
## 案例
* Git `clone`
* Linux system call `clone(2)`
* Java Object `clone()`
* .NET ICloneable `clone()`
* 复制品
* Diablo clone 类/仿 Diablo 的游戏
* Facebook clone 类/仿 Facebook 的网站
## 参考资料
*
https://www.etymonline.com/word/clone
*
https://www.lexico.com/definition/clone
*
https://en.wikipedia.org/wiki/Clone
*
https://en.wikipedia.org/wiki/Fork_(system_call)#Clone
*
https://man7.org/linux/man-pages/man2/syscalls.2.html
*
https://www.imdb.com/title/tt0071336/
---
# Duplicate
duplicate 起源於 15 世纪,形容「双份的」,作为动词「把东西复制成双份」,
或是指「(之於某物)一模一样的东西」。
## 语源
* 15 世纪早期:双份的
* 15 世纪晚期:复制成双份
* 1530 :(之於某物)一模一样的东西
## 案例
* .NET Linq `DuplicateKeyException`
* 代码重复/复制 duplicate code
* 游戏中复制物品 dupe / duping
## 参考资料
*
https://www.lexico.com/definition/duplicate
*
https://www.etymonline.com/word/duplicate
*
https://en.wikipedia.org/wiki/Duplication
*
https://en.wikipedia.org/wiki/Duplicate_code
*
https://en.wikipedia.org/wiki/Duping_(video_games)
---
# Copy, Clone, Duplicate 有什麽不一样?
作为动词时, copy, clone, duplicate 都能让读者联想到「复制」这个观念,就
看你想强调「复制」的哪一个面向。
比较特别的是 duplicate 做为形容词「双份的」时,则是 copy, clone 无法替换
的;例如下列的 `DuplicateKeyException` 。
* 「抄录资料」 →
copy
* .NET File.
Copy() 复制档案1的内容到档案2
* .NET Array.
Copy() 复制阵列1的元素到阵列2
* .NET List<T>.
CopyTo() 复制此串列的元素到串列2
* 「个体繁殖」 →
clone
* Git
clone 复制 Git repo
* .NET Object.Memberwise
Clone() 浅 (shallow) 复制此物件
* 「双份的;制造双份」 →
duplicate
* .NET Linq
DuplicateKeyException 「同样的物件 key 已存在」例外
* Office Shape.
Duplicate() 复制一形状 (shape) 物件为双份
## 参考资料
*
https://docs.microsoft.com/en-us/dotnet/api/system.io.file.copy?view=netcore-3.1
*
https://docs.microsoft.com/en-us/dotnet/api/system.array.copy?view=netcore-3.1
*
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.copyto?view=netcore-3.1
*
https://git-scm.com/docs/git-clone
*
https://docs.microsoft.com/en-us/dotnet/api/system.object.memberwiseclone?view=netcore-3.1
*
https://docs.microsoft.com/en-us/dotnet/api/system.data.linq.duplicatekeyexception?view=netframework-4.8
*
https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.core.shape.duplicate?view=office-pia
---
# 「复制」深浅度、连动关系
copy, clone, duplicate 并没有明确统一的实作惯例。
每套框架可能有它自己的实作风格。
* 深 (deep) 复制 / 浅 (shallow) 复制
* 本体 与 复制体 之间是否有连动关系
---
# 结语
有「复制」语意的字汇不只 copy, clone, duplicate 这三个,但从 GitHub 及
Microsoft doc 取样的结果来看, copy, clone, duplicate 在程式码中的出现频
率比其它「复制」字汇(例如 replicate, mirror, repeat )来得高,所以先研
究这三个字。
非常感谢参与
https://github.com/EngTW/English-for-Programmers/issues/17
讨论的网友。
有任何疑问、建议、感想,欢迎推文留言讨论。 :)
---
# 徵求意见回馈
本周简报有两个版本:
* 正式发布版:
https://bit.ly/3guPFaE (含讲者稿)
* 实验版:
https://bit.ly/31yi5w4 (含讲者稿)
如果方便的话,请告诉我你对这两种版本/写作取向的感觉,谢谢 :)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 136.56.13.184 (美国)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1598586794.A.F2D.html
※ 编辑: AmosYang (136.56.13.184 美国), 08/28/2020 11:56:01
1F:推 CaptPlanet: 推 08/28 12:38
2F:推 Aobanan: 推 08/28 12:38
3F:推 hans1461: 推 08/28 13:47
4F:推 ga4567896: 推 08/28 13:56
5F:推 DCTmaybe: 想请问php references的这种情况 $a=&$b; 适合用哪个字? 08/28 14:23
6F:推 lazyfirst: 实验版和正式发布版的写作口气差好多,是大大写的吗? 08/28 14:46
7F:推 sniper2824: 推 08/28 17:37
8F:推 summerleaves: 推文推 08/28 17:59
9F:→ summerleaves: 优** 08/28 17:59
10F:推 alihue: 推 08/28 18:08
11F:推 Ouranos: Amos 必推! 08/28 21:43
12F:推 wulouise: reference是参照不是复制吧 08/28 22:01
13F:推 alihue: 正式版编排比较读得下去,有别人用法的实务范例好懂很多 08/28 22:12
14F:→ alihue: 工程师比较不喜欢那麽多废话 想看重点XD 08/28 22:12
15F:推 DCTmaybe: 好像也是,算了当我没问XD 08/28 22:14
16F:推 brianhsu: 这里提到的复制应该比较像真的有两个不同的记忆体区块但 08/28 23:22
17F:→ brianhsu: 内容相同,单纯的两个 pointer / reference 指到同一个 08/28 23:22
18F:→ brianhsu: 物件好像不太会用这些词。 08/28 23:22
19F:推 jasonwung: 推 08/29 00:18
谢谢各位的欣赏 :)
---
> 推 DCTmaybe: 想请问php references的这种情况 $a=&$b; 适合用哪个字?
> 推 wulouise: reference是参照不是复制吧
> 推 brianhsu: 这里提到的复制应该比较像真的有两个不同的记忆体区块但
> → brianhsu: 内容相同,单纯的两个 pointer / reference 指到同一个
> → brianhsu: 物件好像不太会用这些词。
我会从「想聚焦在哪个场景」这个角度来看,例如说,
* 从 `=` 这个 "assignment operator" (指派运算子) 的层级来看,我会用
"assign" 这个动词。
* 往实作细节去看的话,我想一定会有以下的动作:「读取 $b 的 reference 的
『值』,将其写入 $a 的储存空间」;在描述如此「抄写一个『值』」的动作时
,我会用 copy 这个动词。
* 如果是要强调「已经有了 $b, 现在再多产生一个相等的 $a 」,那我会用
duplicate 这个动词。
而 duplicate 的语意可以是正面也可以是负面,例如说,
* 我们 duplicate 了 $b, 所以接下来当 $b 消失、被更动,我们还有 $a 可以
用 ← 在此 duplicate 就是偏向正面的「备份、备援」
* 我们 duplicate 了 $b, 但後来发现这样做没什麽正面效益,可能还多了一个
变数 $a 要多花心力维护 ← 在此 duplicate 就是偏向负面的「冗赘」
也就是说, duplicate 比 assign, copy, clone 更能带出「双份 / 不止一份」
的语意。
---
> 推 lazyfirst: 实验版和正式发布版的写作口气差好多,是大大写的吗?
不是 :) 但的确是我想要做的实验,试着找到「简洁, 好懂, 平易近人」的平衡,
还有不同媒体 (文字、影音) 适合的内容走向。
> 推 alihue: 正式版编排比较读得下去,有别人用法的实务范例好懂很多
> → alihue: 工程师比较不喜欢那麽多废话 想看重点XD
十分感谢你的意见回馈 orz 我能体会那种感觉,想要「高密度、以一贯之的实用
资讯」 :D
※ 编辑: AmosYang (136.56.13.184 美国), 08/29/2020 07:28:47
20F:推 unmolk: 推实用!学生受益良多 08/29 09:52
谢谢你的欣赏 :)
21F:推 Csongs: 个人喜欢语源学来了解英文语系的思路,以前学英文字根多少 08/29 11:53
22F:→ Csongs: 就有这个意味 08/29 11:53
十分同意;接触语源学的资料後,之前一些自己也说不明白的「语感」,也开始变
得更明白。
23F:推 DCTmaybe: 感谢说明~推推 08/29 21:24
不客气 :)
※ 编辑: AmosYang (136.56.13.184 美国), 08/30/2020 02:36:13
24F:推 BlazarArc: 推 09/01 09:16
25F:推 kyukyu: 09/03 12:12
谢谢 :)
26F:推 APTON: 谢谢!GIT按星星并追踪了 09/03 12:55
27F:→ APTON: 以後有人故意要战命名就叫他先看完这个系列!XD 09/03 12:56
谢谢你的欣赏 :)
我猜想,有时候「战命名」可能就只是每个人心智/逻辑/思维模型不同,抽象层的
分界点不一。
这系列文章是尽量建构於客观参考资料、应用实例之上,希望能降低因主观语感而
起争议的机率。 :D
※ 编辑: AmosYang (136.56.13.184 美国), 09/04/2020 12:12:50
28F:推 janbarry168: 推 09/05 09:59
谢谢 :)
※ 编辑: AmosYang (136.56.13.184 美国), 09/06/2020 08:00:45