2012-05-07 61 views

回答

6

这是有效无论是Scala和Java来说,一个可以定义为:

在计算机科学中,库是用于开发软件资源的集合。这些可能包括预先编写的代码和子例程,类,值或类型规范。

这意味着(我知道,我简化了不少)一库是你在代码中使用,以实现一个算法程序的集合。它们可以节省您一次又一次编写相同的代码(例如,每次必须将字符串打印到控制台时,您都不需要重新发明轮子)。

一个语言扩展是不是代码,你会打电话给(或使用)直接从您的代码,但东西会改变你如何编写你的程序。它可能会改变(通常是)语言本身的语法,并且通常它是编译器的插件。添加到Java语言中的许多功能都是扩展功能(例如泛型)。

例如会话Scala是由双方的扩展:

  • 库管理并行编程(代码,你可以直接从你的代码中调用)。
  • 语言扩展:为了让你编写的代码更加清晰(有时称为语法糖),它改变了语言的语法,使其库函数的使用更加容易(我应该说不错?)

举例来看看this page

这就是说,通常在Scala中,由于语法的原因,扩展语言并不是真的需要(即使它很容易编写,比.NET语言更容易)。我想到的第一件事情是infix操作符,但总的来说,它的方法调用的所有语法都可以简单地将它用作没有DSL的DSL

1

如果通过语言扩展来表示一个编译器插件,那么它可以在编译时检查或转换给定的源代码为其他普通的Scala代码。但是,使用相同原始源代码的其他人也必须安装编译器插件来编译代码。

另一方面,在斯卡拉的库可能看起来像一个语言扩展感谢斯卡拉的支持infix notation/suffix notationsymbolic methods。然而,在编译时没有什么特别的,尽管任何人编译然后运行相同的源代码都需要任何引用的库来完成。

15

This is the Scala language specification。如果可以用本规范描述的语言编写它,那么它是一个。如果您对本文档描述的语言进行更改,不能用语言本身编写,那么它是一种语言扩展。

+3

+1喜欢它,不能更简洁! –