SORU
26 Mayıs 2011, PERŞEMBE


Nasıl kapsam için optimize etmek ve Scala döngüler?

Scala, Java kadar hızlı olması gerekiyordu. Ben aslında Java ele o Scala Project Euler bazı sorunları tekrar düşünüyordum. "Ne 20?" için 1 numaraları tarafından eşit olarak bölünebilen en küçük pozitif sayıdır Sorun 5 özellikle:

İşte 0.7 saniye benim makinede sürer Java benim çözüm:

public class P005_evenly_divisible implements Runnable{
    final int t = 20;

    public void run() {
        int i = 10;
        while(!isEvenlyDivisible(i, t)){
            i  = 2;
        }
        System.out.println(i);
    }

    boolean isEvenlyDivisible(int a, int b){
        for (int i = 2; i <= b; i  ) {
            if (a % i != 0) 
                return false;
        }
        return true;
    }

    public static void main(String[] args) {
        new P005_evenly_divisible().run();
    }
}

İşte "doğrudan çevirisi" 103 saniye (147 kat daha uzun!) alır, Scala, benim

object P005_JavaStyle {
    val t:Int = 20;
    def run {
        var i = 10
        while(!isEvenlyDivisible(i,t))
            i  = 2
        println(i)
    }
    def isEvenlyDivisible(a:Int, b:Int):Boolean = {
        for (i <- 2 to b)
            if (a % i != 0)
                return false
        return true
    }
    def main(args : Array[String]) {
        run
    }
}

Sonunda geldi 39 saniye (55 kat daha uzun) sürer fonksiyonel programlama, yük

object P005 extends App{
    def isDivis(x:Int) = (1 to 20) forall {x % _ == 0}
    def find(n:Int):Int = if (isDivis(n)) n else find (n 2)
    println (find (2))
}

Windows 7 64-bit Scala 2.9.0.1 kullanarak. Nasıl performansı? Yanlış bir şey mi yapıyorum? Ya da Java sadece çok daha hızlı.

CEVAP
16 HAZİRAN 2011, PERŞEMBE


Bu durumda sorun için ifade içinde döndüren. Bu da kapsayan yöntemi de yakalanan bir NonLocalReturnException atmak, çevrilmiş olur. İyileştirici dosyalarda grup ama/catch throw henüz ortadan kaldırmak olamaz ortadan kaldırabilir. Ve/catch at pahalıdır. Ama böyle iç içe döndürür Scala programlarında nadir olduğundan, iyileştirici henüz bu davayı ele vermedi. Umarım bu sorunu kısa sürede çözeceği iş iyileştirici geliştirmek için var.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gadgetgal38

    gadgetgal38

    9 HAZİRAN 2009
  • GenTechPC

    GenTechPC

    1 Temmuz 2007
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009