Programming languages 没有头文件的语言如何将符号从封闭源代码库导出到客户端?

Programming languages 没有头文件的语言如何将符号从封闭源代码库导出到客户端?,programming-languages,language-design,forward-declaration,Programming Languages,Language Design,Forward Declaration,头文件在C/C++/ObjC中是必需的,因为每个文件在编译成对象文件之前都需要定义其所有符号。一个副作用是,不想打开其源代码的库分发服务器只能向客户端提供头文件和要链接的.o在编译过程中依赖于源代码的完整视图的语言(如Java)中,这可能吗?对于这个用例,还有其他语言有有趣的解决方案吗 提供一点背景:在我作为软件工程师的(5y+)经历中,我只使用过Java、Python和Go中可以直接访问源代码的库,从未开发过封闭源代码库。对于前两种情况,封闭源代码开发人员可以发布字节码,但我不知道如何使用Go

头文件在C/C++/ObjC中是必需的,因为每个文件在编译成对象文件之前都需要定义其所有符号。一个副作用是,不想打开其源代码的库分发服务器只能向客户端提供头文件和要链接的.o在编译过程中依赖于源代码的完整视图的语言(如Java)中,这可能吗?对于这个用例,还有其他语言有有趣的解决方案吗

提供一点背景:在我作为软件工程师的(5y+)经历中,我只使用过Java、Python和Go中可以直接访问源代码的库,从未开发过封闭源代码库。对于前两种情况,封闭源代码开发人员可以发布字节码,但我不知道如何使用Go实现这一点,Go不依赖头文件来转发声明符号

在编译过程中依赖于源代码的完整视图的语言(如Java)中,这可能吗

Bzzt。Java“在编译过程中不依赖于源代码的完整视图”。使用Java JAR文件不需要源代码,对吗?导出符号信息位于.class文件中。把JDK的代码> R.T.jar > /代码>作为最简单的例子。如果那不起作用,什么都不会发生。你不需要源代码

在Modula、Ada等中,不知何故,它也存在于目标代码中


这只是C和C++,没有这个特性,因此必须依赖头文件。

抢占式攻击:1)这个问题不关心使用封闭源还是远程服务或开源是有趣的;2) 我现在手头没有问题,一直依赖开源;3) 我不满意每个人最喜欢的搜索引擎提供的答案,我希望一些专家能够交流知识。你“不满意每个人最喜欢的搜索引擎提供的答案”,比如什么?【封闭源代码python】的结果表明,分发.pyc是可以做到的,尽管这是不可取的。[头文件基本原理]讨论了为什么它们是必要的,但不要深入讨论现代选项()。对[封闭源代码]的简单搜索只会产生关于为什么您不需要它的讨论。我对这些结果不满意,因为封闭源代码似乎。。。可憎的事物我可以想象共享一个对象文件而不是源文件(例如,商业机密)的真实用例。你说得对,.类是字节码,而不是源代码。尽管如此,据我所知,如果不从依赖项中读取符号,Java无法单独编译.class。这就是我所想的“完整视图”,与C/C++/ObjC中可以实现的“狭隘视图”相反compilation@BrunoKim我不明白。Java等人从目标代码中的符号中获取“视图”。C和C++从<>代码>中获得他们的“视图”,包含文件。在哪里可以看到“全景”和“局部”是一个谜。它们只是做同一件事的两种方式。目标代码仍然不是源代码。我明白了,我想我已经调整了我的心智模型。我的想法是,您可以“独立地”编译一个C文件,但它确实有必要的符号及其类型的“完整视图”,而不是它们的实现。谢谢你容忍我。