“解释”和“编译”语言之间的界限现在真的很模糊。例如,Python在看到源代码时所做的第一件事就是将其编译成字节码表示形式,这与Java在编译类文件时的做法基本相同。这是* .pyc文件包含的内容。然后,python运行时会执行字节码而不会引用原始源代码。传统上,纯粹的解释语言会在执行程序时连续引用源代码。
在构建语言时,建立可以实现更高级别功能的坚实基础是一种很好的方法。如果你有一个稳定,快速的字符串处理系统,那么语言设计者可以(也应该)在基本运行时之外实现诸如stripslashes()之类的东西。这是因为至少几个原因:
- 语言设计者可以显示语言足够灵活来处理这类任务。
- 语言设计师实际上是用语言编写真实代码,该代码进行了测试,因此表明该基础是坚实的。
- 其他人可以更轻松地阅读,借阅甚至更改高级功能,而无需构建甚至理解语言核心。
仅仅因为像Python这样的语言编译为字节码并执行它并不意味着它很慢。没有理由说为什么有人不能为Python编写一个Just-In-Time(JIT)编译器,就像Java和.NET已经做的那样,以进一步提高性能。事实上,IronPython直接将Python编译为.NET字节码,然后使用.NET系统(包括JIT)运行。
要直接回答你的问题,语言设计者唯一需要在运行时使用语言来实现一个函数的时候(比如Python中的C语言)就是最大化该函数的性能。这就是为什么诸如正则表达式解析器之类的模块是用C语言而不是本地Python编写的。另一方面,像getopt.py这样的模块在纯Python中实现,因为它可以在那里完成,并且使用相应的C库没有任何好处。
而不是“利用”编译语言,为什么不“利用”它或“利用它”呢?我们不要增加英文语言关键字的数量,除非我们必须:) – MarkJ 2009-01-28 12:57:15