首页 > 其他分享 >编译型还是解释型语言区分?开发语言类型的简单区分

编译型还是解释型语言区分?开发语言类型的简单区分

时间:2023-02-20 22:46:39浏览次数:39  
标签:解释 Java 语言 区分 机器码 编译 运行

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

1.1 编译型语言

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

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

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

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

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

 

1.2 解释型语言

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

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

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

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

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

 

1.3 混合型语言

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

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

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

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

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

 

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

2.1 动态类型语言

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

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

 

2.2 静态类型语言

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

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

 

3.动态语言和静态语言

3.1 动态语言

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

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

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

 

3.2 静态语言

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

 

标签:解释,Java,语言,区分,机器码,编译,运行
From: https://www.cnblogs.com/lizexiong/p/17139266.html

相关文章

  • 大语言模型: 新的摩尔定律?
    译者按:最近一段时间,ChatGPT作为一个现象级应用迅速蹿红,也带动了对其背后的大语言模型(LLM)的讨论,这些讨论甚至出了AI技术圈,颇有些到了街谈巷议的程度。在AI技术圈......
  • 地理图形标记语言GML的架构及范例
    一、前言在信息高速公路的时代,如何能在不同的GIS系统间实时分享资料,是刻不容缓的问题,现在该问题已经有了一个很好解决案,那就是以XML为基础的GIS编码标准,称为地理图形标记......
  • C语言语法大纲
    ......
  • c语言程序填空项目
    1.头文件引用2变量的定义和初始化 3常用库函数的使用 4运算符和表达式的使用5实现顺序结构程序设计6用if语句switch语句实现分支结构的程序设计 7用whil......
  • 打卡c语言
    只要是整数,内存中储存的都是二进制的补码正数--原码,反码,补码 相同负数:原码    ---》 反码    --> 补码-2100000000000000000000000000000010......
  • C语言学习中比较奇怪的问题(1)int a = 1 ; int sum = (++a) + (++a) + (++a) ;
    题目:inta=1;  intsum=(++a)+(++a)+(++a); 当前想法:sum=2+3+4= 9 结果:   sum=10 原因:key——寄存器第①个++a......
  • Intel汇编语言程序设计笔记
    ⦁2^8=2562^10=10242^16=65536[二进制]1111=F[16进制]⦁ 有符号二进制整数的最高有效位[MSB]表示数的符号,0=正数1=负数⦁ 数据的意义,由其数据类型决定,单纯的数字没......
  • ASR编译说明
    @目录简介下载DS5破解获取许可证SVNPerlGNUMakeMicrosoftVisualC++Redistributable微软运行库合集验证验证DS5验证Perl验证gnumake编译简介ASR编译环境搭建步骤详细......
  • C语言:任意输入三行四列12个整数,如果某行第1个数 2个数都大于等于55,并且第3 4个数都大
    #include<stdio.h>//任意输入三行四列12个整数,如果某行第1个数2个数都大于等于55,并且第34个数都大于等于90,并且该行四个数的和大于等于310则输出"YES"//否则输出"NO......
  • VPP 2110版本源码编译安装
    原文地址:https://www.cnblogs.com/liqinglucky/p/vpp.html一介绍官方文档:VPP/WhatisVPP?-fd.ioVPP平台是一个提供了交换机/路由器(switch/router)开箱即用(out-of......