机器码

机器码也就是二进制的形式,是CPU指令,是计算机真正可直接执行的东西

CPU 并不能直接执行代码,而是需要对其进行编译,将其转换为二进制的机器码,然后 CPU 才能按照顺序执行编译后的机器码

机器码的执行,本质上是逻辑电路的状态变化,简单地说,任何数字,实际都是逻辑电路的一种状态,运算,就是在一个模块本来的状态上输入另一个模块的状态,其结果就是产生了新的电路状态,而这个新的状态又可以看成是一个数字,就是运算结果,相关的内容是属于电子技术的,计算机技术是对此的一种利用。

汇编

机器码是0和1组成的二进制序列,可读性极差

汇编语言包括指令和伪指令。伪指令是为了编程方便,对部分指令做的封装。
指令就是把特定的0和1序列,简化成对应的指令(一般为英文简写,如mov,inc等),可读性稍好
可以理解成汇编语言就是对机器码可读性差,将机器码封装成指令的形式

编程语言

  • PHP 擅长构建低成本WEB
  • c 擅长操作系统、嵌入式
  • Go 天生高并发属性
  • R 的科学计算、统计无人能及
  • Python 在AI领域独占鳌头
  • Java 工业级应用服务及Android (长期霸占TIOBE榜第一的老流氓)

机器码(0和1)写了汇编器 汇编语言 写了编译器 然后有了所有其他的语言
汇编生C,C生万物

如果是编译型语言,编译后都要变成机器码的
如果是解释型语言,那就存在一个机器码的解释器程序,这个程序加载代码,并按照代码执行它内部的机器码

编译器本身就是一个程序,它的功能就是把源代码翻译为计算机可执行的程序

C语言

c 代码编译得到 机器码 ,机器码在处理器上直接执行,每一条指令控制CPU工作;
大多数高级语言都是在C语言的基础上开发的,比如Python、Java、C#……等等;这些基于c的编程语言,先通过一个虚拟机将 代码编译得到 字节码 ,虚拟机执行字节码并转换成机器码再后在处理器上执行;

Go

不管是Go,还是C++,还是PHP,还是Java,还是等等一切语言的编译器实现,最初的原型都是语言的开山鼻祖C
go后来是用 Golang 实现的,实现了 自举

编译与编程语言是没有关系的,它有一套完整而成熟的操作方法,你完全可以用任何一种图灵完备的语言去写任何一种形式语言的编译器,而且有严格的数学方法证明你写的编译器是正确的。
我们常见的编程语言基本都实现了自举,这是一种编程语言发展成熟的标志之一。因为编译器既是一个复杂的工程,也有一套成熟的评价体系,能写出成熟可用、效率有保证的本语言编译器,就能说明这种语言已经能拿来用了。

Java

JAVA底层是用C语言编写的。
而JAVA虚拟机(JVM)是用C语言和汇编语言编写的。

PHP

PHP底层是c实现的,最终调用的也都是C的函数
Zend引擎:纯C实现,是PHP的内核部分,它将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如hashtable、oo)、内存分配及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。

Python

Python底层用 C 语言编写,称为 CPython。平时我们所讨论的 Python,指的其实就是 CPython。
python 还有其他的实现方式。例如,用 Java 语言实现的 Python 称为 JPython,用 .net 实现的 Python 称为 IronPython 等等。

JavaScript

C++ 或者 Java
image.png

Ruby

C 或者 Java 等

区别

php是多进程单线程
Java是多线程,没有协程
go 支持协程

PHP对高并发支持不好,但是有一些异步通信扩展,如swoole,但是生态不好。小公司用不着,大公司用的不多,社区不活跃。遇到问题需要高手才能解决。不像go,Java社区活跃,用的公司多。
PHP也有多线程编程的扩展,也不火。官方不支持的,大公司都不轻易使用。

Java是跨平台语言,Java代码要首先转换成字节码,然后字节码在Java虚拟机中执行,由Java虚拟机将字节码转为可执行的机器码。JAVA代码->字节码->虚拟机->机器码。

Golang类似于c/c++语言,编译后直接生成机器码。Golang代码->机器码。

所以,从语言本身的特性和设计方向来看,Golang的性能要比Java好,因为相比Java少了字节码、虚拟机这两个转换环节。

go基本上只需要标准库就足够了,实际工程中的性能表现要好于JAVA(Go的协程本质也是一种异步IO模型,Go语言: 万物皆异步),除此之外,资源占用也是性能的一部分,显然go内存占用更小,CPU消耗相对低。

综合看实际项目的具体需求。如果是跨平台,WEB开发,大数据开发,这些已经有比较成熟JAVA框架的项目,还是推荐使用JAVA。

世上99%的程序都轮不到比拼原生语言性能的地步。
主流编程语言的性能跟语言的地位基本是一致的,就是底层语言(汇编、C、C++..)> 中间层高级语言(Go,Java,C#…)> 上层脚本语言( Python,Lua,Ruby…)。知道这个大势就可以了