Почему этот код Scala медленный?

Я использую следующий код Scala:

import scala.util.parsing.json._
import scala.io._

object Main {
        def jsonStringMap(str: String) =
                JSON.parseFull(str) match {
                        case Some(m: Map[_,_]) => m collect {
                                        // If this doesn't match, we'll just ignore the value
                                        case (k: String, v: String) => (k,v)
                                } toMap
                        case _ => Map[String,String]()
                }

        def main(args: Array[String]) {
                val fh = Source.fromFile("listings.txt")
                try {
                        fh.getLines map(jsonStringMap) foreach { v => println(v) }
                } finally {
                        fh.close
                }
        }
}

На моем компьютере требуется ~ 3 минуты на файл из http://sortable.com/blog/coding-challenge/ . Написанные мной эквивалентные программы на Haskell и Ruby занимают менее 4 секунд. Что я делаю не так?

Я пробовал тот же код без карты (jsonStringMap), и он был достаточно быстрым, так что синтаксический анализатор JSON просто очень медленный?

Кажется вероятным, что синтаксический анализатор JSON по умолчанию действительно действительно медленно, однако я попробовал https://github.com/stevej/scala-json , и хотя это сократило время до 35 секунд, это все равно намного медленнее, чем Ruby.

Теперь я использую https://github.com/codahale/jerkson , что еще быстрее ! Моя программа теперь работает всего за 6 секунд с моими данными, всего на 3 секунды медленнее, чем Ruby, который, вероятно, просто запускается JVM.

7
задан singpolyma 23 February 2012 в 07:41
поделиться