导航:首页 > 源码编译 > 编译文件一次性翻译

编译文件一次性翻译

发布时间:2022-10-22 19:50:23

㈠ 关于“编译型语言”和“解释性语言”的区别

1、程序控制权不同:

对于解释性语言而言,程序运行时的控制权在解释器(jre,.net)而不再用于程序。编译型语言对于编译器而言,运行时的控制权在用户程序。

2、运行速度不同:

一些网页脚本,服务器脚本以及辅助开发接口这样的对速度要求不高,对不同系统的兼容性有一定要求的程序则通常使用解释性语言,如java、JavaScript、VBScript、Perl、python、Ruby、Matlab等等。

编译语言由于程序执行速度快,同等条件下对系统的要求比较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++,Pascal/Object Pascal(Delphi)等都是编译型语言。

3、移植性不同:

解释型语言,例如Java语言,Java程序首先通过编译器编译成class文件,如果在Windows平台上运行,则通过Windows平台上的Java虚拟机(VM)进行解释。如果运行在Linux平台上,则通过Linux平台上的Java虚拟机进行解释执行。

所以说能跨平台,前提是平台上必须要有相匹配的Java虚拟机。如果没有Java虚拟机,则不能进行跨平台。

编译型语言,例如C语言,用C语言开发程序后,需要通过编译器把程序编译成机器语言(即计算机可以识别的二进制文件,因为不同的操作系统识别的二进制文件是不同的),所以C语言程序进行移植后,需要重新编译(如Windows编译成ext文件,Linux编译成erp文件)。

㈡ python师先编译后解释的吗

1、C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,计算机是不能识别高级语言的,所以,必须要通过编译,链接等手段,将.c文件转换成可执行文件,可执行文件就是纯二进制文件,然后计算机才能够执行。

unix>./p:(p是可执行文件)

上述命令的过程,是外壳(shell)调用操作系统一个叫加载器的函数,它拷贝可执行文件p中的代码和数据到存储器,然后将控制转移到这个程序的开头。

2、

1. Python是一门解释型语言?

我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

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

计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。

编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。

解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。

用Java来举例,Java首先是通过编译器编译成字节码文件(不是二进制码),然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

总结:将由高级语言编写的程序文件转换为可执行文件(二进制的)有两种方式,编译和解释,编译是在程序运行前,已经将程序全部转换成二进制码,而解释是在程序执行的时候,边翻译边执行。

3. Python到底是什么

其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。

熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:

javac hello.java(编译的过程)

java hello(解释的过程)

只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。

4. 简述Python的运行过程

在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。

当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

总结:Python也是先编译后解释的一门语言,当python程序运行时,编译的结果是保存在内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。也就是说保存,pyc文件是为了下次再次使用该脚本时避免重复编译,以此来节省时间。也就是说,只执行一次的脚本,就没必要保存其编译结果pyc,这样只是浪费空间。下面举例解释。

5、运行一段Python程序

我们来写一段程序实际运行一下:


不用仔细看代码,我们可以很清楚地看到原理,其实每次在载入之前都会先检查一下py文件和pyc文件保存的最后修改日期,如果不一致则重新生成一份pyc文件。

8. 写在最后的

其实了解Python程序的执行过程对于大部分程序员,包括Python程序员来说意义都是不大的,那么真正有意义的是,我们可以从Python的解释器的做法上学到什么,我认为有这样的几点:

A.其实Python是否保存成pyc文件和我们在设计缓存系统时是一样的,我们可以仔细想想,到底什么是值得扔在缓存里的,什么是不值得扔在缓存里的。只有要重用的模块才是值得编译成pyc文件的。

B. 在跑一个耗时的Python脚本时,我们如何能够稍微压榨一些程序的运行时间,就是将模块从主模块分开。(虽然往往这都不是瓶颈),那么再次运行时,就可以不用编译了,直接使用上次编译后的结果。

C. 在设计一个软件系统时,重用和非重用的东西是不是也应该分开来对待,这是软件设计原则的重要部分。

D. 在设计缓存系统(或者其他系统)时,我们如何来避免程序的过期,其实Python的解释器也为我们提供了一个特别常见而且有效的解决方案。



总结:Python是编译+解释型的语言,执行的时候是由Python解释器,逐行编译+解释,然后运行,因为在运行的过程中,需要编译+解释,所以Python的运行性能会低于编译型语言,比如C++。为了提高性能,Python解释器,会将模块(以后要重用的脚本文件放在模块里)的编译+解释的结果,保存在.pyc中。这样下次执行的时候,就省了编译这个环节。提高性能。一次性的脚本文件,解释器是不会保存编译+解释的结果,也就是没有.pyc文件。

㈢ 一次性翻译,之后不再需要源代码的执行源程序方式称为什么方式

一次性翻译,之后不再需要源代码的执行源程序方式称为“编译”方式。

㈣ 简述高级语言源程序的两种翻译方式的特点

解释方式和编译方式。

所谓解释方式就是由计算机专业人员事先编好一个解释程序构成一个解释系统存放到计算机内,当把高级语言程序输入到计算机内并运行程序之后,解释系统就会对它进行解释,解释一句执行一句。也就是说,边解释边执行。这与日常生活中的口译类似。

所谓编译方式就是由计算机专业人员事先编好一个编译程序构成一个编译系统存放到计算机内,当把高级语言程序输入到计算机内并运行程序之后,编译系统就把它整个翻译为目标代码程序,然后执行目标代码程序。这与日常生活中的笔译类似。

高级语言分类:

1、命令式语言。这种语言的语义基础是模拟“数据存储/数据操作”的图灵机可计算模型,十分符合现代计算机体系结构的自然实现方式。其中产生操作的主要途径是依赖语句或命令产生的副作用。

2、函数式语言。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如 Lisp、Haskell、ML、Scheme 、F#等。

3、逻辑式语言。这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最着名的逻辑式语言是 Prolog。

以上内容参考网络-高级语言

㈤ 在程序设计中,编译与解释的区别是什么

首先,我们编写的程序现在一般都是用高级语言编写的,如c/c++ 以及面向对象的visual 系列;我们编写的程序计算机是不能直接执行的,因为计算机只能执行二进制程序.因此要经过一个将我们写的代码翻译成二进制的过程. 完成这个过程一般有两种方式:1.解释方式 2. 编译方式 1.解释方式是每执行一句就翻译一句即边执行边解释.这种方式每次运行程序时都要重新翻译整个程序,效率较低,执行速度慢,如QB,不过现在几乎没有人再用这种低效的方式的设计语言了. 2.编译方式是在程序第一次执行前就先执一个全部的翻译过程,然后每次执行的时候就可以直接执行这个翻译好的二进制文件了,这样的程序只需要翻译一次,效率明显要高很多,现在的大多数语言都是这种方式,网页中的asp.net 采用的也是这种方式.

㈥ 计算机有解释器为什么还要有编译器 明显是编译器要快捷于解释器啊…………

下面这个回答可以参考:

编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;
而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.
这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

编译是将源程序翻译成可执行的目标代码,翻译与执行是分开的;而解释是对源程序的翻译与执行一次性完成,不生成可存储的目标代码。这只是表象,二者背后的最大区别是:对解释执行而言,程序运行时的控制权在解释器而不在用户程序;对编译执行而言,运行时的控制权在用户程序。

解释具有良好的动态特性和可移植性,比如在解释执行时可以动态改变变量的类型、对程序进行修改以及在程序中插入良好的调试诊断信息等,而将解释器移植到不同的系统上,则程序不用改动就可以在移植了解释器的系统上运行。同时解释器也有很大的缺点,比如执行效率低,占用空间大,因为不仅要给用户程序分配空间,解释器本身也占用了宝贵的系统资源。

㈦ 编译程序对源程序的语言是解释一句执行一句

解释型语言
计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。
翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。
编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object Pascal(Delphi)、VB等基本都可视为编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、MATLAB 等等。
但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统,主要体现在一些新兴的高级语言上。

㈧ 编译是将整个源程序代码文件一次性翻译成目标程序代码,最终生成可执行文件,对么

正确。
编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。
编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。

㈨ Java的“一次编译到处运行”

JAVA的跨平台是有条件的!
就是在各个平台必须安装有JAVA运行的支持环境(Sun
Java
Runtime
Environment
)。
JAVA编译的结果是一种中间码,需要运行环境解释并执行。
而EXE生成的是最终二进制代码,只适合于某个特定的平台。
一般的开发都是在WINDOWS环境下,如果拿到LINUX之类的平台下显然不支持。
而现在的操作系统好象没有不支持JAVA的。

㈩ 每次程序运行时随翻译执行的执行源程序方式称为

每次程序运行时随翻译随执行源程序方式称为解释,类似实时的同声传译。而编译是一次性翻译,之后不再需要源代码,是将源代码一次转换成目标代码的过程。

程序运行时之前,将程序的所有代码编译为机器代码,再运行这个程序。然后每次执行的时候就可以直接执行这个翻译好的二进制文件了,这样的程序只需要翻译一次,效率明显要高很多,现在的大多数语言都是这种方式。

(10)编译文件一次性翻译扩展阅读:

注意事项:

对于文本编辑框,一定要判断是否含有非法字符。对于数字型一定要判断是否含有非数字。对于字符型,一定要判断是否在允许的字符内。

对于在某一个期间,一定要判断前面一个日期是否大于后面一个日期。还要判断2月份的日期。

对于路径选择,一定要判断路径是否合法,是否可以访问。输入的路径长度是否超过了最大字符长度。

对于要写进数据库的值,一定要判断是否超过了字段定义的长度。

阅读全文

与编译文件一次性翻译相关的资料

热点内容
自己购买云主服务器推荐 浏览:419
个人所得税java 浏览:761
多余的服务器滑道还有什么用 浏览:189
pdf劈开合并 浏览:28
不能修改的pdf 浏览:751
同城公众源码 浏览:488
一个服务器2个端口怎么映射 浏览:297
java字符串ascii码 浏览:78
台湾云服务器怎么租服务器 浏览:475
旅游手机网站源码 浏览:332
android关联表 浏览:945
安卓导航无声音怎么维修 浏览:332
app怎么装视频 浏览:430
安卓系统下的软件怎么移到桌面 浏览:96
windows拷贝到linux 浏览:772
mdr软件解压和别人不一样 浏览:904
单片机串行通信有什么好处 浏览:340
游戏开发程序员书籍 浏览:860
pdf中图片修改 浏览:288
汇编编译后 浏览:491