vod*_*ang 9 language-agnostic programming-languages header
我在编程语言方面有一些经验,如Java,C#,Scala以及一些低级编程语言,如C,C++,Objective-C.
我的观察是低级语言尝试分离出头文件和实现文件,而其他更高级别的编程语言永远不会将它分开.这些语言使用一些标识符,如public,private,protected,以尝试执行头文件的作业.C++也同时具有标识符和头文件
我看到使用头文件的一个好处(在一些书中像Code Complete),他们谈论使用头文件,人们永远不会看我们的实现文件,它有助于封装.
缺点是它为我创建了太多文件.有时,它看起来像冗长.
这只是我的想法,我不知道是否有任何其他的好处和缺点,人们看到和使用头文件
这个问题可能与编程没有直接关系,但我认为如果我能更好地理解编程接口,设计软件.
它们允许您分发库的API,以便编译器可以编译正确的代码.
与在C中一样,您只需包含链接时库中内容的定义,而不是包含整个实现.
从这个意义上说,好处主要是编译器.因此,您/lib在包含搜索路径的say 和headers中安装二进制库.您在运行时期望使用此调用约定的这些符号可用.
当编译器/链接器/解释器不需要它们时,那种语言的约定是最好的方法,因为这是其他程序员期望找到的.传统是预期的.
诸如C#之类的语言包括从二进制blob 检查库以获取信息的能力,因此在许多这些语言中,您不需要标题.诸如Cecil for C#之类的工具也允许您自己检查库(甚至修改它).
简而言之,某些语言删除了标头的好处,并允许检查库以确保链接代码满足相同接口/ API规范所需的所有编译时信息.
我不确定你到底在问什么问题,所以我会尝试重新表述:
将公共信息放在单独的(标头或接口)文件中,而不是简单地将信息标记为公共或私有(无论它出现在何处),有什么好处?
拥有单独的接口或头文件的主要好处是它减少了读者的认知负担。如果您试图理解一个大型系统,您可以一次处理一个实现文件,并且您只需要读取它所依赖的其他实现/类/模块的接口。这是一个很大的好处,不需要单独的接口文件(例如 Java)或者甚至不能在单独的文件中表达接口的语言(例如 Haskell)通常会提供 Doxygen 或 Haddock 等工具,以便提供单独的接口,供人们read,是从实现中生成的。
我非常喜欢 Standard ML、Objective Caml 和 Modula-2/3 等语言,其中有一个单独的接口文件可供检查。在 C 中拥有单独的头文件也很好,但不是那么好,因为通常编译器无法独立检查头文件。(C++ 头文件不太好,因为它们允许私有信息(例如私有字段或内联方法的实现)泄漏到头文件中,因此公共信息被稀释。)
语言设计界的一个传说是,对于典型的静态类型语言,模块中只有大约 10% 的信息是公开的(以代码行数衡量)。通过将此信息放入单独的头文件中,可以将读者的工作量减少大约十倍。