Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

“堆栈”这种用词,经不起推敲,且毫无逻辑,英文也无对应 #54

Open
Mq-b opened this issue May 7, 2024 · 19 comments

Comments

@Mq-b
Copy link
Contributor

Mq-b commented May 7, 2024

在阅读 ▌R2.5 资源的分配与回收方法应成对提供 这一节内容的时候,我注意到了一个用词:“堆栈”。

这是一个在中文互联网极其常见,又古老的词语,那么“堆栈”到底是“”(heap)还是“”(stack),又或者是“堆+栈”(heap+stack)?

据我所知,通常来说它在指:“”。这种用词毫无逻辑且经不起推敲,纯属历史遗留,应当改正。

@rsp4jack
Copy link

rsp4jack commented May 7, 2024

@Mq-b
Copy link
Contributor Author

Mq-b commented May 7, 2024

我感觉这里指的应该是堆(heap)https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries?view=msvc-170

本文这里的表达我觉得是:“堆+栈”(heap+stack),都指代了。不过看例子大概率是 “”。

@rsp4jack
Copy link

rsp4jack commented May 7, 2024

DLL 没有自己的调用栈,也就不存在栈的概念。

@Timothy-Liuxf
Copy link

Timothy-Liuxf commented May 7, 2024

首先”堆栈“这个词是有其含义的,“堆栈”一般指的是“stack”。
比如微软官方文档:
https://learn.microsoft.com/zh-cn/windows-hardware/test/wpt/stacks
(其对应的英文 https://learn.microsoft.com/en-us/windows-hardware/test/wpt/stacks
再比如谷歌云文档:https://cloud.google.com/shell/docs/cloud-shell-tutorials/deploystack/overview?hl=zh-cn
“堆栈”都指的是”stack“。
而英国最权威的词典之一牛津词典里”stack“是”堆叠“的意思,含有”堆“字:
https://www.wordreference.com/enzh/stack
所以翻译成”stack“翻译成”堆栈“本身没有问题,表示栈是一层一层堆叠的。
不过使用”栈“一个字更能避免混淆,所以我个人是支持只使用一个”栈“字,而不使用”堆栈“的,但是出现了”堆栈“应该认识到指的是”stack“而非”heap“。
但问题在于这个文章里看起来指的是”堆(heap)“而非”栈(stack)“,因为他强调的是”资源的分配与回收方法应成对提供“这一点,对 C 语言来讲,如果不用内联汇编或者类似 longjump 之类的话,栈根本不存在这个问题。所以”堆栈“这个词在这里我认为确实不正确,应该改成”堆“。

@Mq-b
Copy link
Contributor Author

Mq-b commented May 8, 2024

首先”堆栈“这个词是有其含义的,“堆栈”一般指的是“stack”。

首先这是一句正确的废话。这句话非常没有价值,尤其你还强调了“一般”。因为就在仓库,他在计算机中使用了“堆栈”所表达的含义就不是:“栈”(stack),而是:“”(heap)。

这种词语早就该被扫进历史的垃圾堆里,毫无存在的价值,它在计算机中既不能代表栈,也不能代表堆,也很少有人拿它指代“堆+栈”,这种混乱不该存在,这没有什么好争议的。

比如微软官方文档:

这种愚蠢翻译也应该扫进历史的垃圾堆里,“Stacks”翻译为“堆栈”,甚至在很多地方不需要带 “s”,在众多古老中文书籍中都存在此用词。尤其众多文档中同样有。大多数人自己写堆栈这个词都不见得知道自己在说“堆”,还是“栈”,当使用“堆栈”这个词语,纯属徒增阅读难度。

最后,没有必要给这种过时的古老用词洗,我已经说了,它的中文翻译经不起推敲,没有价值。“堆栈”、“堆栈”,既有人拿它表示“堆”,也有人拿它表示“栈”,这个词语本身是更差的表达方式,而且存在根本的歧义,两个有明确指代的“字”,组成了一个没有多少价值的“词”。

@Timothy-Liuxf
Copy link

不是“很少有人用它来指堆 + 栈”,而是用“堆栈”的人指的都是栈。没看懂你在杠什么。给出一个“堆栈”包含“堆”的正经文章谢谢。

@Mq-b
Copy link
Contributor Author

Mq-b commented May 8, 2024

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

@MrShinshi
Copy link

在讨论段划分的时候, "堆"/"栈"/"堆栈" 三个词都是被广泛认可的, 但很明显有个异类试图混淆指代, 把 stack 翻译成 "堆栈" 就是个历史 错误, 因为一部分人被荼毒并习以为常了就认为这是最佳的? 明明有更简洁的叫法"栈", 为什么要坚持一个暧昧的/近似于行业黑话的翻译呢? 还是说你觉得让初学者面对这个你曾经或许困惑过的黑话体会你当年的"辛路历程"很有趣?

@Timothy-Liuxf
Copy link

Timothy-Liuxf commented May 8, 2024

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。

不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

@Mq-b
Copy link
Contributor Author

Mq-b commented May 8, 2024

在能改正的地方改正,在能讨论的地方讨论,在能教导的地方教导。

@MrShinshi
Copy link

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。

不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

你这句话更是莫名其妙, 提 issue 就是为了促进改善项目, 改不了的自然不强求, 但是如果不允许提建议你干脆关了该仓库 issue ?

@Timothy-Liuxf
Copy link

在能改正的地方改正,在能讨论的地方讨论,在能教导的地方教导。

我也没说不改正啊,看看我之前说的我自己也都更倾向于“栈”一个字,避免混淆。。。
不真知道你在对我喷什么。

@Timothy-Liuxf
Copy link

Timothy-Liuxf commented May 8, 2024

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。
不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

你这句话更是莫名其妙, 提 issue 就是为了促进改善项目, 改不了的自然不强求, 但是如果不允许提建议你干脆关了该仓库 issue ?

我也没说不改正啊,看看我之前说的我自己也都更倾向于改成“栈”一个字,避免混淆。。。
真不知道你在对我喷什么。。。好好看看我发言再喷行么。
我只是在强调“堆栈”出现的情况指的是 stack 而已,什么时候说推荐使用“堆栈”了。

和愣头青交流真困难。

@Mq-b
Copy link
Contributor Author

Mq-b commented May 8, 2024

  1. 首先”堆栈“这个词是有其含义的,“堆栈”一般指的是“stack”。

    我在最早已经重复过:“据我所知,通常来说它在指:“栈”。这种用词毫无逻辑且经不起推敲,纯属历史遗留,应当改正。”,我知道通常表达含义,但不代表我认可,我认为它毫无逻辑,这是矛盾点。

  2. 所以翻译成”stack“翻译成”堆栈“本身没有问题,表示栈是一层一层堆叠的。

    我已经说了,我不认可,我的回答是:““堆栈”、“堆栈”,既有人拿它表示“堆”,也有人拿它表示“栈”,这个词语本身是更差的表达方式,而且存在根本的歧义,两个有明确指代的“字”,组成了一个没有多少价值的“词”。”、“这种愚蠢翻译也应该扫进历史的垃圾堆里,“Stacks”翻译为“堆栈””。


综上,这与将这里的描述“堆栈”改为什么是两件事情,从始至终没有在和你聊这个基本共识。

@MrShinshi
Copy link

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。
不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

你这句话更是莫名其妙, 提 issue 就是为了促进改善项目, 改不了的自然不强求, 但是如果不允许提建议你干脆关了该仓库 issue ?

我也没说不改正啊,看看我之前说的我自己也都更倾向于改成“栈”一个字,避免混淆。。。 真不知道你在对我喷什么。。。好好看看我发言再喷行么。 我只是在强调“堆栈”出现的情况指的是 stack 而已,什么时候说推荐使用“堆栈”了。

和愣头青交流真困难。

那你扯那么多废话干嘛? 洋洋洒洒小论文, 引经据典讨论观点 A 的正确性, 然后结尾写个支持 观点 B ? 然后你又批评指出问题的人, 又赞同批评的观点, 你知道自己在说什么吗? 看你的发言真没劲.

@Timothy-Liuxf
Copy link

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。
不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

你这句话更是莫名其妙, 提 issue 就是为了促进改善项目, 改不了的自然不强求, 但是如果不允许提建议你干脆关了该仓库 issue ?

我也没说不改正啊,看看我之前说的我自己也都更倾向于改成“栈”一个字,避免混淆。。。 真不知道你在对我喷什么。。。好好看看我发言再喷行么。 我只是在强调“堆栈”出现的情况指的是 stack 而已,什么时候说推荐使用“堆栈”了。
和愣头青交流真困难。

那你扯那么多废话干嘛? 洋洋洒洒小论文, 引经据典讨论观点 A 的正确性, 然后结尾写个支持 观点 B ? 然后你又批评指出问题的人, 又赞同批评的观点, 你知道自己在说什么吗? 看你的发言真没劲.

瞪大眼睛好好看看 conversation 再说话。

@MrShinshi
Copy link

这种错误的词语我都不知道有什么存在的必要和讨论的余地,没有价值。

照这么说 C 语言把定长数组叫 array 也是个错误。B 语言里定长数组叫 vector 更符合词汇本意,保持协变性的矢量维度是固定的。
不是说非要讨论什么东西。假设有人看到了一篇文章里写“堆栈”,你总不能给人家洋洋洒洒骂一顿,而是应该知道文章里想表达的是什么意思吧,你又不能改别人写的文章。直接给喷一顿除了让别人看不懂之外意义何在。

你这句话更是莫名其妙, 提 issue 就是为了促进改善项目, 改不了的自然不强求, 但是如果不允许提建议你干脆关了该仓库 issue ?

我也没说不改正啊,看看我之前说的我自己也都更倾向于改成“栈”一个字,避免混淆。。。 真不知道你在对我喷什么。。。好好看看我发言再喷行么。 我只是在强调“堆栈”出现的情况指的是 stack 而已,什么时候说推荐使用“堆栈”了。
和愣头青交流真困难。

那你扯那么多废话干嘛? 洋洋洒洒小论文, 引经据典讨论观点 A 的正确性, 然后结尾写个支持 观点 B ? 然后你又批评指出问题的人, 又赞同批评的观点, 你知道自己在说什么吗? 看你的发言真没劲.

瞪大眼睛好好看看 conversation 再说话。

conversation 没问题, 倒是你大概率是写申论入脑了, 一个话题正说反说, 因为一个本身就没什么争议的话题引入大量的无用例子.

@brotherbeer
Copy link
Collaborator

“堆栈”这个词在安全领域用的还是比较多的,比如堆栈溢出、堆栈平衡等等。因为堆和栈可以在同一块连续的虚拟内存中,如果一方被破坏,另一方也会遭到间接乃至直接的破坏,所以经常合在一起说。

“堆栈”本身就是一种泛指,可以指不断变化的内存区域,也可以指内存管理相关的数据结构,但这些问题在OS层面,不在语言层面,恐怕会越说越复杂,所以就用了“堆栈”这种比较宽泛的概念。

当然,如果引起读者的误解就不好了,后续优化吧~

@Mq-b
Copy link
Contributor Author

Mq-b commented May 10, 2024

“堆栈”本身就是一种泛指

这并未被主流所认可,甚至是少数人认为,可以看我最早的说辞:

据我所知,通常来说它在指:“”。
本文这里的表达我觉得是:“堆+栈”(heap+stack),都指代了。不过看例子大概率是 “”。

以及其他人的:

首先”堆栈“这个词是有其含义的,“堆栈”一般指的是“stack”。

所以”堆栈“这个词在这里我认为确实不正确,应该改成”“。

不是“很少有人用它来指堆 + 栈”,而是用“堆栈”的人指的都是栈。没看懂你在杠什么。给出一个“堆栈”包含“堆”的正经文章谢谢。

我感觉这里指的应该是(heap)。https://learn.microsoft.com/zh-cn/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries?view=msvc-170

就应该清晰的感觉到,大家并不认可它是泛指,反而主流的认为就是:“”,且绝大多数的情况下就是如此。

所以如我所说,有极大歧义,并没有绝对统一(即使统一也存在问题)。

也就是我最早说的问题:“那么“堆栈”到底是“堆”(heap)还是“栈”(stack),又或者是“堆+栈”(heap+stack)?

目前的答案是:并无标准答案,每个人甚至有不同的理解,主流的两种是单指“栈”,或者“泛指”。

事实上泛指也只是我在本 issue 看到的,其他时候大多数只是听说。

这个用词有历史原因,有个人理解原因,但,总归不可否认的是:这不够好

按照您的理解是“泛指”,也意味着这里表达的意思是“泛指”?那么这个优化措辞可能就比较困难了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants