精华内容
参与话题
问答
  • 编译语言和解释性语言

    千次阅读 2018-10-05 14:52:33
    我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译型语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器...

    我们知道,任何编程语言编写的程序归根到底都是由底层机器的机器代码(01序列)执行的,无论是编译型语言还是解释型语言。而任何高级编程语言程序的源代码都是一个字符序列,这个字符序列到底层的01序列是通过编译器或解析器经过多次转换完成的。

    图1 编程语言的层次结构

            这个层次结构中,从高到低越来越接近于机器硬件。机器代码就是01序列,汇编语言就是描述本地机器的指令集体系结构,而高级语言就包含相应的数据结构和语法结构,更接近人类的语言习惯。因此,层次越高就越面向于人类。在计算机科学中,CPU被抽象为指令集体系结构,这个指令集描述了CPU所有完成的所有功能。所有的程序都经过编译或解释转化为这个指令集表示的机器程序。在指令集中指令可以按功能划分为:

            1. 数据传输指令,用于读写内存、寄存器。

            2. 算术与逻辑运算指令,比如:addl执行双字(32bit)的加法,andl双字的按位与。

            3. 控制流指令,用于实现高级编程语言中的分支、循环等控制结构。

            4. 过程调用指令,用于实现函数调用,分配、恢复栈帧等操作。

            任何程序都需要被转换为某个指令集的指令序列,比如下列简单的求阶乘的C程序:

     

    [cpp] view plain copy

     print?

    1. int fact_while(int n)  
    2. {  
    3.     int result = 1;  
    4.     while (n > 1) {  
    5.         result *= n;  
    6.         n = n-1;  
    7.     }  
    8.     return result;  
    9. }  


    在32bit机器上,经过gcc编译之后的x86指令序列为:

     

     

    [plain] view plain copy

     print?

    1.     movl 8(%ebp), %edx   
    2.     movl $1, %eax   
    3.     cmpl $1, %edx   
    4.     jle .L7   
    5. .L10:   
    6.     imull %edx, %eax   
    7.     subl $1, %edx   
    8.     cmpl $1, %edx   
    9.     jg .L10  
    10. .L7:  

     

            通过观察C程序的机器代码可以发现由C程序转化为机器代码,主要有数据类型和控制结构的转换。下面以x86指令集说明:

     

            1. 数据类型的转换:在底层,x86指令对于数据是不区分逻辑类型的,也就是不分int,float,double。所有的数据按照其所占的字节数被归类为字(16个字节,Word)、双字(32个字节,Double Words)、四字(64个字节,Quad Words)。一个指令操作的数据类型是由这个指令的后缀表示的,比如mov指令,movw操作字,movl操作双字。也就是说高级语言的程序中的不同数据类型反映到底层指令集上主要体现是指令的不同。比如,将上述C程序中的result类型改为short,在相应的汇编代码中的mov指令会由movl转换为movw。当然,还有一个问题就是C语言中的具体数据类型,在机器代码中是如何存储表示的。这应该是gcc编译器的职责,比如对于int,首先gcc需要知道底层指令集如何编码int,采用什么编码方式,字节顺序是Big-endian还是Little-endian等。在知道底层的实现方式后gcc才能将表示整型数字的字符串编码为相应的二进制形式。而对于数组、struct和union这些数据结构会转化为相应的内存地址加偏移量的形式。

            2. 控制结构的转换:控制结构就是执行指令的流程。在x86中,所有的指令集都是顺序执行。要实现分支、循环等结构,必须具备go形式的跳转指令,以及相应的条件判断指令。CPU中有一组条件码寄存器,指示算术或逻辑运算的状态(计算结果是否溢出、为0或者是负数等)。执行条件运算指令可以测试一个条件,比如"cmpl $1, %edx"比较直接数1与寄存器%edx中存放的数的大小,并将结果存入条件码寄存器中。接下来执行条件跳转指令,根据条件码寄存器中的状态进行判断是否进行跳转。比如“jg .L10”是在前一条的cmpl指令结果返回大于的情况跳转到L10,否则执行下一条指令。

            当然,在进行函数调用时,还要在底层用机器码对其进行描述。我们知道,计算机科学中用栈来实现函数的调用(叫做调用栈),栈中存放栈帧。每一次函数调用对应一个栈帧,栈帧中包含该方法的局部变量、保存的寄存器值等数据。这样函数的调用和返回就对应着栈帧的入栈和出栈。CPU的寄存器组中,有两个专门用于实现方法调用,分别是%esp和%ebp。%esp是栈指针寄存器,存放当前函数栈栈顶的内存地址。%ebp是帧指针寄存器,在%esp和%ebp之间的内存地址序列就对应于当前函数的栈帧。由于函数调用、返回与栈帧的关系很密切,所以可以将以此函数调用过程描述为:

            1. 初始化被调用函数的栈帧,并将其入栈。也就是调用函数过程,通过call指令实现。

            2. 执行被调用函数。

            3. 恢复调用函数的栈帧,将被调用函数的栈帧出栈。也就是函数返回的过程,通过ret指令实现。

            对于初始化、恢复栈帧实际上都是%esp和%ebp的调整,还要包括传参和返回值的问题,这些都是由编译器实现的。

            上面介绍了C语言和机器语言的关系,下面看一下其他类型语言的实现机制。首先,我们可以把编程语言分为编译型语言、解释型语言和虚拟机语言。编译型语言直接被编译成本地机器代码,比如C、C++。解释型语言是通过解释器执行,比如JavaScript、shell、Python等。虚拟机语言运行在虚拟机上,需要被编译成虚拟机代码,由虚拟机执行,比如Java。虽然python也有自己的虚拟机,但是不需要编译,所以把它归类为解释型语言。

    图2 编程语言实现结构

            通过上文的分析、我们知道对于一门语言最重要的是数据类型、控制结构和语法结构以及系统调用。从上图可以看出,C和C++更接近于底层硬件,但是不能像汇编语言一样可以直接访问寄存器等硬件。而python和java相对于C和C++的抽象层次又高了一层,它们不能通过指针直接访问内存。从机器语言->汇编语言->系统语言(C和C++)->解释型语言(python)和虚拟机语言(java),抽象层次越来越高,越贴近于人的思维,不需要考虑那么多细节;同时,程序员的自由度和程序的运行速度越来越低。下面从低向高j讨论一下。

            在底层,汇编语言会经过汇编器转换为机器代码。比如,通过gcc编译C程序时,会调用汇编器进行汇编。通过汇编器和汇编语言这一层次,可以很好的隔离底层机器硬件的实现细节。不同的处理器具有与之对应的汇编器,将汇编语言汇编成该处理器支持的指令集。这样就是实现了汇编语言这一层的移植性。

            在C和C++系统编程语言这一层,会通过编译器完成语言元素到汇编语言的映射。比如前文描述的,数据类型、控制结构、函数调用等结构的转换。

            python是解释型语言,它通过python解释器实现向底层语言的映射。我们知道python虚拟机是由C语言编写的,所以python程序会转化为C程序而执行。比如,python中的所有对象都会在C中有对应的PyObject结构体。python的list、dict等数据类型也要在C中有对应的表示。而像生成器、迭代器等语法结构需要相应的支持。

            而虚拟机是模拟一个指令集的程序,所以它自身有一套独立于具体硬件、操作系统的指令集。需要通过底层语言实现这套指令集。虚拟机本身也有自己的数据类型系统、语言结构等。比如,java虚拟机上支持的数据类型有基本数据类型和引用类型,也支持tableswitch和lookupswitch等实现switch语法结构的字节码指令。对于这些语言元素映射到底层语言的实现方式可以不同的方式。首先是解释器模式转化为C++,还有就是JIT直接编译成本地机器代码。

            像java这样的虚拟机语言会被编译器编译成虚拟机本地的机器代码,然后再虚拟机上执行,这里就需要向javac编译器实现java语言的数据类型、语言结构和java虚拟机上的数据类型、语法结构的映射。

            通过谈论,可以看出编译器和解释器以及虚拟机在编程语言中的重要性,它们都是编程语言可以在计算机上运行的基石。一门编程语言的编译器、解释器或者虚拟机可以很大程度上影响这门语言的执行效率。因为它们在进行语言转换时会进行很多的优化以提高执行效率。这也是为什么JVM上有那么多优秀的语言,因为JVM很强大。所以,要深入语言的底层,要学会编译器、解释器和虚拟机的实现,这方面还需要下功夫啊。

    --------------------- 本文来自 zhangzker 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zhangzker/article/details/53171132?utm_source=copy

    展开全文
  • 动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP、ASP、Python、SQL、JavaScript、Unix Shell等等。 动态语言的优势:思维不受束缚,可以...

    本人是php程序员,也做过一年java的开发,学习过c语言,会JavaScript,再回想起来,感觉语言之间的区别有点迷惑,所以整理一下。

    1.动态语言

    动态语言是在运行时才确定数据类型的语言。变量使用之前不需要类型声明,通常变量的类型是被赋值的那个值的类型。 例如PHP、ASP、Python、SQL、JavaScript、Unix Shell等等。

    动态语言的优势:思维不受束缚,可以任意发挥,把更多的精力放在产品本身上。

    2.静态语言

    静态语言是在编译时变量的数据类型就可确定的语言,多数静态类型语言要求在使用变量之前必须声明数据类型。 例如:C、C++、Golang、Java、C#等。

    静态语言优势:由于类型的强制声明,使得IDE有很强的代码感知能力,所以在实现复杂的业务逻辑、开发大型商业系统、以及那些生命周期很长的应用中,依托IDE对系统的开发很有保障;由于静态语言相对比较封闭,使得第三方开发包对代码的侵害性可以降到最低。

    3.解释型语言

    我们都知道能让机器识别的是机器语言,也就是01这样的二进制代码,高级语言机器是不能识别的。解释型语言是不需要在运行前进行编译成机器语言,而是程序在运行时先翻译成中间代码,再由解释器对中间代码进行解释运行。这样解释型语言每执行一次就要翻译一次,效率比较低。

    常见的解释型语言包括:Java、C#、PHP、JavaScript、Python、VBScript、Perl、Ruby、MATLAB等。

    解释型语言的优点

    ①解释型语言提供了极佳的调试支持。

    ②解释器比编译器容易实现。

    ③中间语言代码的大小比编译型可执行代码小很多。例如,C/C++的.exe文件要比同样功能的Java的.class文件大很多。

    ④可移植性好,只要有解释环境,可以在不同的操作系统上运行。比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器系统上运行。

    ⑤解释型语言也可以保证高度的安全性——这是互联网应用迫切需要的。

    解释型语言的缺点

    ①运行需要解释环境,程序严重依赖平台。

    ②运行起来比编译的要慢,占用的资源也要多一些,代码效率低。因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

    ③由于解释型应用的decode-fetch-execute(解码-抓取-执行)的周期,它们比编译型程序慢很多。

    4.编译型语言

    运行编译型语言是相对于解释型语言存在的,编译型语言首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。

    常见的编译型语言有:C、C++等。

    编译型语言的优点:运行速度快,代码效率高,编译后程序不可以修改,保密性好。

    编译型语言的缺点

    ①代码需要经过编译方可运行,可移植性差,只能在兼容的操作系统上运行。

    ②安全性不如解释性语言,一个编译型的程序可以访问内存的任何区域,并且可以对你的PC做它想做的任何事情(大部分病毒是使用编译型语言编写的)。

    5.脚本语言

    脚本语言又被称为扩建的语言,或者动态语言,是一种编程语言,用来控制软件应用程序,脚本通常以文本保存,只在被调用时进行解释或编译。

    脚本语言有:PHP、Python、JavaScript、Lua、Scala、VBScript,ActionScript,MAXScript,ASP,JSP,SQL,Perl,Shell,Ruby,JavaFX,AutoIt等

    脚本语言是一种解释性的语言,它不象c/c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,由解释器来负责解释。

     

    参考资料:

    http://baijiahao.baidu.com/s?id=1581982663991093225&wfr=spider&for=pc

    https://baike.baidu.com/item/%E8%84%9A%E6%9C%AC%E8%AF%AD%E8%A8%80/1379708

    https://blog.csdn.net/u014647208/article/details/78329187

    https://blog.csdn.net/GIRLDWH0715/article/details/70228553

    展开全文
  • 编译型语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译为机器语言的文件比如exe文件,以后要运行就不需要重新编译了,直接使用编译好的结果(exe文件)就好了,编译型语言的程序执行效率高。...

    (整理自以前的博客)
    任何语言都必须翻译成机器语言,计算机才能运行高级语言编写的程序。 翻译的方式有两种:一个是编译,一个是解释。

    1.编译型语言
    编译型语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译为机器语言的文件比如exe文件,以后要运行就不需要重新编译了,直接使用编译好的结果(exe文件)就好了,编译型语言的程序执行效率高。
    如:c/c++

    2.解释型语言
    解释型语言不需要编译,在运行程序的时候才翻译,比如解释型basic语言,专门有一个解释器能够直接执行basic程序,每个语言都是在执行的时候才翻译。解释型语言每执行一次就要翻译一次,效率比较低,但是跨 平台性好。
    如:Java,c#,basic,Python

    3.脚本语言

    • 脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间
    • 脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些。
    • 与程序代码的关系:脚本也是一种语言,其同样由程序代码组成
      注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。
    • 脚本语言是一种解释性的语言
      例如vbscript,javascript,installshield script等等,它不象c/c++等可以编译成二进制代码,以可执行文件的形式存在。脚本语言不需要编译,可以直接用,由解释器来负责解释,不过每次都需要翻译,执行速度慢。
    • 脚本语言一般都是以文本形式存在,类似于一种命令
      举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.js为扩展名的文件。
      你为.js文件的编写指定了一套规则(语法),当别人编写了.js文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言。
      如:vbscript,javascript,ASP,PHP,PERL,Nuva
    • 脚本语言两大特性:一、解释执行 二、执行文件为文本

    4.解释型语言和脚本语言的区别
    - 脚本语言是解释型的语言,也就是解释型语言包括脚本语言。
    - 解释语言是说解释执行的语言,但执行的代码并不一定是文本格式的。
    - 脚本语言的程序是文本文件,并且是解释执行的。

    展开全文
  • 而这些语言根据运行的方式不同,大体分为两种:编译型语言和解释型语言。 其中,编译型语言包括C\C++、Pascal、Go等。这里说的编译是指在应用源程序执行之前,就将程序源代码编译成汇编语言,然后进一步根据软硬件...

    我们常用的高级语言有很多种,比较出名的有C\C++、Python、PHP、Go、Pascal等。而这些语言根据运行的方式不同,大体分为两种:编译型语言和解释型语言

    其中,编译型语言包括C\C++、Pascal、Go等。这里说的编译是指在应用源程序执行之前,就将程序源代码编译成汇编语言,然后进一步根据软硬件环境"翻译"成目标文件。一般称完成编译工作的工具为编译器。而解释型语言,在程序运行时才被“翻译”为机器语言。但是执行一次“翻译”一次,所以执行效率较低。解释器的工作就是解释型语言中,负责“翻译”源代码的程序

    我们对编译型语言与解释型语言的区别的理解,立足于源代码被编译成目标平台CPU指令的时机。对于编译型语言,编译结果已经是针对当前CPU体系的指令;而解释型语言,需要先编译成中间代码,再经由该解释型语言的特定虚拟机,翻译成特定CPU体系的指令被执行。解释型语言是在运行过程中,翻译为目标平台的指令。常说解释型语言“慢”,主要也是慢在这里

    总结:
    编译型语言与解释型语言的区别的理解立足源代码被编译成目标平台CPU指令的时机
    编译型:运行前.编译结果就已经是机器语言
    解释型:运行过程中,才翻译成机器语言,执行一次“翻译”一次
    更深的的提一下;到AST生成,两者的过程都很类似,但是AST之后就开始产生差异了.

    展开全文
  • 编译型语言and解释型语言(脚本语言)

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

    万次阅读 多人点赞 2015-12-27 19:52:28
    一、编译型语言 定义:指用专用的编译器,针对特定的操作平台(操作系统)将某种高级语言源代码一次性翻译成可被硬件平台直接运行的二进制机器码(具有操作数,指令、及相应的格式),这个过程叫做编译;编译好的可...
  • 什么是编译型语言和解释型语言

    万次阅读 多人点赞 2018-08-01 21:42:16
    什么是编译型语言和解释型语言 计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言,所以使用任何高级语言编写的程序若想被计算机运行,都必须将其转换成计算机语言,也就是机器码。 ...
  • Java到底是编译型语言还是解释型语言?

    万次阅读 多人点赞 2017-05-19 09:05:22
    一、你可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。  二、你可以说它是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就...
  • 解释型语言和编译型语言

    千次阅读 2019-06-22 16:04:52
    解释型语言和编译型语言 编程语言从执行原理上可分为编译型语言和解释型语言。 比如常见的C语言、C++等都是编译型语言 Java、Python等都是解释型语言 计算机不能直接理解机器语言以外的语言,因此需要将我们写的代码...
  • 编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度慢相对于C/C++ 等都是编译型语言,而Java,C#等都是...
  • 编译型语言与解释型语言的真正区别

    万次阅读 多人点赞 2018-10-20 13:02:00
    编译型语言与解释型语言的真正区别 一、编译型语言与解释型语言的必需知识点 二、Python和Java解释型语言的主流执行方式 三、进而可推之解释性语言和编译型语言的优缺点 一、编译型语言与解释型语言的必需知识点...
  • 编译型语言 编译型语言先要进行编译,然后转为特定的可执行文件,这个可执行文件是针对平台的(CPU类型),可以这么理解你在PC上编译一个C源文件,需要经过预处理,编译,汇编等等过程生成一个可执行的二进制文件。...
  • 解释型语言和编译型语言的区别

    万次阅读 多人点赞 2013-11-24 17:58:28
    解释型语言和编译型语言的区别 首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级...
  • 什么是编译型,什么是解释性,JSP,ASP都属于解释性语言 ... 编译型 = 先把程序整个转化为可直接运行的格式 ...JSP 和ASP是解释的,java是jvm解释执行的,虽然有JIT,但还是不能算...编译型语言和解释型语言 http:
  • 1 编译型语言和解释型语言的含义  大家都知道,代码语言级别主要有机器语言、汇编语言、和高级语言。而高级语言主要又分为编译型语言和解释型语言,下面我们主要讨论这两种语言的含义。  编译型语言指使用专门的...
  • 编译型语言 编译型语言和汇编语言一样,有一个负责翻译的程序来对我们编写的源代码进行转换,生成相对应的可执行代码。这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler...
  • 编译型语言解释型语言的优缺点

    千次阅读 2019-03-09 15:20:23
    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是...
  • Python程序的执行过程(解释型语言和编译型语言

    万次阅读 多人点赞 2018-03-30 11:41:10
    Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是Python是一门解释型语言,我就这样一直相信下去,直到发现.pyc文件的存在,如果真是解释型语言,那么生成的.pyc文件的是什么呢?c应该是...
  • 编译型语言和解释型语言各自的特点和区别,Python的解释器? 编译型语言:将源代码通过编译器编译生成可执行文件(机器指令),再由机器运行机器码 解释型语言:通过解释器逐行解释每一句源代码 打个比方: 编译型...
  • 前提概要 开发人员编写的是源代码是人类语言,我们可以理解。但是对于计算机硬件(CPU),源代码无法理解,根本执行不了。在程序真正的运行之前必须
  • 解释器(科普) 计算机不能直接理解任何除机器语言以外的语言,所以必须把程序员写的程序语言翻译成机器语言,计算机才能执行程序。...解释型语言源代码→解释器(逐行解释每一行源代码)→操作系统→CPU...
  • 编译型语言解释型语言的区别及各自的优缺点

    万次阅读 多人点赞 2017-04-18 15:19:21
    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java,C#等都是解释型语言。 虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成机器语言,而是...
  • 解释型语言和编译型语言概述 计算机是不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言编译成机器语言才能执行程序。程序语言翻译成机器语言的工具,被称为翻译器。 翻译器翻译的方式有...
  • 编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,虽然Java程序在运行之前也有一个编译过程,但是并不是将程序编译成...
  • 【编译型语言和解释型语言的执行原理】 [1] 大致区别 编译型: 例子:C 、 C++ 、Go 编译:程序的源代码首先翻译成汇编语言,再用编译器完成编译工作成为目标文件; 通俗:把做好的源程序全部编译成二进制代码的可...
  • Java语言是编译型语言还是解释型语言? 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Java语言看似是编译型的,因为Java程序代码的确是需要经过编译的 还...
  • 编译型语言解释型语言

    千次阅读 2018-08-24 10:41:55
    突然知道了编译型语言和解释型语言的不同。 源于godaddy服务器(经济版)上不允许你安装其他的软件,一切都是定制好的,安装好的php、apache等,都通过cPanel的一个管理界面进行管理,你可以手动上传app的代码,也...
  • 1、C++C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才能够执行...
  • Python语言是编译型语言还是解释型语言? 我们都知道,编程语言从程序执行过程分,分为编译型语言和解释性语言 什么是编译型语言和解释型语言? Python是一种解释型语言 Python程序源码不需要编译,可以直接从源...

空空如也

1 2 3 4 5 ... 20
收藏数 273,185
精华内容 109,274
关键字:

编译型语言