这个问题之前应该不少人问过,一些回答大概的意思就是因为不同平台,不能每一个平台编译一份,也不能保证每个都可用,所以都是干脆拉源码下载编译
刚才突然想到,如果平台保存的是中间代码,不保存各个架构最后的编译成品,是不是就能解决?最后一步由拉代码时进行编译?
因为从源码->中间代码生成这部分,都和电脑无关的,不管哪台电脑,应该都是有同样的输出结果,只有到最后一步的汇编才有不同,那么提供中间代码,是不是就是比较好的解决方案?减少了一些相同的构建时间,并且一些依赖什么的应该也在这时变成中间代码,省却了我们导出研究是哪个版本?
1
BrettD 2020-12-15 17:14:07 +08:00 via iPhone
C++哪有所谓的标准化的中间代码……每个编译器自己实现的都不一样
|
2
lcdtyph 2020-12-15 17:16:55 +08:00
源码->中间代码的这部分也不是平台无关的:很多跨平台的兼容是利用预处理阶段完成的,这间接导致了编译阶段的源码都是不同的。
|
3
wutiantong 2020-12-15 17:19:06 +08:00 2
思而不学则。。。
|
4
Mohanson 2020-12-15 17:20:04 +08:00 via Android
很多 c 库都有手写汇编呢,还有 ifdef win, ifdef apple 条件编译,哪有通用的中间码
|
5
Cbdy 2020-12-15 17:20:51 +08:00
C 可以嵌入汇编
|
6
renmu123 2020-12-15 17:27:41 +08:00 via Android
因为设计得早,没想到这个,之后随着包袱越来越多,也就没人愿意搞了(以上都是我瞎猜的,勿喷
|
7
Mithril 2020-12-15 17:31:27 +08:00
主要是细节实在是太多,各家编译器支持的有不一样。然后 UB 又是一大堆,鬼知道放哪就跑不起来了。
一般大公司其实都有自己弄的依赖管理。自己规定好 toolchain 和配置就行,二进制就能直接拉下来用了。 |
8
across 2020-12-15 17:32:57 +08:00
以前网络没那么自动化,cmake 用用还可以。
现在 VS 自带的管理就挺方便的···不过 C++下沉到底层了,用户群没那么多,不知道有没人去搞,说不定更愿意投在 rust 上。 |
9
whitehack 2020-12-15 17:44:24 +08:00
|
10
longaiwp 2020-12-15 17:46:41 +08:00
主要是二进制之间互相不兼容啊,平台相关,你这个不好搞啊。
|
11
ResidualSoils 2020-12-15 17:53:14 +08:00
vcpkg 好像还不错
|
12
ysc3839 2020-12-15 18:00:30 +08:00 via Android
本质问题是不同编译器实现不同,能做到同平台相互兼容已经很不错了。如果只限定某个编译器的话,那是没有问题的,比如 NuGet 上就有一些 C/C++ pre-built binary 。
|
13
sean10 2020-12-16 01:42:44 +08:00 via Android
平台相关的依赖管理用用还是可以的,win 的 nuget,centOS 上的 yum 都能下到依赖,debian 的 deb 包里也带了
|
14
sean10 2020-12-16 01:43:31 +08:00 via Android
感觉还是历史原因,应该是有做的还可以的了吧?只是相比不知道的人少太多了
|
15
zxCoder 2020-12-16 09:17:45 +08:00
总结起来应该就是三个字 太乱了
|