大新闻:C语言二进制程序同时“跨平台”在Windows和Linux上跑了
众所周知,自古以来,Linux不能运行windows平台的exe二进制可执行文件,windows也不能运行Linux的二进制ELF文件。
湾区美女Justine Tunney搞了个大新闻: 现在,我们终于能够实现exe在Linux和Windows上都跑起来的宏伟目标啦!
她做了个跨平台的C标准库 Cosmopolitan Libc ,能够把C语言程序变成为“一次编译到处运行的语言”(build-once run-anywhere language)。没错,就是Java当年叫嚣的口号。
不过,这里的C可执行文件可不需要解释器或者虚拟机,而是真正的本地运行的二进制文件,POSIX可运行的多语言格式,能够本地运行于Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS,7大平台。
一个100多k的小文件就可以完美的运行于以上7大平台了,甚至其中包括了BIOS。惊不惊喜,意不意外。
这可不是Java或者C#的虚拟机平台,又或者是Docker之流能比的了。
不信看这里:
为了描述这种C语言的二进制跨平台文件格式,她甚至给它取了个名字:APE,即αcτµαlly pδrταblε εxεcµταblε。官网的字体就是那样写的,但我读起来感觉就是:Actually portable executable。这个名字完美的契合了“build-once run-anywhere”的口号。
经过以上骚操作,就把标准C语言变成了一个完美的build-once run-anywhere的语言了。
那么说了那么多,这种东西性能如何呢?
提前泄露以下吧。这本身就是原生的二进制文件,性能肯定是遥遥领先于其他Java、Go语言了。
不愿看测评的小伙伴可以撤了。
1)测试1
首先,来测试经典的fibnacci数:
#include"cosmopolitan.h"
int fib(int n)
if (n <= 2)
return 1;
return fib(n-1) + fib(n-2);
int main(int argc, char **argv)
int n;
if (argc < 2) {
printf("usage: fib n\n"
"Compute nth Fibonacci number\n");
return 1;
n = atoi(argv[1]);
clock_t st, end;
st = clock();
int f=fib(n);
end = clock();