在上一个视频中, 我们讨论了低级语言和高级语言｡
不, 我们已经知道, 高级语言更像是英语, 更容易让人理解｡
在上一个视频中,
我解释了有许多高级编程语言, 有些语言是基于编译器的, 有些是基于解释的, 有些是混合的｡
那么, 基于编译器是什么意思呢？
基于解释器是什么意思｡
我们将在这段视频中了解｡
因此, 主题是编译器与解释器｡
然后我也将讨论混合语言｡
所以对于理解这一点｡
我们应该知道编译器和解释器的工作是什么｡
有什么重大任务｡
请参阅编译器或解释器的任务无论它是什么｡
第一件事是它会检查错误, 检查错误｡
好吧, 我知道了
所以这是第一件事｡
那么第二件事就是转换成机器代码, 转换成机器｡
代码｡
所以我就写M｡ C. C. 机器代码,
或者机器代码语言, 参见高级语言, 得到商品化的低级语言,
也就是机器可以理解的机器代码, 所以编译器和解释器, 他们做的是转换的工作, 第三件事是执行, 执行一个程序, 这个程序在运行｡
运行程序意味着你知道, 就像我已经告诉你的, 程序被带到主内存中,
并由CPU执行｡
因此, 机器指令将进入主存储器, CPU将执行它｡
那就是执行, 现在运行一个程序对于这三件事情让我们明白这一点｡
当我们写这样的程序的时候, 我会把这个程序叫做源代码, 当你写任何源代码的时候,
源代码可能会有错误｡
那么你为什么会有错误呢？ 我看你可能说错了什么, 或者你可能忘记了一些陈述,
或者你没有正确地写陈述｡
可能存在一些错误, 因此这些错误称为语法错误｡
因此, 无论是编译器还是解释器｡
它必须首先检查代码, 你写的源代码没有任何错误,
这是第一件事, 如果没有错误, 那么它将把它转换成机器代码｡
因此, 编译器或解释器主要有两个任务, 它们都做这件事, 检查错误｡
如果源代码是无错误的, 那么生成机器码, 然后第三件事, 程序的执行｡
如果我谈到执行, 编译器不负责执行, 但解释器负责执行｡
编译器如果不参与程序的执行就涉及解释器｡
所以这件事情的一切我们都会详细了解对吧｡
因此, 我们一步一步地了解编译器和解释器之间的差异｡
因此, 请记住, 这是与编译器和解释器相关的三个主要问题｡
现在让我们逐一比较一下｡
为了比较, 我已经采取了一些程序代码在这里.
这是用C++编写的源代码, 也是用Javascript编写的源代码｡
我举了两个例子｡
C++是一种基于编译器的语言, 它只有一个编译器, 没有解释器javascript, 这对写网页很有用｡
它将成为该页面的一部分, 并在浏览器内运行｡
大多数的网站, 如果你用浏览器访问, 如果你检查代码, 你会发现html和javascript在javascript中,
所以这是一个大家都知道的常见名字｡
这是在网络编程中使用的｡
这是基于解释的｡
这是我写的源代码｡
这不是机器代码, 因此可以通过编译器和人工方式来理解｡
这可以被解释器和人类理解, 所以我已经举了一个基于编译器的语言的例子,
现在让我们理解语言的解释器的区别｡
看看我有没有这个程序, 我想编译的意思是翻译成机器码, 如果我给予它给一个编译器,
编译器会把这个代码转换成机器码, 你们可以看到, 我把这个程序分成了两部分,
两部分在这里｡
这是add函数, 这是main函数.
不, 我们现在对函数一无所知, 但我刚刚把程序分成两部分写出来｡
因此, 当生成机器代码时, 它将生成两个不同的部分, 即add函数的机器代码｡
和Main功能的机器代码｡
所以这里你要明白的是, 如果你把程序分成几部分,
那么这些部分将以机器代码的形式生成｡
这很重要｡
这是生成的机器代码｡
先看这是文件｡
编译之后, 我们得到了一些中间文件, 最后我们得到了可执行文件,
我们得到了第一个｡ exe文件､ 可执行文件｡
所以在这里我已经展示了最难的｡
第一个｡ 如果你调用一个编译器,
编译器会运行到内存中, 它会很好的处理这个程序, 首先要理解并检查是否有错误, 如果没有错误, 它会生成一个机器代码文件｡
那是第一次｡ exe, 它将在硬盘上为它服务, 就像这样,
你会得到一个单独的文件, 名为第一｡ exe这是第一个｡ exe编译器生成机器代码, 如果没有错误, 它就生成机器代码｡
编译器的工作结束了｡
它已经生成了机器码, 下一步我想运行｡
我说有三件事是正确的检查错误, 转换, 没有错误, 转换｡ 现在执行如果你想现在运行程序你可以先运行这个程序｡
你可以运行, 你可以运行很多次, 你现在不需要编译器, 编译器已经翻译了一次, 这就足够了, 现在你运行你的程序n次,
每当你运行你的程序, 这｡
将使用exe｡
源代码是关闭没有使用现在和在所有您正在作出任何改变在这一个然后您可以重新编译得到一个重新生成第一 exe文件, 并且该文件将是一个新程序或全新或更新的程序｡
因此, 这意味着源代码到机器代码的编译或翻译只需要一次｡
这是第一点, 并且编译器生成单独的可执行文件｡
还有第二点, 第三点, 当你想运行程序时,
你不需要编译器, 翻译只进行一次, 因为这就是为什么你运行程序时, 不需要任何编译器,
编译器的一个更重要的事情是, 看它们有几行, 12345678, 大约10,
15行｡ 在这一行中, 如果在某个地方有任何错误,
假设我从这里开始, 12345, 四行是完美的, 第五行有一些错误,
你的程序没有被编译｡ 如果第五行有错误,
你程序将无法编译｡ 2前四行是正确的, 对吗？
但是它必须生成完整的机器代码, 它不能将其转换成机器代码｡
这些就是关于编译器的要点｡
让我快速重复编译器将生成一个机器代码文件单独的文件和程序的翻译是唯一的, 编译器将不会在程序运行时出现,
对, 大多数学生认为编译器将在执行时出现编译器将不会出现,
最后一点是, 如果有任何错误, 在一些行,
那么程序将不会得到编译｡ 现在我们来看看解释器,
为了解释解释器, 我将删除此文件, 并更改此文件, 现在让我们看看解释器,
对于解释器, 我有一些javascript代码, 不要试图阅读和理解代码, 只有一些行, 好的｡
这些都是用JavaScript编写的, 现在解释器是如何工作的｡
让我们来看看｡
看到这是假设一个文件名为我的｡ JavaScript是我的｡
js文件, 然后我还有一个叫做Chrome的程序, 它是一个常用的浏览器｡
所以我在这里用了chrome这个名字｡
所以这个铬｡ EXE是一个浏览器javascript运行在浏览器｡
它不能独立运行｡
现在javascript是如何工作的chrome是如何作为JavaScript的解释器工作的｡
让我想想｡
首先, 请看我运行这个程序来执行这个程序｡
我不是直接说翻译或任何东西, 我是说执行第三步｡
记住这个｡
我必须运行chrome, 在Chrome里面, 我可以运行javascript, 我可以在chrome中打开那个文件｡
通常我们不从本地机器打开文件, 我们从互联网上获得页面, 但在这里, 如果你打开chrome,
那么你可以打开JavaScript文件｡
如果你在chrome里面打开, Chrome就会执行这个代码, 不管它是什么｡
只是让它做什么, 它这样做的代码可以执行的铬｡
那怎么办？ Chromebook作为JavaScript的解释器｡
所以现在你可以看到它是如何工作的｡
首先, Chrome将运行｡
然后如果你让它使用这个文件它会把这个文件, 然后, 它会通过这个文件,
它会翻译它逐行｡
经过翻译后, 它将转换成机器代码｡
是的, 我知道
它也会被执行, Chrome会像C++程序一样执行它, 编译器不会在这里执行它｡
Chrome是JavaScript解释器Chrome将执行它
是的, 那么它将如何执行它将不会翻译整个事情, 然后开始执行, 它将翻译第一行｡
执行｡
第二行, 执行第三行｡
所以逐行翻译以及执行｡
现在让我们比较一下这个编译器解释器C编译器会读的程序｡
它将逐行生成机器代码,
但它将生成一个机器代码, 用于分离整个程序, 并制作一个单独的文件, 但浏览器是JavaScript的解释器｡
它不会为JavaScript创建EXE文件｡
这是第一个区别｡ 第二个不同之处是,
编译器只是将其转换为不执行, 而将其解释为Chrome, 它将转换为执行｡
第二个区别｡
第二个区别, 第三个区别, 如果一旦翻译成机器代码, 现在你可以随心所欲地使用它, 你不需要编译器,
翻译只做一次, 但在这里, 每当你想运行javascript时, 你应该调用chrome,
Chrome每次都会运行它, 它会翻译｡
所以如果你执行n次, 那么n次翻译就会完成（解释器语言）, 如果这里有任何错误, 那么它就不会编译｡
这里, 如果这里有任何错误, 假设在某行中, 那么前两行肯定会被执行｡
因为您只是在转换和执行转换和执行｡
如果在任何点上有任何错误, 则它将停止｡
所以直到那里它才会执行解释器会执行编译器程序运行独立的解释器程序运行在眼前｡
翻译｡
翻译没有最后的结论点谁更快｡
编译程序还是解释程序？ 编译后的程序速度更快, 因为它们作为一个独立的程序是独立的｡
解释器程序不被培养, 因为它们不独立运行,
在解释器的解释器上下文内部有一个内部解释器, 所以它们比较慢, 容易编写｡
如果在一行中有任何错误, 它将不会编译｡
如果某行中有任何行错误, 则不能运行, 然后可以执行前一行｡
所以很简单｡
所以在某种程度上你可以看到程序在这个地方运行｡
好的, 有个错误我可以删除它.
所以这些语言都很简单｡
解释器语言比基于编译器的语言更容易｡
这就是编译器和解释器的区别｡ 现在我给大家举一个小例子｡
有了这个你就可以记住这整个事情我已经讨论过了｡
假设你正在做一道中国菜, 你正在准备一道菜, 所以你有一道中国菜的食谱｡
这是用中文写的, 这是用中文写的｡
你不懂中文｡
我懂中文和英语所以我可以帮你我可以再翻译一遍把它翻译对｡
所以你要准备一道菜｡
现在我可以翻译的方法有哪些｡
第一种方法我可以看完整个食谱, 然后准备好英语版给予你｡
是第一法接着第二法｡
我要中国食谱｡
我读了第一行翻译它, 我告诉你, 你也将执行它意味着你现在正在准备一道菜｡
我会说拿一个这样大小的容器｡
好吧你拿着然后拿着这个这个这个, 你拿着, 拿一些水煮开｡
你会煮它, 所以我阅读中文, 翻译成英语, 我会, 我也会执行它｡
你正在做｡
还有第二种方法｡
现在让我们比较一下, 第一种方法｡
如果我给予你一个英语副本, 那么翻译只做一次, 你不需要我｡
当你准备一盘菜2区别权利和你可以独立工作｡
好吧, 我知道了
同样的事情第二个区别｡
现在这里｡
每次你想再准备一道菜你会来更多的中文请翻译我会翻译正确的这一个｡
第二件事, 无论何时你准备你的菜, 我必须被送到你｡
你不独立｡
这就是你所能记住的区别｡
如果我翻译的话, 我会在另一张纸上给你一个单独的英语版本｡
现在, 中文版, 你可以保持在检查, 如果你不需要它｡
你有英语版, 你不需要我再做同样的食谱, 但在这里, 你每次都需要我,
因为我在翻译, 我让你完成, 所有的工作都结束了｡
所以同样的方法, 这个chrome将进入主内存, 它将接受javascript和翻译, 并让它由Cpu执行｡
这个chrome是我自己, 这个是中国配方, 这个是你自己,
用来执行你理解的机器代码, 就像编译器一样｡
你打电话给我｡
我先拿了｡ Cpp又先转换成了一个｡ exe文件｡
现在你不需要我, 只要你想, 你可以直接执行该exe文件.
这些就是区别｡
最后, 让我们来谈谈混合语言, 混合语言, 比如Java, 或者所有被采用的语言,
比如C.
现在这些是混合型｡
它们有一个部分组合, 首先编译器将其转换为字节码, 然后由JVM转换为机器｡
所以我不打算详细解释, 只是简单地告诉你们, 他们有两个步骤,
编译器也是他们的解释器, JVM也是他们的解释器｡
这是翻译｡
为什么两个阶段的编译器会检查编译器会做什么, 它不会生成机器码, 编译器只是检查错误,
如果没有错误, 字节码就是无错误的代码, 然后Jvm会转换或翻译成机器码,
所以两个步骤的过程我强调了三件事, 比如检查错误, 翻译,
然后机器码和执行｡
第三是处决｡
因此编译器只检查是否有错误｡
它不是机器代码, 而是咬代码, 然后JVM将其转换为机器代码并执行｡
所以它是一个解释器, 解释字节码, 而不是源代码.
因此, 这两个步骤提供了平台独立性或dotnet语言｡
它是用于依赖关系中的语言｡
这些都是不同的主题, 只是要知道, 有一些基于编译器的语言,
有一些解释器语言, 还有一些是混合的, 既有编译器, 也有解释器｡
该采取的好处, 这两个, 并试图提供一些优秀的功能, 使所有与这个主题｡
让我们继续下一个视频中的主题｡