发布信息

如果想让程序员之间吵起来,怎么办呢?

作者:软荐小编      2024-02-18 15:11:32     224

如果你想让程序员互相争吵怎么办?

很简单,你只需要喊一声:“PHP是最好的语言!”

但我觉得网络上的语言争论和鄙视链完全没有必要。 底层的人看不起应用层,后端的人看不起前端,算法的人看不起纯开发……

事实上,没有一种编程语言适合所有领域,软件开发也没有灵丹妙药。

例如,C/C++更适合操作系统、数据库、Web服务器、驱动程序、高频交易、游戏、搜索引擎等场景。

对于机器学习、数据分析、爬虫等,Python更适合。

后端业务开发、大数据开发等以Java、Go、PHP等语言为主。

前端开发是Javascript。

从TIOBE编程语言榜单中我们可以看到,C、Python、Java、C++基本都在前四,尤其是C,作为低级语言,依然能够常年处于前三,这说明其影响:

软件编程入门自学c语言_c语言入门用什么软件编程_c语言编程入门软件

我们可以从不同的维度对不同的编程语言进行分类,比如按照执行方式:

我们可以将其分为:

1. 汇编执行类型

这种方法一般指的是汇编语言。 汇编语言(Assembly)的源文件通过汇编器(Assembly)转换成CPU可以直接执行的二进制程序文件,并通过链接器(linker)将多个二进制文件链接成一个二进制程序。 。

当然,大多数人可能已经不再学习汇编了。 这是一份吃力不讨好的工作,但如果有时间我还是建议学习汇编。

并不是说Assembly有很多低级功能并且很牛逼。 最主要的是汇编其实是最接近计算机的语言。 学习汇编可以帮助我们理解计算机的执行方式。 例如,各种指令实际上对应着计算机在存储和计算方面的特点。 。

另外,无论是C/C++还是Java等语言,出现问题时都可能需要单步调试。 即使像Java这样的虚拟机类型的语言也具有类似汇编的指令集。 当程序崩溃时,可以检查汇编代码。 逐步调试汇编是您唯一的选择。

2、编译汇编执行类型

这是当今许多高级语言的方法,例如 C、C++、Go、Rust 等。

它们的源文件一般由编译器编译成汇编指令,然后汇编器生成CPU可以直接执行的二进制程序文件。

当然,我们有时也把编译和汇编的整个过程合并为:编译。

但一般这里的编译是分为前端和后端的。 前端是指通过语法分析和语义分析生成中间代码的过程。

语法分析是解析Token(符号)并构建抽象语法树(AST)的过程。 本质上,编程语言的执行过程就是遍历这棵语法树的过程。

c语言入门用什么软件编程_软件编程入门自学c语言_c语言编程入门软件

例如,对于这段代码:

var a = 42;
var b = 5;
function addA(d{
    return a + d;
}
var c = addA(2) + b;

生成的语法树如下:

软件编程入门自学c语言_c语言编程入门软件_c语言入门用什么软件编程

当然,如果编译器没有特别指定的话,一般不会将编译好的汇编指令输出到文件中c语言编程入门软件,而是直接交给内存中的内置汇编器来处理,所以我们会看到这些编程的编译器语言。 直接输出可执行程序文件。

例如

gcc hello.c

a.out可执行文件会直接输出,但如果想查看编译和汇编过程,可以这样做:

gcc -s hello.c -o hello.s

它会在当前目录生成hello.s汇编文件,

汇编过程将上一步中的汇编代码转换为机器代码。 这一步生成的文件称为目标文件,为二进制格式。

编译命令为:

gcc -c hello.s -o hello.o

接下来,我们需要链接成为可执行文件。 链接过程使用链接器将目标文件与其他目标文件、库文件、启动文件等链接起来,生成可执行文件。

附加的目标文件包括静态链接库和动态链接库,包括我们常见的stdlib、stdio等库。

链接过程的命令是:

gcc hello.o -o hello

基于AST,我们甚至可以在语言之间进行转换,即从一种编程语言转换为另一种编程语言。

3.编译、解释和执行类型

这对于Java、Scala等编译型虚拟机语言来说比较常见。 通常由Java编译器编译成类文件(字节码文件)。 我们可以将class文件与C语言编译的二进制格式文件进行比较,只是它们的语法不同。

类文件由Java虚拟机(简称JVM)解释并执行。

C#、VB等语言被其编译器编译成二进制exe或dll(动态链接库)文件,由.net运行时程序解释执行。

显然,这类语言的效率不如编译语言和汇编语言,因为它需要解释和执行。 这个过程是一步一步的翻译,效率比较低。

但JVM引入了JIT(Just In Time)来解决这个问题。 简单来说,就是:

首先,我们的Java代码被javac等编译器编译成JVM可执行字节码(ByteCode)。 然后JVM会判断这段代码是否是热代码。 如果是这样,请使用 JIT 技术。 如果没有,则解释执行,最后变成机器码c语言编程入门软件,由操作系统分配,然后由CPU执行:

软件编程入门自学c语言_c语言编程入门软件_c语言入门用什么软件编程

4. 解释及执行类型

解释执行语言通常称为脚本语言。

典型的包括 shell、Powershell、Javascript、Python、PHP、Ruby 等。

它们的源文件由相应的运行时程序直接读取和解释。

当然,是编译执行还是解释执行,并不是编程语言本身的特性。 例如,如果你愿意,你可以编写一个解释器来解释并执行C语言。

你也可以写一个编译器来编译脚本语言,比如Google的V8。 它执行JS高效的一个重要原因是它会像JVM一样将热点代码标记为HotSpot,然后将其编译成更高效的机器代码供下次执行。 当它到达时,直接使用机器码而不是字节码来执行。

5. 编译、转换、解释和执行语言

这其实和上面的没有太大区别,只是多了一个编译和转换的过程。 Typescript、JSX、Coffeescript等语言通常会通过编译转换程序转换为Javascript,然后由Javascript运行时解释执行。

因为浏览器引擎、NodeJS等环境只能执行Javascript,所以TS、CS等语言只能先通过编译器转换成JS。

有很多成熟的工具可以提供这种能力。 你可以尝试一下。 例如,首先将源语言编译为AST,将语法树输出为XML格式,然后将其转换为目标语言。

GCC-XML 已经可用:

6、执行效率

显然,语言编译得越彻底,执行的效率就越高。 比如C、C++直接编译成二进制,是CPU可以直接识别并执行的指令。

Java被编译成class格式文件,虚拟机在运行时将其转换成CPU指令在不同平台上执行。 不需要对源代码进行语法分析、词法分析等过程,比解释执行脚本更好。 效率更高。

但编译型和解释型执行语言在执行时比汇编/编译执行语言多了一个将虚拟机指令转换为CPU指令的过程,因此其运行效率通常低于汇编/编译执行语言。

因此,在执行效率要求较高的场景(如高频交易、数据库、搜索引擎),通常不使用解释执行语言,而是使用编译执行语言进行开发。

尤其是高频交易,为了改善一点延迟,他们做了极致的优化,甚至尽可能使用编译器来完成计算(C++模板元编程):

尽量避免系统调用(如内核绕过);

2)尽量避免运行时动态分配内存;

3)会制定自己的超低延迟通信协议;

4)会做很多具体场景的基准测试和优化;

5)尽量在编译时解决问题(模板元编程),少用多态性;

7.系统级编程语言

我个人对系统编程更感兴趣。 以前的系统编程基本上都是C/C++编程,所有的系统级软件几乎无一例外都是用C/C++编写的。

由于编译型解释语言或脚本语言的效率不如编译执行语言,并且需要虚拟机或解释器来运行,因此编译执行语言通常用于操作系统或驱动程序编程。

前两天推荐了一种系统语言:Rust。

由于Rust具有低级实现、极高的内存利用率、高性能、可靠性等诸多优点,Rust自身的设计机制和所有权模型可以保证内存安全和线程安全,并在编译过程中尽可能暴露错误。

总的来说,Rust 是一种可靠的系统编程语言,具有与 C++ 相同的高性能、低级和抽象级别,但比 C++ 更安全。

系统编程下面是比较底层的场景,比如和CPU架构密切相关的,比如设置操作系统内存管理模块页表地址的程序,或者需要使用IO/中断指令的时候CPU的工作,基本上只能使用汇编语言。

或者C语言+内联汇编等。

8. 你想学什么语言?

说了这么多,我该学什么语言呢?

说实话,上手之后我觉得这个问题就不是问题了,因为你需要用到什么语言都可以学,而且基本上很快就能学会。

但对于初学者来说,Python 和 C 都可以。 如果你是非专业人士,我觉得还是先学Python比较好。 Python 更快、更容易上手。 先用Python培养自己的编程思维和喜欢编程,然后再学习其他的东西。

当然,有专业的还是可以先学习Python,而且现在很多国外大学更愿意把Python和Schema作为第一语言。

但我个人建议大专业一年级的学生先学C,先把难的东西去掉,然后才能快速学习其他语言。

上手后,我个人推荐的配置是:

1-2 个门编译和执行 + 1-2 个门解释和执行 + 1 个门函数式编程语言。

例如,C/C++ + Python + Haskell

或者Java + Python、Shell + Haskell、Erlang等。

这使得我们能够学习和掌握多种编程范式,尤其是函数式编程语言,这与我们常规的编程思维完全不同。

好了,这个问题就到此为止。 下一期我们将从其他维度来看看编程语言,以及各种编程语言的适合领域和就业前景~

相关内容 查看全部