簡體   English   中英

是否缺少第三方庫阻止您使用Scala?

[英]Is lack of 3rd party libraries preventing you using Scala?

我前幾天開始學習Scala。 至於語言本身,我認為這很棒,沒有任何問題。 為了幫助我學習過程,我為自己設置了一個任務,從HTML頁面下載,解析和索引文本。

在執行上述操作時,我發現自己不斷深入研究現有的Java庫。 我發現我必須使用Java庫來:

1)打開連接 - java.net.URL

2)解析HTML(TagSoup - 因為普通的XML解析器不能處理最糟糕的HTML)

3)索引文本(Lucene)

鑒於我不得不依靠Java庫來完成相當多的繁重工作,我不知道是否值得我使用Scala開始,除了作為一個學習練習。 這部分是由於需要一些額外的心理努力才能在兩者之間進行映射,例如,字體[]的Scala類型不是直觀明顯的,因為Scala中的所有東西都是對象。 這是額外的心理處理,可以使這個過程看起來有點笨重。

是否有人認為較少的第三方庫(與Java相比)是在商業項目中使用Scala的障礙?

如果你可以調用現有的Java庫,那么它是否重要,或者在代碼庫中不得不跨越兩種不同的語言會讓它變得更難?

我不太關心你的看法。 Java庫通常是.jar文件(壓縮的.class文件集)。 你期望Scala庫是什么? 好吧,它將是一組壓縮的.class文件。 兩種語言都編譯為Java字節碼! 那么,回答你的問題:

是否有人認為較少的第三方庫(與Java相比)是在商業項目中使用Scala的障礙?

不,不是真的。

如果你可以調用現有的Java庫甚至是重要的,或者在代碼庫中不得不跨越兩種不同的語言會讓它更難嗎?

如果您將java庫看作已編譯的.jar文件,則不必跨越兩種不同的語言。


編輯:當然,Scala有一個非常豐富的類型系統,編譯類文件無法充分利用。 相反,Java字節碼格式的大量有用庫可能使Scala比其他新的(現代閱讀)語言更具吸引力。

我推薦這篇文章(和模式):

皮條客我的圖書館

每當Java庫的接口在Scala中有點麻煩時,這是一種使它更方便,代碼更優雅的好方法。 這是一個非常簡單的例子。 我想在我的代碼中一直使用Scala XML pretty打印機來返回格式良好的XML。 這是正常的方法:

class Service {
val pp = new scala.xml.PrettyPrinter(80,2)
def content = 
  pp.format(<foo><bar>{something()}</bar></foo>)
}

但是,因為我一直這樣做,所以我將它添加到我的包中

import scala.xml.Elem

object PrettyXml {
  val pp = new scala.xml.PrettyPrinter(80,2)
}

trait PrettyXml {
  case class Formatted(xml:Elem) { 
    def pretty = PrettyXml.pp.format(xml) 
  }
  implicit def toFormatted(xml:Elem) = Formatted(xml)
}

現在我可以用我的原始代碼替換

class Service extends PrettyXML {
  val pp = new scala.xml.PrettyPrinter(80,2)
  def content = 
    <foo><bar>{something()}</bar></foo> pretty
}

如果我不想讓它成為一個特性,我可能會把PrettyXML放在一個包對象中。

這實際上並不像看起來那樣愚蠢和誤導一個問題。 關於Scala庫的一些事實:

  1. 如果沒有龐大的Java庫基礎架構,大多數人使用Scala的實際原因就很少了。 Scala是一種可愛的語言,具有一些驚人的功能,但如果你每次需要完成任何大的工作時都必須重新發明輪子,那么沒人會打擾。
  2. 從Scala訪問本機Java庫比從Java訪問Java庫稍微有點愉快,但只是輕微一點。 這里的問題是本機Java庫比Scala本地編寫的庫或Java庫的好Scala包裝器低得多。 本機Java庫往往散落着單方法接口(應該是函數),輕微記錄的可空參數或返回(應該是Option),不必要的並行類構造或“助手”(應該是特征),手工卷制的不太標准的迭代器,需要嘗試塊的資源管理(由於缺少閉包)和類型簽名(特別是Java-1.5庫之前的版本),這些都是可笑的粗糙。 毫不奇怪,Scala程序員認為Java庫是“完成工作所必需的”,而不是你真正期待操作的東西。
  3. 通過包裝或拉皮條,實際上很容易使用Java本機庫,並使其與Scala本機庫一樣快樂。 我希望大多數主要企業庫的簡單華麗的Scala適配器能夠在短期內上市。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM