2012-05-07 65 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喜歡它,不能更簡潔! –