精华内容
下载资源
问答
  • 编译型语言与解释型语言
    千次阅读
    2022-03-28 10:11:42

    计算机只能识别二进制指令,不能直接识别由JavaScript等高级编程语言所编写的代码(源代码),所以需要将高级语言转为二进制指令。

    由于不同语言转换为二进制指令的时机不同,可分为编译型语言和解释性语言。

    一、编译型语言

    ● 编译型语言

    编译型语言要求使用编译器一次性将所有源代码编译为一个可执行程序,一次编译可重复执行。代表语言有C、C++、Golang、汇编等。

    编译型语言一般不能跨平台

    1.编译出来的可执行程序不能跨平台:因为不同操作系统对可执行文件有着不同的要求,彼此之间不能兼容。

    2.源代码不能跨平台:不同操作系统下的函数、变量、api等可能会有不同。

    二、解释型语言

    解释型语言

    解释型语言是使用解释器一边执行一边转换,用到些源代码就转换哪些,不会生成可执行程序。代表语言有JavaScript、Python、PHP、Shell等。

    解释型语言一般可以跨平台

    跨平台是指源代码可以跨平台,解释器是不能跨平台的。源代码在不同操作系统中运行的结果相同。

    更多相关内容
  • Java是编译型还是解释型语言

    万次阅读 多人点赞 2020-09-19 10:53:20
    1.编译型语言和解释型语言 编译型语言 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。 优点:编译器一般会有预编译的过程对代码进行优化。...

    1.编译型语言和解释型语言

    编译型语言

    定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。

    优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高,可以脱离语言环境独立运行。

    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

    总结:执行速度快、效率高;依靠编译器、跨平台性差些。

    代表语言:C、C++、Pascal、Object-C以及Swift。

    解释型语言

    定义:解释型语言的源代码不是直接翻译成机器码,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。

    优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

    总结:执行速度慢、效率低;依靠解释器、跨平台性好。

    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby。

    混合型语言

    定义:既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕,就出现了半编译,半解释型语言。

    比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.NET在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。严格来说混合型语言属于解释型语言,C#更接近编译型语言。

    Java即是编译型的,也是解释型语言,总的来说Java更接近解释型语言

    • 可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。同时围绕JVM的效率问题,会涉及一些如JIT、AOT等优化技术,例如JIT技术,会将热点代码编译成机器码。而AOT技术,是在运行前,通过工具直接将字节码转换为机器码。

    • 可以说它是解释型的。因为Java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的。

    2.动态类型语言和静态类型语言

    动态类型语言

    动态类型语言:在运行期间才去做数据类型检查的语言,说的是数据类型。动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。

    代表语言:Python、Ruby、Erlang、JavaScript、Swift、PHP、Perl。

    静态类型语言

    静态类型语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。

    代表语言:C、C++、C#、Java、Object-C。

    3.动态语言和静态语言

    动态语言

    动态类型语言和动态语言是完全不同的两个概念。

    动态语言:说的是运行时改变结构,说的是代码结构。在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。

    代表语言:Object-C、C#、JavaScript、PHP、Python、Erlang。

    静态语言

    与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。

    展开全文
  • JavaScript是解释型语言--V8、JIT

    千次阅读 多人点赞 2021-05-25 20:11:49
    编程语言 可以通过”语言“来控制计算机,让计算机为我们做事情。(类似于中文、英文) 编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守...

    编程语言

    可以通过”语言“来控制计算机,让计算机为我们做事情。(类似于中文、英文)

    编程语言是用来控制计算机的一系列指令(Instruction),它有固定的格式和词汇(不同编程语言的格式和词汇不一样),必须遵守,否则就会出错,达不到我们的目的。

    编程语言的发展大概经历了以下几个阶段: 汇编语言 ==> 面向过程编程 ==> 面向对象编程

    • 汇编语言是编程语言的拓荒年代,它非常底层,直接和计算机硬件打交道,开发效率低,学习成本高;
    • C语言是面向过程的编程语言,已经脱离了计算机硬件,可以设计中等规模的程序了;
    • Java、C++、Python、C#、PHP 等是面向对象的编程语言,它们在面向过程的基础上又增加了很多概念。

    在这里插入图片描述

    编程语言的从执行原理上分为两类:解释型语言和编译型语言

    计算机不能直接理解机器语言以外的语言,因此需要将我们写的代码编译成机器语言,然后再交给计算机去执行。

    编译型语言

    程序在执行之前需要一个专门的编译过程,把程序编译为机器语言的文件,运行时不需要重新翻译,直接使用编译的结果就行了。程序执行效率高,依赖编译器,跨平台性差些。如C、C++、Delphi等。

    解释型语言

    程序不需要编译,程序在运行时才翻译成机器语言,每执行一次都要翻译一次。因此效率比较低。如 Python、Shell、JavaScript 等。

    Java 语言

    编译器(javac)把源代码转化为字节码,然后解释器(Java.exe)把字节码转换为计算机理解的机器码来执行。其中编译器和解释器都是 Java 虚拟机(JVM)的一部分,由于针对不同的硬件与OS,Java 解释器有所不同,因此可以实现“一次编译、到处执行”。所以 JVM 是Java 跨平台特性的关键所在 – 引入 JVM 后,Java 语言在不同平台上运行时不再需要重新编译。

    对于前端开发同学使用的 JavaScript 语言,属于典型的解释型语言

    JavaScript

    JavaScript 作为编程语言的一种,直接输送给计算机(CPU)是不认识的(上面有提及),需要将其转换为指令集。不同类型的 CPU 的指令集是不一样的。JavaScirpt 引擎可以将 JavaScript 代码编译为不同 CPU(Intel, ARM 以及 MIPS 等)对应的机器码,同时引擎还可以执行代码、分配内存以及垃圾回收等。

    Google V8 是开源高性能 JavaScript 和 WebAssembly 引擎,被用于 Chrome 和 Node.js 等。其中包括重要的四个模块:

    1. Parser:将 JavaScript 源码转换为 Abstract Syntax Tree (AST);
    2. Ignition:解释器,将 AST 转换为 Bytecode,解释执行 Bytecode;同时收集 TurboFan 优化编译所需的信息,比如函数参数的类型;
    3. TurboFan:编译器,利用Ignitio所收集的类型信息,将Bytecode转换为优化的汇编代码(计算机可识别);
    4. Orinoco:垃圾回收,负责将程序不再需要的内存空间回收。

    整个转换过程:JavaScript ==> AST ==> Bytecode ==> Machine Code

    关于 v8 引擎是如何工作的,可以看 这篇文章

    V8 出现之前,所有的 JavaScript 虚拟机所采用的都是解释执行的方式,这是 JavaScript 执行速度过慢的主要原因之一。而 V8 率先引入了即时编译(JIT)双轮驱动的设计(混合使用编译器和解释器的技术),这是一种权衡策略,给 JavaScript 的执行速度带来了极大的提升。

    绝大多数编译器以预先编译(AOT)或实时编译(JIT)形式工作。

    • 使用命令行或者集成开发环境(IDE)调用预先编译(AOT)的编译器,如 gcc
    • 实时编译器通常是用来提高性能的,令你没有感知的,如 V8

    即时编译 JIT(Just-in-time)

    解释器的工作方式:边解释,边执行。 对于循环等会存在解释多次的情况。从而导致运行速度变慢。

    for (let i = 0; i < len; i++) {
      doSomething(i)
    }
    

    整体来说,为了解决解释器的低效问题,后来的浏览器把编译器也引入进来,形成混合模式。最终,结合了解释器和编译器的两者优点。

    They added a new part to the JavaScript engine, called a monitor (aka a profiler). That monitor watches the code as it runs, and makes a note of how many times it is run and what types are used.

    关于 JIT 的原理,大部分来自 这篇文章,英文好的同学可自行跳转查阅。

    基本思想: 在 JavaScript 引擎中增加一个监视器(也叫分析器)。监视器(monitor)监控着代码的运行情况,记录代码一共运行了多少次、如何运行的等信息。后续遇到相同代码时,跳过解释,直接执行。

    执行步骤

    第一步:Interpreter

    使用解释器执行,当某一行代码被执行了几次,这行代码会被打上 Warm 的标签;当某一行代码被执行了很多次,这行代码会被打上 Hot 的标签

    第二步:Baseline compiler

    被打上 Warm 标签的代码会被传给 Baseline Compiler 编译且储存,同时按照行数 (Line number)变量类型 (Variable type) 被索引。当发现执行的代码命中索引,会直接取出编译后的代码给浏览器执行,从而不需要重复编译已经编译过的代码。

    第三步:Optimizing compiler

    被打上 Hot 标签的代码会被传给 Optimizing compiler,这里会对这部分带码做更优化的编译(类型假设)。在执行前会做类型检查,看是假设是否成立,如果不成立执行就会被打回 interpreter 或者 baseline compiler 的版本,这个操作叫做 “去优化”。

    JIT 会增加多余的开销:

    • 优化和去优化开销
    • 监视器记录信息对内存的开销
    • 发生去优化情况时恢复信息的记录对内存的开销
    • 对基线版本和优化后版本记录的内存开销

    所以,整体来看是一个空间换时间的优化方案。当然,通过上述三个步骤,可得知,虽然 JavaScript 是弱类型语言,随意修改变量的类型会导致 JIT 编译效率下降(命中索引概率低)。

    说在后面

    对于整个解释型语言及现有的相关优化方式(JIT)了解之后,对于后续文章要提到的 esbuild 会有更好的理解。esbuild 也被称为下一代构建工具(使用 Go 语言编写,基于 ESM)。coming soon~~

    esbuild:An extremely fast JavaScript bundler
    Our current build tools for the web are 10-100x slower than they could be. The main goal of the esbuild bundler project is to bring about a new era of build tool performance, and create an easy-to-use modern bundler along the way.

    展开全文
  • 解释型语言与编译型语言的异同

    解释型语言和编译型语言,这两个概念在我本科结束后发现如果让我自己清晰的解释,好像我并不能,最近看到一篇比较好的介绍,如下:

    1.何谓解释?何谓编译?

    这一切要从学习C语言的时候开始。C语言在执行前一定要先编译一下,如果发现语法错误,就会发出编译不通过的提示。C语言就是一种编译型的编程语言,那什么又是解释型的语言呢?这又要从我们学习MATLAB说起,当我们写完MATLAB代码之后是不是直接点执行就等待结果了,如果有那一句代码发生错误的话,程序就执行到那一句才会停下来报错,所以MATLAB是一种一边执行一边解释的语言,解释是一句一句的翻译。从而不需要预先进行编译,所以称之为解释型语言,当然python也是一种解释性语言。
    在这里插入图片描述

    2.为什么会有这两种类型的编程语言?各自的优缺点是什么?

    我想最主要的因素就是:编译性语言不如解释性语言跨平台性好,也就是说不同平台的兼容性有区别,所以才有了两种语言。
    编译性语言例如c语言:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。

    解释性语言例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java虚拟机(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台。

    这个原因说明白了之后,我们来看看两种语言有哪些代表呢?编译型语言代表有:C语言和C++。解释型语言代表有:js,php,MATLAB,java和javascript。
    如果对于java语言是解释型语言的观点难以认同,可参考这篇博主的文章,我觉得讲的很好。
    Java到底是编译型语言还是解释型语言?

    2.1 编译型与解释型的共同点

    他们都要弄成二进制代码才能执行,两类编程语言的源代码都是英文,但是我们的计算机并不认识英文,所以都要转化成二进制才能执行。

    2.2 编译型与解释型的不同点:

    区别就在于“转化的方式”不一样
    1.从运行效果上来看:编译型语言要等全部写完后通过编译器去生成一个类似*.exe的二进制文件,然后双击这个文件才可以看到效果。而解释型语言并没生成*.exe文件,而是直接生成效果,这就是我之前提到的的那个C语言和MATLAB的例子。

    2.运行的时候是否需要编译器(或解释器)的伴随:编译型语言运行的是最终生成的二进制代码,所以不需要编译器伴随。而解释型语言则一边解释一边运行,所以运行的时候很可能还有部分代码没有解释好,所以需要解释器伴随。有人会问编译器(解释器)在哪里呢?举个例子,网页的解释器就在浏览器中,所以要看HTML的效果必须用浏览器或者有编译工具在内的其他工具打开,比如:模拟浏览器的工具。

    3.执行的速度对比:编译型语言运行的已经是完全的二进制内容,运行起来十分干净利落,所以速度很快。而解释型语言运行的不一定是完全的二进制内容,因为它是一边解释成二进制一边运行。所以当它执行看出效果的时,程序后半部分还不一定解释成二进制,速度没有前者快,但是CPU的运行速度如果很快,可能看不出来,只是偶尔会看到“有点卡”的效果。原因就是它一边解释一边运行,你看到效果的后面可能还有一少半的代码没解释成二进制,所以看到的效果会是残缺的。这就是为什么有时候查看网页,先是出现一堆没有布局的文字,然后才出现那种布局好的效果。

    4.可移植性对比:编译型语言是运行二进制内容,所以一旦CPU指令系统改变,那么之前的二进制文件可能运行不了。比如,如果到其他硬件平台上运行,就可能出现错误,就需要根据该平台重新编译出新的二进制文件。所以可移植性、平台兼容性比价差。而解释型语言则没有弄成什么二进制内容,而是在需要的时候才开始编译、运行。所以它自然具有可移植性,即在任何平台都可以马上运行起来。要注意的是它的解释工具如:浏览器,本身就是编译型语言解释出来的二进制代码,所以浏览器本身不具备可移植性,是需要针对不同的平台弄出对应的浏览器最终二进制文件的,这里可别混淆。

    5.升级上对比:编译型语言弄出来的二进制文件若要升级,自然要重新下载一个新的二进制文件。所以重新下载、安装、覆盖是最大的特点。比如微信的升级,就是要重新下载、重新安装、重新覆盖,等个半天而且很耗费CPU资源,体验性就不大好。而解释型的语言只要重新写好源代码即可,用户想要最新的效果,只要刷新一下即可,所以体验性好。比如:某网站平台升级了,用户只要重新刷新一下。

    6.应用领域,编译型语言应用领域通常是那些安装软件,例如桌面上的安装软件。解释型的语言的应用领域通常是互联网、网站等那种刷新了一下就可以看到最新效果的领域。结论两类编程语言都各有优势和劣势,无绝对的正确和错误之分,大家仁者见仁智者见智。

    参考链接:https://zhuanlan.zhihu.com/p/111763425

    展开全文
  • 解释型语言代表:PHP、JS、Python、Perl 和Shell。 编译型语言代表:C、C++、Golang JAVA这门语言比较特使,它是通过jit compile(just in time compilation)先将.java编译成.class文件,然后被jvm,即Java Virtual ...
  • 1.编译型语言和解释型语言 编译型语言 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。 优点:编译器一般会有预编译的过程对代码进行优化。...
  • 从大学开始,大概接触到了C/C++、Java、ASP、C#、PHP...今天我们就来学习一下高级语言下编译、解释型语言的区别与联系,看他们是如何平分天下的。 OK,先来了解一下两者的概念。 编译型语言 使用专门的编译器(类...
  • 编译型语言与解释型语言的优缺点

    千次阅读 2019-03-09 15:20:23
    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是...
  • 编译型语言 编译型语言先要进行编译,然后转为特定的可执行文件,这个可执行文件是针对平台的(CPU类型),可以这么理解你在PC上编译一个C源文件,需要经过预处理,编译,汇编等等过程生成一个可执行的二进制文件。...
  • 而这些语言根据运行的方式不同,大体分为两种:编译型语言和解释型语言。 其中,编译型语言包括C\C++、Pascal、Go等。这里说的编译是指在应用源程序执行之前,就将程序源代码编译成汇编语言,然后进一步根据软硬件...
  • JAVA到底是解释型语言还是编译型语言是属于编译型语言。因为需要编译成位元组码以后才能在jvm上执行。JavaScript到底是解释型语言还是编译型语言编译型语言是把原始码先编译为机器码(也就是所谓的可执行程式,比如...
  • 编译型语言与解释型语言的区别及各自的优缺点

    万次阅读 多人点赞 2017-04-18 15:19:21
    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是...
  • 常见的解释型语言有:Python、JAVA、PHP、C#     传统意义上的所谓编译与解释,区别在于代码是在什么时候被翻译成目标CPU的指令。——虽然这种解释从科学上说不通,但这却是一直以来大家更认可的更约定俗成的...
  • PHP解释型还是编译型的?

    万次阅读 2018-07-25 16:21:46
    编译型语言 使用专门的编译器(类似于Windows下的Visual Studio)、针对特定平台(操作系统)将某种高级语言源代码一次性“翻译”成该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可...
  • 编译型语言在程序执行...解释型语言,是在运行的时候将程序翻译成机器语言,虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是将它编译成字节码(可以理解为一个中间语言)。在运行...
  • 解释型语言 ||按照客观系统的描述可分为两类:1.面向过程语言; 2.面向对象语言 ||按照编程范型可分为:1.命令式语言; 2.函数式语言; 3.逻辑式语言; 4.面向对象语言) 三种语言的优缺点: 机器语言: 缺点:可读性...
  • 最近各大互联网公司线上笔试,编程题目里的编译器...学习的过程中,看到这样一个争论“Java、Python谁是编译型语言,谁是解释性语言?”。我在网上查了很多资料,也结合了自己的理解,下面与大家分享一下。 总的来说...
  • 本人是php程序员,也做过一年java的开发,学习过c语言,会JavaScript,再回想起来,感觉语言之间的区别有点迷惑,所以整理一下。 1.动态语言 动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明...
  • 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度慢相对于C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如...
  • 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。 C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成...
  • 编译型语言和解释型语言 1、编译型语言 需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块...
  • 解释型语言跟编译型语言的区别

    千次阅读 2015-04-02 18:36:39
    (2)解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。 三:疑问 解释型语言就是编译成中间代码程序,在执行时靠翻译程序一起执行,可以跨平台,中间代码一样,翻译程序只要各...
  • 计算机编程语言的分类: 机器语言(二进制代码) 汇编语言(面向机器的程序设计语言) ...解释型语言 ||按照客观系统的描述可分为两类:1.面向过程语言; 2.面向对象语言 ||按照编程范型可分为:1.命令...
  • Python \解释型计算机程序设计语言

    千次阅读 2021-01-13 10:39:17
    Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)...
  • 程序语言可分为5类 1、web page script languages 就是网页代码,比如Html、javascript、Css、Asp、Php、Xml都应该属于此类(照...大家爱听谁的就听谁的好了,这个不重要) 2、Interpreted Languages(解释型语言) ...
  • python属于什么型语言

    千次阅读 2021-02-04 03:52:56
    写程序方便对做机器学习的人来说非常重要,因为经常需要对模型进行各种各样的修改,这在编译语言里很可能是牵一发而动全身的事情,而Python语言则可以用更少的时间来实现,因此Python语言几乎成为了人工智能的专属...
  • 编译型语言and解释型语言(脚本语言)

    千次阅读 2018-07-16 18:47:44
    解释型语言(脚本语言) 常见:Python、JavaScript、php等 脚本语言一般都有相应的脚本引擎来解释执行,需要解释器才能运行。脚本语言有很多种,解释器也有很多种,所以不同的脚本需要不同的解释器,只有脚本与解释...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,412
精华内容 18,964
关键字:

php 解释型语言