К основному контенту

Почему я выбираю scala?

Прочел перевод статьи "Место для D" А. Александреску. Был впечатлен глубиной знаний профессора. D действительно очень хороший и перспективный язык. Но есть одно но! Ему не хватает практичности. В реальных задачах он еще проигрывает и очень сильно. И когда кто-то восхищенно воскликнул, что на ди проект был написан за месяц, то кто-то резонно ему заметил, что он бы этот проект на java реализовал за 2 дня. И в этом вся правда.
Кроме того, в статье есть хороший пример оптимизации метода определения числа фибонначи. В классическом варианте, который он приводит в статье используется рекурсия. По заверениям автора, этот код работает экспоненциально долго в противовес обычному циклу. Я решил проверить это в scala:
package com.example
import java.util.concurrent._
object Hello {
        def fib1(n:Int): Int = {
    if(n < 2 ) return n;
    else
        return fib(n-1)+fib(n-2);
         }
    def fib(n:Int): Int = {
   
        var a:Int = 1 ;
        var b:Int = 0;
         var e:Int =0;
        (0 to n).foreach { _ =>
            { e = a;
            a = a + b;
            b = e;
        }
        }
        return a;
}
  def main(args: Array[String]): Unit = {
      val before = System.nanoTime()
    val r = fib(1111)
    println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - before))
    println(r);
      val before1 = System.nanoTime()
    val r1 = fib1(1111)
    println(TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - before1))
    println(r1);
  }
}
Каково же было мое удивление, когда код с циклом отнял у процессора больше времени(на 1-3 миллисекунды), но и классический вариант отработал мгновенно.
Хочется спросить гуру: как такое возможно? И может java/scala не такое уж и гавно?
Ведь оптимизация java machine постоянно улучшается и я обратил внимание, что в 8 версии пример тяжеловатого JavaFX из Netbeans стартуют практически мгновенно, не уступая в скорости работы "нативным" c/с++/d программам.
Ну та ложка дегтя, в реальной практике. Здесь меня интересуют не алгоритмы(их всегда можно доработать), а то, что, простые вещи как компиляция сложных вещей
наподобие web-приложения vibe-d еще месяц назад прекрасно собирались. А сегодня ему не хватает(или он не находит) библиотек. Ну самое грустное - скудость и унылость существующих библиотек. Их развитие подчас стихийно и лишь малая часть базовых модулей разрабатывается "постоянными" разработчиками.
Такой коллекцией успешно начатых и брошенных проектов не может похвастаться ни один другой язык.

Но все же, главная мысль: изучение ЯП требует усилий и времени, а результаты появляются не сразу. Именно поэтому я все же буду время от времени следить за судьбой D, но в то же время буду изучать scala как ЯП уже активно используемый в реальности.

Да и еще, вот думаю не станет ли html5 полной заменой классического GUI на desktop? На мысль об этом натолкнуло меня количество разношерстных попыток на ди решить проблему написания GUI - это и библиотеки с нуля и обертки всякой экзотики и WinApi small lib.  А не проще ли написать web?
Слава богу в java есть аж две либы swing и javaFX. Причем последняя настолько совершенна, что позволяет создать интерфейс любой сложности. Было бы желание.



Комментарии

  1. кто заметил ошибку в коде - ОК. Вчера замерял производительность Dlang and Java - на 3-х прогонах джава отстает, но средняя скорость после 10-ти одновременных прогонов значительно выше у джава.
    В чем может быть проблема, я не знаю.

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения из этого блога

Кирилица в Arch Linux

После вчерашних обновлений в консоли Arch Linux при выборе русской локали вместо букв печатаются белые квадратики. Очевидно, что по какой-то причине не загружается прописанный в rc.conf шрифт. Временное лекарство от этого: выполнить команду setfont cyr-sun16 . Еще у меня в момент начальной загрузки появляется рябь на экране как от сильных электромагнитных помех в ЭЛТ, хотя у меня ЖК. Может быть это как-то связано.

Сортировка массивов в groovy

Любой массив в java и groovy можно отсортировать статическим методом: Arrays.sort(c); причем это будет очень быстро сто тысяч элементов типа int сортируются за 1 секунду на celeron M 1,8 Mg. Если это массив объектов можно использовать перегруженный метод Arrays.sort(c,comporator);

Arch Linux - руссификация консоли

Вчера, придя с работы, как всегда затеял InstallFest. Уже практически не задумываясь установил свежий арч. И тут заметил что в tty вместо русского - квадратики. Под утро нашел таки сообщение на форме, что в этом виноваты дрова от видео. Там правда речь шла о нвидиа, а у меня ати. Буду пробовать. И еще в lxterminal обратил внимание что сообщения на русском, а то что я вводил на русском потом возвращается системой в виде юникод-символов. Вот такие дела. UPDATE: драйвер не причем. переустановил в консоли(до установки X) по прежнему квадратики вместо букв. неужели придется переключатся на инглиш? Заметил что initscripts скачался c какого-то зеркала не с яндекса. возможно причина в нем.