SORU
27 AĞUSTOS 2014, ÇARŞAMBA


Neden Hızlı zaman çok yavaş derleme mi?

Xcode 6 Beta 6 kullanıyorum.

Bu biraz zaman şimdi beni rahatsız eden bir şey, ama zar zor kullanılabilir şimdi bir noktaya ulaşıyor.

Benim bir proje başladıiyi65 Swift dosyaları ve bir kaç köprü Objective-C dosyaları aslında sorunun nedeni değildir) boyut.

Göründüğü gibi ufak bir değişiklik için herhangi bir Swift dosyası (gibi ekleme basit bir beyaz alan bir sınıf. çok az kullanıldı uygulaması) neden tüm Swift dosyaları için belirtilen hedef çekirdekler.

Sonra daha derin bir araştırma, buldum ne alarak hemen hemen 0 derleyici zamanı CompileSwift faz nerede Güncellemelerinden çalışır swiftc komutu bütün dosyaları Hızlı hedef.

Biraz daha fazla araştırma yaptım, ve ben sadece app temsilci ile bir varsayılan denetleyici derleme çok hızlı, ama ben ekleme daha benim proje dosyaları, derleme zaman oldu başlangıç için gerçekten yavaş.

Şimdi sadece 65 kaynak dosyaları ile ilgili 8/10 saniye her zaman derlemeye alıyor. Çok değilswifthiç.

Herhangi bir yazı, bu konu hakkında konuşuyor this one hariç görmedim ama böyle büyük mükafat 6 eski bir versiyonu gibiydi. Eğer bu durumda bir tek ben varım diye merak ediyorum.

GÜNCELLEME

Alamofire, Euler CryptoSwift gibi GitHub birkaç Hızlı bir projeleri kontrol ettim ama hiçbiri yeterince Hızlı dosya aslında karşılaştırmak zorunda kaldı. Sadece ben bu projeyi bir başlangıç olarak bulunduiyiboyutu SwiftHN, ve olsa bile sadece bir düzine kaynak dosyalarının hala mümkün doğrulamak için aynı şey, basit bir alan ve tüm proje tanımlanması gerekli olan başlangıç için biraz zaman (2/3 saniye).

Objective-C hem de analiz ve derleme yanan hızlı olduğu kod ile karşılaştırıldığında çok Hızlı asla büyük projeleri ele almak mümkün olacak gibi geliyor, ama yanlış olduğumu söyle lütfen.

Güncellemelerinden GÜNCELLEME Beta 6 İle 7

Hala hiçbir gelişme yok. Bu çok saçma olmaya başladı. Swift #import eksikliği ile, gerçekten Apple hiç bu optimize etmek mümkün olacak nasıl görmüyorum.

Böyle büyük mükafat ve 6.3, Swift 1.2 GÜNCELLEYİN

NİHAYET

Apple incremental builds (ve diğer birçok derleyici en iyi duruma getirme) ekledi. Swift 1.2 kodunuzu bu faydaları görmek için geçirmek zorunda, ama Apple 6.3 Güncellemelerinden bir araç, bunu yardımcı olmak için ekledi:

Enter image description here

ANCAK

Benim gibi çok çabuk sevinmek yok. Artan yapı yapmak için kullandıkları grafik çözücü çok iyi optimize edilmiş değil.

Aslında ilk olarak, eğer bir yöntemin blok içinde bir boşluk eklerseniz, tüm dosyaları bu sınıfa bağlı olarak çekirdekler böylece işlev imza değişiklikleri de görünmüyor.

İkincisi, ağaç, eğer bir değişiklik onları etkilemiyor bile çekirdekler dosyaları oluşturmak için gibi görünüyor. Eğer taşırsanız örneğin, farklı dosyalar halinde bu üç sınıf

class FileA: NSObject {
    var foo:String?
}
class FileB: NSObject {
    var bar:FileA?
}
class FileC: NSObject {
    var baz:FileB?
}

Şimdi Eğer FileA derleyici açıkçası FileA çekirdekler işaretler değiştirin. Ayrıca FileB FileA değişikliklere göre iyileşeceğini (), yenidenamaayrıca FileB derlenir çünkü FileC ve FileC burada FileA kullandığı için çok kötü.

Bu bağımlılık ağacı çözücü geliştirmek için elinden geleni yapıyor yani... bu örnek kod ile radar bir açtım.

Güncellemelerinden 7 beta 5 ve Swıft 2.0 İle GÜNCELLEME

Dün Apple sürümü görebiliriz notlar: beta 5 yayınlandı

Swift Dili Ve Derleyici • Artımlı oluşturur: bir fonksiyonun sadece vücudun değişiyor artık bağımlı dosyaları yeniden kazanmasını sağlar. (15352929)

Bir deneyin ve gerçekten çalışıyor (gerçekten !) söylemeliyim verdim iyi şimdi. Onlar artan swift yapılarında büyük ölçüde iyileştirilmiş.

Ben çok swift2.0 bir şube oluşturmak ve güncel kod Güncellemelerinden 7 beta 5 kullanmaya devam etmenizi öneririz. Derleyici (ancak böyle büyük mükafat 7 genel durum hala yavaş ve hatalı olduğunu söyleyebilirim) geliştirmeleri memnun olacak

CEVAP
14 EYLÜL 2014, Pazar


Aslında Rob Napier doğru olduğu ortaya çıktı. Derleyici berzek gitmek için neden tek bir dosya (aslında bir yöntem).

Şimdi beni yanlış anlamayın. Swift mu yeniden tüm dosyaları her zaman, ama çok şey, şimdi, Elmalı eklenen gerçek zamanlı geri bildirim derleme dosyaları derler, o yüzden böyle büyük mükafat 6 GM şimdi gösteren Swift dosyaları olarak derlenmiş ve bu durum derleme gerçek zamanlı olarak görebilirsiniz bu ekran görüntüsü:

Enter image description here

Bu çok kullanışlı bu kadar uzun sürdüğünü bilmek geliyor. Benim durumumda bu kod parçası oldu:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : self.title ?? ""
        ])

return dic.copy() as NSDictionary

özelliği title tür var title:String? NSString değil çünkü. Derleyici NSMutableDictionary bunu eklerken deliriyordu.

Bunu değiştirmek için:

var dic = super.json().mutableCopy() as NSMutableDictionary
dic.addEntriesFromDictionary([
        "url" : self.url?.absoluteString ?? "",
        "title" : NSString(string: self.title ?? "")
        ])

return dic.copy() as NSDictionary

derleme tek bir saniye 10/15 saniye (belki daha fazla) git... inanılmaz.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Helen Bradley

    Helen Bradle

    4 Mart 2008
  • KittiesMama

    KittiesMama

    10 AĞUSTOS 2008
  • pilslajt

    pilslajt

    20 HAZİRAN 2008