为什么c需要编译,js不用?

现在我想要在terminal运行一个 .c 文件,但是需要先编译。
可是 .js 文件却可以直接运行。

按理说,c不是更接近系统语言吗? .js可以直接运行这是什么原理阿?这两个文件的运行有什么区别?

阅读 2.8k
3 个回答

C语言是一种静态编译型语言,需要先将源代码编译成机器可执行的二进制文件(通常是可执行的程序或库文件),然后才能运行。

而JavaScript (JS) 是一种解释型语言,不需要显式的编译步骤。当你运行一个.js文件时,JS引擎会逐行解释和执行代码。

这两种文件的运行的区别主要在于语言本身的特性和执行方式。C语需要进行编译,因此通常具有更高的执行效率和对底层系统的直接控制能力。而JavaScript则是一种解释型语言,相对来说执行速度较慢,但它通过浏览器、Node.js等内置的解释器执行

说人话就是, C语言在硬件底层执行, 因此需要编译成机器认识的语言就是机器语言, 而javascript是浏览器、Node.js等内置的解释器执行, 不需要进行编译, 其实是解释器做了这一步

顺便一提, V8引擎是用C语言写的

C的话编译完项目之后就可以直接运行了,而JS并不能直接运行啊,只不过你使用了 node 作为运行时帮你编译和运行你的js代码罢了。

js和python等脚本语言一样,属于动态解释性语言,需要解释器去执行code。他们只需要解释器去run code就行。目前前端最为流行的就是V8引擎,它将js代码转化为字节码,然后再将字节码编译为机器可运行的机器码,这都是解释器干的事情。

大致过程如下:

  • Parse 阶段:V8 引擎将 JS 代码转换成 AST(抽象语法树);
  • Ignition 阶段:解释器将 AST 转换为字节码,解析执行字节码也会为下一个阶段优化编译提供需要的信息;
  • TurboFan 阶段:编译器利用上个阶段收集的信息,将字节码优化为可以执行的机器码;
  • Orinoco 阶段:垃圾回收阶段,将程序中不再使用的内存空间进行回收。

然后c语言属于编译型静态语言。编译型语言编写的源程序需要经过编译、汇编和链接才能输出目标代码,然后机器执行目标代码,得出运行结果,目标代码由机器指令组成,一般不能独立运行,因为源程序中可能使用了某些汇编程序不能解释引用的库函数,而库函数代码又不在源程序中,此时还需要链接程序完成外部引用和目标模块调用的链接任务,最后输出可执行代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏