如果那里有任何语言设计师(或者只是知道的人),我很好奇为解释语言创建标准库背后的方法.具体来说,什么似乎是最好的方法?在解释语言中定义标准函数/方法,或者以编写解释器的编译语言执行这些调用的处理?
让我思考这个问题的是关于striplashes()的问题 - 就像Python中的函数一样.我的第一个想法是"为什么不定义自己的,只需在需要时调用它",但它提出了一个问题:对于这样的函数来说,让解释的语言处理这种开销是不是更好,或者它会更好编写扩展并利用解释器后面的编译语言?
"解释"和"编译"语言之间的界限现在非常模糊.例如,Python在看到源代码时所做的第一件事是将其编译成字节码表示,基本上与编译类文件时Java所做的相同.这是*.pyc文件包含的内容.然后,python运行时执行字节码而不引用原始源.传统上,纯粹解释的语言在执行程序时会连续引用源代码.
在构建语言时,构建一个可以实现更高级别功能的坚实基础是一种很好的方法.如果你有一个可靠,快速的字符串处理系统,那么语言设计者可以(并且应该)在基本运行时之外实现像stripslashes()这样的东西.至少有以下几个原因:
语言设计者可以证明语言足够灵活,可以处理这种任务.
语言设计师实际上在语言中编写实际代码,该语言具有测试,因此表明基础是可靠的.
其他人可以更轻松地阅读,借阅甚至更改更高级别的功能,而无需构建甚至理解语言核心.
仅仅因为像Python这样的语言编译为字节码并执行并不意味着它很慢.没有理由为什么有人不能为Python编写一个Just-In-Time(JIT)编译器,以及Java和.NET已经做的事情,以进一步提高性能.实际上,IronPython直接将Python编译为.NET字节码,然后使用包含JIT的.NET系统运行.
要直接回答您的问题,语言设计人员在运行时背后的语言中实现函数的唯一时间(例如,在Python的情况下为C)将最大化该函数的性能.这就是正则表达式解析器等模块是用C语言而不是本机Python编写的原因.另一方面,像getopt.py这样的模块是用纯Python实现的,因为它可以在那里完成,使用相应的C库没有任何好处.