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:
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
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ü:
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.
Neden benim program tam olarak 8192 el...
Merak: Neden İfade<...> ne zaman...
Neden sıralanmamış bir dizi daha hızlı...
Neden bir döngü iki döngü daha yavaş g...
Neden önemli GetHashCode yöntem geçers...