编译与解析
① 编译和解释程序都是什么
编译(compilation , compile)
1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
解释执行
1.解释执行不依赖于平台,因为编译器会根据不同的平台进行解析。例如JS语言无论在windows平台还是在unix平台都可以使用。故可移植性强.
2.使用解释执行的程序我们一般称为解释程序。它将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。如在终端上打一条
命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。这种工
作方式非常适合于人通过终端设备与计算机会话.
直接点吧,编译执行就是先将程序翻译成机器代码,以后运行的都是机器代码.解释执行就是,代码跟着走,每运行一次,编译一次.解释执行也分为两种,一种是执行一句,编译一句,一种是编译完全部代码,再执行.
② 什么叫解析语言,什么叫编译语言,两者区别是什么啊
像脚本一般都属于解释型语言,即每次执行时,编译器都会重新编译一次;
像一般的高级语言都属于编译语言,它只用编译一次,即它编译器会将他们编译成机器语言,然后有操作系统执行。
最大的区别在于后则的执行效率普遍比前者要快。
③ 第4篇:Cython编译细节详解
深入解析Cython编译原理与实践
为了深入理解Cython的编译原理,我们将通过创建质数列表算法的示例,来展示如何将Cython源文件编译为扩展模块。在着手之前,确保具备扎实的C/C++基础。
Cython源文件格式为模块名称加上.pyx扩展名,如名为“primer”的模块,对应的源文件为“primer.pyx”。值得注意的是,Cython代码需要进行编译,这分为两个阶段:首先编写.pyx文件,然后使用多种方法将其转换为扩展模块。
编译过程可从命令行执行,涉及使用cython或cythonize工具。cython解析器提供了多种选项,其中最常用的指令是将primer.pyx源代码转换为C代码。这将生成一个名为primer.c的文件,随后需要使用平台特定的编译器选项进行编译。另外,cythonize命令也能够简化这一过程,创建primer.c文件,并执行编译,将生成primer.cpython-36m-x86_64-linux-gnu(Windows为primer.cpython-36m-win64.pyd)文件,供导入使用。
在使用cythonize编译时,可指定-a命令行选项,生成编译后的html格式分析报告,报告中黄色区域代表Cython编译器已将代码转换为C/C++代码。若变量和函数使用cdef关键字指定数据类型,代码将几乎全转换为C代码,分析报告中带有“+”号的行表示cdef修饰的语句被转换。
值得注意的是,使用CPython内置容器类型如str、list、tuple、set时,Cython会将其编译为特定的PyObject子类型,这可能导致额外的时间开销。为优化性能,应尽量在Cython函数内部指定C语义的容器类型,并使用Cython内置的libcpp包中的C++数据类型。
通过setup.py文件编译Cython代码提供了一种直接方法,将.pyx文件传递给Extension构造函数。创建关联的setup.py文件,可简化编译过程。同时,为确保与pip兼容,可告知pip有关扩展的依赖关系。
虽然Cython提供了强大的性能提升能力,但对于大规模部署或复杂配置需求的场景,可能需要更深入的配置和优化。本文仅介绍基础的Cython编译细节,对于日常简单的Python性能优化已足够。如需更深入了解复杂场景下的配置,可参考后续文章或官方文档。
使用pyximport编译并非推荐做法,尤其是对于Jupyter交互环境,因其可能存在兼容性和性能问题。建议采用其他编译方法以确保更好的用户体验和性能。
总结:Cython编译细节涵盖了从源文件编写到最终模块构建的全过程,通过了解和应用这些原理,可有效提升Python代码的执行效率。尽管Cython提供了强大的功能,但在特定情况下,还需结合实际需求和配置进行深入优化。
④ 将高级语言编写的程序翻译成机器语言程序,采用的两种翻译方式是( )。
正确答案是A,编译和解释。
原因是:编译和解释是将高级语言编写的程序翻译成机器语言程序的两种方式。解释方式是将源程序逐句解释执行,即解释一句执行一句,因此在解释方式中不产生目标文件。
例如,早期的BASIC语言采用的就是“解释”方式。编译方式是将整个高级语言编写的源程序先翻译成机器语言程序,然后再生成可在操作系统下直接运行的执行程序,通常会产生目标程序。
(4)编译与解析扩展阅读
程序设计语言的类型:
1、命令式语言。这种语言的语义基础是模拟“数据存储/数据操作”的图灵机可计算模型,十分符合现代计算机体系结构的自然实现方式。其中产生操作的主要途径是依赖语句或命令产生的副作用。现代流行的大多数语言都是这一类型,比如Fortran、Pascal、Cobol、C、C++、Basic、Ada、java、C#等,各种脚本语言也被看作是此种类型。
2、函数式语言。这种语言的语义基础是基于数学函数概念的值映射的λ算子可计算模型。这种语言非常适合于进行人工智能等工作的计算。典型的函数式语言如Lisp、Haskell、ML、Scheme、F#等。
3、逻辑式语言。这种语言的语义基础是基于一组已知规则的形式逻辑系统。这种语言主要用在专家系统的实现中。最着名的逻辑式语言是Prolog。
4、面向对象语言。现代语言中的大多数都提供面向对象的支持,但有些语言是直接建立在面向对象基本模型上的,语言的语法形式的语义就是基本对象操作。主要的纯面向对象语言是Smalltalk。
⑤ 解释和编译有什么区别
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
编译能产生exe文件,解释也能吗。
如果都能,那他们的exe文件有什么区别
解析:
解释(intepreter)和编译(pile)的区别:
1. 解释 -- 运行时必需用解释器把程序一行一行执行, 运行比较慢, 因为是运行时才把程序解析并执行. 优点是移植性, 不同的机器只要有解释器就可以运行相同的程序.
2. 编译 -- 先把程序转成 CPU 跟操作系统认识的机械码, 执行程序就是直接执行机械码, 所以速度比较快, 但因为是机械码 (加上一些操作系统的 loader 所要的信息), 不同的 CPU 与操作系统并不能运行编译后的程序
另外还有一种是半编译的, 先把程序编译成一种中间码, 再在不同的机器运行解释器解释这种中间码.
网页上的 java 可以是解释的或是中间码的形式
解释是读一行解释一行,然后再执行,执行完后,再读下一行,然后再解释一下再执行。
下次再执行时还要解释。
编译的话就是只要编译一次,下次再执行是就不用再解释了,相对来说速度较快。
⑥ 编译执行和解释执行的区别
一、主体不同
1、编译执行:由编译程序将目标代码一次性编译成目标程序,再由机器运行目标程序。
2、解释执行:将源语言直接作为源程序输入,解释执行解释一句后就提交计算机执行一句,并不形成目标程序。
二、优势不同
1、编译执行:相比解释执行编译执行效率高,占用资源小,适合复杂程序
2、解释执行:开发速度快,出现严重BUG的几率小。
三、缺点不同
1、编译执行:兼容性差,例如在windows平台上写的编译程序一般不可以在unix平台上运行。
2、解释执行:解析需要时间,不生成目标程序而是一句一句的执行的方式会造成计算机资源的浪费,即执行效率低。