图书馆与语言扩展

时间:2012-05-07 07:55:00

标签: scala programming-languages

图书馆和语言扩展有什么区别?特别是在Scala中。

3 个答案:

答案 0 :(得分:15)

This is the Scala language specification。如果您可以使用本规范描述的语言编写它,那么它就是。如果您对本文档所描述的语言进行了更改,无法以语言本身编写,那么它就是语言扩展。

答案 1 :(得分:6)

这对Scala和Java都有效,可以定义为:

  

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

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

语言扩展不是您直接从代码中调用(或使用)的代码,而是会改变您编写程序的方式。它可能会改变(通常也会)语言本身的语法,并且通常是编译器的插件。添加到Java语言的许多功能都是扩展(例如泛型)。

例如,Session-Scala是由以下两者组成的扩展:

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

有关示例,请查看this page

也就是说,通常使用Scala语言扩展并不是真正需要的(因为它的语法很容易编写,比起.NET语言更容易)。我想到的第一件事就是中缀运算符,但总的来说,它所有的方法调用语法都可以很容易地将它用作没有DSL的 DSL

答案 2 :(得分:1)

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

另一方面,Scala中的库可能看起来像语言扩展,这要归功于Scala对infix notation / suffix notationsymbolic methods的支持。但是,在编译时没有什么特别的事情,但自然任何人编译然后运行相同的源代码都需要任何引用的库来执行此操作。