python – 以解释语言链接和加载

在编译语言中,源代码由编译器转换为目标代码,并且不同的目标文件(如果有多个文件)由链接器链接并由加载器加载到存储器中以供执行.

如果我有一个使用解释语言编写的应用程序(例如,rubypython),并且如果源代码是跨文件分割的,那么文件恰好是在一起的时候.换句话说,链接什么时候完成?解释语言首先是否具有连接器和装载器,还是解释器可以完成所有操作?

我对此感到困惑,无法理解它!任何人都可以对此有所启发吗?!

最佳答案
解释语言或多或少是称为解释器的可执行文件的大型配置.该可执行文件(例如/usr/bin/python)是实际运行的程序.然后它读取它将执行的脚本(例如/home/alfe/bin/factorial.py)并以最简单的形式逐行执行它.

在此过程中,它可能会遇到对其他文件的引用(其他模块,例如/usr/python/lib/math.py),然后它将读取并解释这些文件.

许多此类语言都内置了机制,通过创建它们解释的脚本的字节码版本来减少此过程的开销.所以可能有一个文件/usr/python/lib/math.pyc,例如解释器在第一次处理后放在那里,它可以比原来的/usr/python/lib/math.py更快地读取和解释.但这并不是解释语言概念的一部分¹.

有时,二进制库是解释语言的一部分;根据解释器的复杂程度,它可以在运行时链接该库,然后使用它.这对于需要高度优化的系统模块和东西来说是最典型的.

但总的来说,可以说根本没有生成二进制机器代码.在编译时没有任何关联.实际上,没有真正的编译时间,即使可以将输入脚本的第一次处理称为编译步骤.

脚注:

¹)解释脚本的概念既不包括“编译”(将源预转换为更快速的解释形式),也不包括通过存储.pyc文件等文件来“缓存”此形式.关于将程序链接和拆分为多个文件或模块的问题,预编译和缓存的这些方面只是加速事情的技术细节.概念本身是:读取输入脚本的一行&执行它.然后阅读下一行,依此类推.

相关文章

Python中的函数(二) 在上一篇文章中提到了Python中函数的定...
Python中的字符串 可能大多数人在学习C语言的时候,最先接触...
Python 面向对象编程(一) 虽然Python是解释性语言,但是它...
Python面向对象编程(二) 在前面一篇文章中谈到了类的基本定...
Python中的函数(一) 接触过C语言的朋友对函数这个词肯定非...
在windows下如何快速搭建web.py开发框架 用Python进行web开发...