gpt4 book ai didi

language-agnostic - 命名空间/包/模块的历史?

转载 作者:行者123 更新时间:2023-12-04 07:44:53 26 4
gpt4 key购买 nike

我一直在研究不同语言如何管理源代码的组织。似乎大多数现代语言都使用某种形式的命名抽象容器。它的名称和实现方式因一种语言而异,但它归结为一种编程结构,它可以超越文件边界对相关代码进行分组。

在 Java 和 .NET 语言中,它用作组织依赖项的基础(您包含/导入类所属的命名空间/包,而不是定义它的文件)。而 C++ 仅使用它来避免名称冲突。

我很好奇是谁首先提出了这个想法,什么时候提出的。还有第一个实现它的语言是什么?

最佳答案

命名空间和模块是不同的关注点。命名空间提供标识符的单独概念分组。如果项目 A 使用命名空间 A 并且它的所有标识符都在 A 或 A 的子命名空间中,那么它不会与使用命名空间 B 的项目 B 发生冲突。在像 C 这样具有一个大的扁平命名空间的语言中,当不同的项目想要使用时可能会出现问题相同的标识符。

模块是单独的代码单元。通常它们是文件或文件组,尽管我认为不可能有严格的定义。模块可以包含包含子模块的子模块。

这里的区别在于,虽然每个模块通常都有自己的一对一关系的命名空间,但通常不需要。例如,C++ STL分为不同的模块如<vector> , <functional>等等,但它们都使用相同的命名空间std:: .在 C 中,您可以拥有模块化代码(在 .c/.h 对中),但不能拥有命名空间 - 或者等效地,所有模块都使用一个命名空间。

一般来说,“包”这个名称可能是模棱两可的:我看到它指的是命名空间(如在 Perl 中)或命名空间/模块组合(如在 Java 中)。

关于language-agnostic - 命名空间/包/模块的历史?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3627539/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com