Xcode 6 Beta 6 kullanıyorum.
Bu bir süredir beni rahatsız eden bir şey, ama şimdi neredeyse hiç kullanılamadığı bir noktaya ulaşıyor.
Projem iyi bir boyutta 65 Swift dosyası ve birkaç köprülü Objective-C dosyasına sahip olmaya başlıyor (bu gerçekten sorunun nedeni değildir).
Herhangi bir Swift dosyasında küçük bir değişiklik gibi görünüyor (uygulamada neredeyse hiç kullanılmayan bir sınıfa basit bir beyaz boşluk eklemek gibi), belirtilen hedef için tüm Swift dosyalarının yeniden derlenmesine neden olacaktır.
Daha derin bir araştırmadan sonra, derleyici süresinin neredeyse% 100'ünü alan şeyin, CompileSwift
Xcode'un swiftc
hedefinizin tüm Swift dosyalarında komutu çalıştırdığı aşama olduğunu gördüm .
Daha fazla araştırma yaptım ve uygulama temsilcisini varsayılan bir denetleyiciyle tutarsam derleme çok hızlıdır, ancak proje dosyalarımı giderek daha fazla eklediğimde derleme zamanı gerçekten yavaşlamaya başlamıştı.
Şimdi sadece 65 kaynak dosyasıyla, her seferinde derlemek yaklaşık 8/10 saniye sürüyor. Çok hızlı değil .
Ben dışında bu konuda görüşmeye herhangi bir yayını görmedim bu bir , ama bu durumda bir tek ben merak ediyorum yüzden Xcode 6. eski bir sürümünü oldu.
GÜNCELLEME
GitHub'da Alamofire , Euler ve CryptoSwift gibi birkaç Swift projesini kontrol ettim , ancak hiçbirinin karşılaştırmak için yeterli Swift dosyası yoktu. İyi bir boyuta sahip olduğunu bulduğum tek proje SwiftHN idi ve sadece bir düzine kaynak dosyası olmasına rağmen, aynı şeyi, basit bir alanı ve tüm projeyi almaya başlayan yeniden derlemeye ihtiyaç duydum. az zaman (2/3 saniye).
Hem analizörün hem de derlemenin hızlı yanıp söndüğü Objective-C koduyla karşılaştırıldığında, bu gerçekten Swift'in büyük projeleri asla başaramayacağını düşünüyor, ama lütfen bana yanlış olduğumu söyle.
Xcode 6 Beta 7 ile GÜNCELLEME
Hâlâ hiçbir gelişme yok. Bu saçma olmaya başlıyor. #import
Swift'in eksikliğinden dolayı , Apple'ın bunu nasıl optimize edebileceğini gerçekten göremiyorum.
Xcode 6.3 ve Swift 1.2 ile GÜNCELLEME
Apple, artımlı yapılar (ve diğer birçok derleyici optimizasyonu) ekledi . Bu avantajları görmek için kodunuzu Swift 1.2'ye taşımanız gerekir, ancak Apple bunu yapmanıza yardımcı olmak için Xcode 6.3'e bir araç ekledi:
ANCAK
Benim gibi çok sevinmeyin. Derlemeyi artımlı yapmak için kullandıkları grafik çözücü henüz çok iyi optimize edilmemiştir.
Gerçekten de, işlev imzası değişikliklerine bakmaz, bu nedenle bir yöntemin bloğuna boşluk eklerseniz, bu sınıfa bağlı olan tüm dosyalar yeniden derlenir.
İkincisi, bir değişiklik onları etkilemese bile, yeniden derlenen dosyalara dayalı ağaç oluşturuyor gibi görünüyor. Örneğin, bu üç sınıfı farklı dosyalara taşırsanız
class FileA: NSObject {
var foo:String?
}
class FileB: NSObject {
var bar:FileA?
}
class FileC: NSObject {
var baz:FileB?
}
Şimdi değiştirirseniz FileA
, derleyici FileA
yeniden derlenecek şekilde işaretler . Ayrıca yeniden derleme olacaktır FileB
(buna değişikliklere göre Tamam olurdu FileA
), ama aynı zamanda FileC
, çünkü FileB
recompiled ve çünkü oldukça kötü FileC
asla kullandığı FileA
burada.
Umarım bu bağımlılık ağacı çözücüsünü geliştirirler ... Bu örnek kodla bir radar açtım .
Xcode 7 beta 5 ve Swift 2.0 ile GÜNCELLEME
Dün Apple beta 5'i yayınladı ve sürüm notlarının içinde görebiliyorduk:
Hızlı Dil ve Derleyici • Artımlı sürümler: bir işlevin yalnızca gövdesini değiştirmek artık bağımlı dosyaların yeniden oluşturulmasına neden olmamalıdır. (15352929)
Ben denedim ve şimdi gerçekten (gerçekten!) Çalıştığını söylemeliyim. Artımlı yapıları hızlı bir şekilde büyük ölçüde optimize ettiler.
swift2.0
Şube oluşturmanızı ve XCode 7 beta 5'i kullanarak kodunuzu güncel tutmanızı şiddetle tavsiye ederim . Derleyicinin geliştirmelerinden memnun kalacaksınız (ancak XCode 7'nin küresel durumunun hala yavaş ve buggy olduğunu söyleyebilirim)
Xcode 8.2 ile GÜNCELLEME
Bu konudaki son güncellememden bu yana bir süre geçti, işte burada.
Bizim app şimdi iyi ama olağanüstü değil hemen hemen Swift kodu, yaklaşık 20k satır. Hızlı 2 ve hızlı 3 göçünden geçti. Temiz bir yapıda iyi olan 2014 ortası bir Macbook pro'da (2,5 GHz Intel Core i7) derlemek yaklaşık 5 / 6m sürer.
Bununla birlikte, Apple'ın aşağıdakileri iddia etmesine rağmen artımlı yapı hala bir şaka.
Xcode, yalnızca küçük değişiklikler olduğunda hedefin tamamını yeniden oluşturmaz. (28892475)
Açıkçası, çoğumuzun bu saçmalıklara baktıktan sonra güldüğümüzü düşünüyorum (projemin herhangi bir dosyasına bir özel (özel!) Mülk ekleyerek her şeyi yeniden derleyeceğiz ...)
Size konuyla ilgili biraz daha fazla bilgi içeren Apple geliştirici forumlarındaki bu konuya işaret etmek istiyorum (aynı zamanda arada bir Apple dev iletişimini takdir ediyorum)
Temelde insanlar artımlı yapıyı geliştirmeye çalışmak için birkaç şey bulmuşlardır:
- Olarak
HEADER_MAP_USES_VFS
ayarlanmış bir proje ayarı ekletrue
Find implicit dependencies
Programınızdan devre dışı bırak- Yeni bir proje oluşturun ve dosya hiyerarşinizi yenisine taşıyın.
Çözüm 3 deneyeceğim ama çözüm 1/2 bizim için işe yaramadı.
Tüm bu durumun ironik olanı, bu konudaki ilk gönderiye baktığımızda, Xcode 6 ile birlikte kullandığımız ilk Apple derlemelerine erimediğimizde ve şimdi yaklaşık iki yıl sonra hızlı bir şekilde 1 veya hızlı 1.1 koduna inanıyoruz. durum Xcode 6'daki kadar kötü. Ne kadar ironik.
Gerçekte içerdiği günlük hayal kırıklığı nedeniyle Projemiz için Swift'i Obj / C üzerinden seçmekten gerçekten pişmanım. (Hatta AppCode'a geçiyorum ama bu başka bir hikaye)
Her neyse, bu SO yazı 32k + görüş ve 143 ups bu yazı itibariyle vardır, bu yüzden sanırım tek değilim. Bu durumda kötümser olmasına rağmen orada durun, tünelin sonunda biraz ışık olabilir.
Zamanınız varsa (ve cesaretiniz varsa) Sanırım Apple bu konuda radarı karşılıyor.
Bir dahaki sefere kadar! Şerefe
Xcode 9 ile GÜNCELLEME
Takılmaları bu bugün. Xcode, mevcut korkunç performansı geliştirmek için sessizce yeni bir inşa sistemi başlattı. Çalışma alanı ayarlarından etkinleştirmeniz gerekir.
Henüz denediniz, ancak tamamlandıktan sonra bu yayını güncelleyeceksiniz. Yine de umut verici görünüyor.