Прочел перевод статьи "Место для 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. Причем последняя настолько совершенна, что позволяет создать интерфейс любой сложности. Было бы желание.
Кроме того, в статье есть хороший пример оптимизации метода определения числа фибонначи. В классическом варианте, который он приводит в статье используется рекурсия. По заверениям автора, этот код работает экспоненциально долго в противовес обычному циклу. Я решил проверить это в 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. Причем последняя настолько совершенна, что позволяет создать интерфейс любой сложности. Было бы желание.
кто заметил ошибку в коде - ОК. Вчера замерял производительность Dlang and Java - на 3-х прогонах джава отстает, но средняя скорость после 10-ти одновременных прогонов значительно выше у джава.
ОтветитьУдалитьВ чем может быть проблема, я не знаю.