文章目录
- 一、前言
- 二、c和c++和c#的区别
- 1、高级语言和低级语言
- 2、c 和 c++ 和 c#的区别
- (1)C语言
- (2)C++
- 三、各主流语言的底层实现
- 1、python的底层实现
- 2、 java的底层实现
- 3、php的底层实现
- 4、js的底层实现
- 5、node是用什么语言写的
- 6、golang是用什么语言写的
- 7、rust是用什么语言写的
- 8、.NET是编程语言吗?是的话底层是用什么写的
- 9、object-C的底层是用什么写的
- 四、编译器GCC和Clang和LLVM
- 1、clang,clang++gcc,gcc++
- 2、gcc和LLVM
- 3、关于LLVM IR
一、前言
跟朋友聊天的时候,说到js的底层实现是什么,c/c++还是其他的,一顿好奇之后疯狂百度,顺带也查查python,go,java这些高级语言的底层实现,还是挺有意思的。
顺带又查了下gcc和LLVM编译器,emmmm,只能说学无止境。。。
二、c和c++和c#的区别
1、高级语言和低级语言
参考:
计算机语言的几种分类
计算机语言发展简史
低级语言: 如机器码(machine language)、汇编(伪机器语言)和符号语言是属于低级语言;
高级语言: C、C++ 、C#、pascal、python、lisp、prolog、FoxPro、Objective-C 、Swift 、java、php等是属于高级语言。
机器码: 计算机能够直接识别的二级制编码,无论语言多高级都要转成二级制文件来让计算机识别运行。
汇编: 用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址,在不同的设备中有着不同的指令集
高级语言与低级语言的区别:高级语言大部分不能直接更硬件打交道,这使得相对来的程序运行速度降低,总之一句话来说那种语言更接近人性化的语言就更高级。
2、c 和 c++ 和 c#的区别
(1)C语言
C是完全面向过程的语言,用于开发规模较小的程序效率很高,但是程序较大,就显得代码量多,编写效率下降了。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言最初的标准。
由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。C语言对编写需要进行硬件操作的场合,优于其它高级语言。
(2)C++
C++是半面相对象的,引入了类的封装性、继承性、多态性大大简化程序编写,提到了代码重用率。
c和c++的关系: C++既面向过程又面向对象,而且她继承了C语言的所有优点,又对C语言功能做了很多扩充,可以认为C++就是C的增强版。
(3)C#
C#是完全面向对象的语言,简单易学,开发效率非常高。C#不支持多重继承,这是与C++明显区别的地方。 在标准的C#安全代码中不支持指针类型的操作。C#是微软公司发布的一种由C和C++衍生出来的面向对象的编程语言、运行于.NET Framework和.NET Core(完全开源,跨平台)之上的高级程序设计语言。
三、各主流语言的底层实现
高级语言的底层实现,主要是看它的编译器或者解释器是用什么语言写的,这些编译器把高级语言编译成了机器码。
1、python的底层实现
用 C 语言编写实现的 Python,又称为 CPython。平时我们所讨论的 Python,指的其实就是 CPython。除了用 C 语言实现外,Python 还有其他的实现方式。例如,用 Java 语言实现的 Python 称为 JPython,用 .net 实现的 Python 称为 IronPython 等等。
2、 java的底层实现
java是运行在java虚拟机上的,java虚拟机是c/c++实现的,因此可以说java的底层是c/c++。
3、php的底层实现
参考:php底层是什么语言
php的底层是c语言。我们都知道php是运行在zend引擎上的,zend引擎是纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
4、js的底层实现
参考:js是用什么语言编写实现的
js是运行在浏览器上的,比如针对pc端来说,一般浏览器引擎是c/c++开发的,比如v8引擎因此可以说js的底层是c/c++。
但是对于手机端浏览器,可能安卓是用java写的,ios是用objectC写的,因此不能直接下定论,只能根据浏览器的引擎语言实现来说。
5、node是用什么语言写的
参考:node.js底层是什么语言
node.js 使用C++开发的。 它是JS运行平台(运行环境)。它的语法就是javascript,区别在它是运行在服务器上的。证据 :node的源码在 GitHub网站上 , 项目根目录的src文件夹下很多以 .cc 后缀结尾的文件里有class字眼 ( C++有class而C没有 )
6、golang是用什么语言写的
参考:https://baijiahao.baidu.com/s?id=1666860904685373696&wfr=spider&for=pc
golang本身是用什么语言写的?
早期Go是用汇编语言和C语言实现的,后来Go成熟了之后,Go语言就开始自举、用早期版本重写了Go语言编译器。
Go语言是效率很高的编程语言,比Java、C#、PHP、Python这些基于虚拟机以及解释性语言性能要好、资源使用效率也更高。go编译器可以直接把生成的汇编语言转换成机器码,不需要像其他高级语言还需要转换一遍,因此效率非常高。
7、rust是用什么语言写的
Rust编译器后端用的LLVM,LLVM官方提供支持的有C++和OCaml两种,Rust的开发者选择了OCaml实现了初版编译器,目前已经完全自举了。linux内核目前支持用rust去重构C程序,说明大佬们还是很看好rust的。
8、.NET是编程语言吗?是的话底层是用什么写的
.net是一个平台,在这个平台里边可以用很多语言来开发,比如:c# ,vb,F#,j# 等等 。netcore是微软新开发的全新的可以跨平台的平台框架,同样netcore中可以用多种语言开发
C#是.net平台下的一门语言而已,而且是.net平台主推的开发语言,很优秀,而且性能很高
9、object-C的底层是用什么写的
Objective-C 是一种通用、高级、面向对象的编程语言。它扩展了标准的 ANSI C 编程语言,将 Smalltalk 式的消息传递机制加入到 ANSI C 中。目前主要支持的编译器有 GCC 和 Clang。是扩充C的面向对象编程语言,主要使用在Mac OS X系统中,Objective-C的流行归功于iPhone的成功。编写iPhone应用程序的主要编程语言是Objective-C。
四、编译器GCC和Clang和LLVM
参考:
【编译原理】GCC/Clang/LLVM的区别与联系
gcc/g++/clang,相当于javac:
GCC vs Clang: 两大编译器巨头的龙争虎斗
具体细节可以参照这三篇文章。
GCC是传统的编译器(该模型同样适用于解释器和JIT 编译器),主要工作原理分为三段式:

(1)前端:解析源代码、检查语法错误、翻译为抽象的语法树
(2)优化器:将抽象语法树翻译生成中间代码,并对中间代码进行优化
(3)后端:将优化器优化后的中间代码转换为目标机器的代码,通用功能包括指令选择、寄存器分配和指令调度
简单来说:
1、clang,clang++gcc,gcc++
clang和gcc是比较早期的编译器,主要是对c的支持,也可以编译c++。
clang++和g++是专门编译c++程序的,编译的时候会自动链接c++标准库stl
注意: clang的错误提示更人性化,其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
2、gcc和LLVM
LLVM是为了解决gcc编译代码无法复用问题,LLVM一上来就站在比较高的角度,制定了LLVM IR这一中间代码表示语言。LLVM IR充分考虑了各种应用场景,例如在IDE中调用LLVM进行实时的代码语法检查,对静态语言、动态语言的编译、优化等。
注意: gdb调试器是gcc自带的,LLVM是LLDB 调试器
3、关于LLVM IR
参考:
LLVM 相比于 JVM,有哪些技术优势?
IR和ByteCode有什么区别?
我们知道LLVM IR是有特定规范的中间代码,java的byteCode也是中间代码,他们之间有什么区别呢?有兴趣的可以参考下以上链接。
答案是:Bytecode(字节码)是一种IR(中间表示)的形式。
关于编译原理,内容实在是太多了,感兴趣的同学可以根据这些关键词自行搜索学习,博主这里只是科普下,有个印象就行。
end
![[激光原理与应用-45]:《焊接质量检测》-2- 常见焊接缺陷与检验方法](https://img-blog.csdnimg.cn/img_convert/9b94c0684fc8d2065587edb70a2b3ee6.jpeg)




![[附源码]计算机毕业设计交通事故档案管理系统Springboot程序](https://img-blog.csdnimg.cn/8a30448c566141509256079e5e711f05.png)













