2

背景:我正在编写一个脚本语言解释器来测试一些实验性语言的想法。我要为内置类型编写核心标准方法(函数)集。其中一些方法需要直接与底层数据结构交互,并且必须使用底层语言编写(在我的例子中是 Haskell,但这对于这个问题并不重要)。如果我选择,其他可以用脚本语言本身编写。

问题:用底层语言或语言本身实现核心库函数的优点和缺点是什么?

示例:我的语言包含一个内置类型Arrays,其工作方式与您认为的一样——有序数据组合在一起。一个Array实例(这是一种面向对象语言)具有方法inject和。我已经在 Haskell 中实现了。我也可以用 Haskell 编写和,或者我可以使用我的语言编写它们。例如:mapeachinjectmapeachinject

def map(fn)
    inject([]) do |acc,val|
        acc << fn(val)
    #end inject
#end def map 

def each(fn)
    inject(nil) do |acc,val|
        fn val
    #end inject
#end def each

我想知道每种选择的优缺点是什么?

4

1 回答 1

3

主要优点是您正在吃自己的狗粮。你可以用你的语言编写更多的代码,从而更好地了解它是什么样的,至少对于通用库代码是这样。这不仅是发现语言设计和实现方面缺陷的好机会。特别是,您会发现更多的错误,并且您会发现像这样的抽象是否可以有效地实现,或者是否存在迫使人们用另一种语言编写对性能敏感的代码的基本障碍。

当然,这会导致一个缺点:无论是在程序员时间还是运行时性能方面,它都可能会更慢。然而,第一个对你,语言设计者来说是宝贵的经验,第二个应该是激励优化实现(假设你关心性能)而不是解决问题——它削弱了你的语言并且不能解决相同的问题对于无法修改实现的其他用户。

面向未来的实施也有优势。面对引擎盖下的重大修改,该语言应该保持稳定,因此在执行这些操作时您必须重写更少的代码。相反,这些函数将更像其他用户定义的函数:当在实现语言中定义一些标准库函数或类型时,存在一个真正的风险,即潜入细微的差异,使类型或函数的行为方式可以不能被语言模仿。

于 2015-05-17T10:46:39.890 回答