Bina C / C ++: gerçekten ne oluyor ve neden bu kadar uzun sürüyor
Yazılım geliştirme süresinin nispeten büyük bir kısmı kod yazmak, çalıştırmak, hata ayıklamak ve hatta tasarlamak için harcanmaz, ancak derlenmeyi bitirmesini bekler. İşleri hızlı hale getirmek için önce C / C ++ yazılımı derlendiğinde neler olduğunu anlamalıyız. Adımlar kabaca aşağıdaki gibidir:
- Yapılandırma
- Araç başlatma
- Bağımlılık kontrolü
- Derleme
- bağlayıcı
Şimdi her bir adıma nasıl daha hızlı yapılabileceklerine odaklanarak daha ayrıntılı olarak bakacağız.
Yapılandırma
Bu, inşa etmeye başlarken ilk adımdır. Genellikle bir yapılandırma komut dosyası veya CMake, Gyp, SCons veya başka bir araç çalıştırmak anlamına gelir. Bu, çok büyük Autotools tabanlı yapılandırma komut dosyaları için bir saniyeden birkaç dakikaya kadar sürebilir.
Bu adım nispeten nadir görülür. Yalnızca yapılandırmaları değiştirirken veya derleme yapılandırmasını değiştirirken çalıştırılması gerekir. Değişen yapı sistemleri eksik olduğunda, bu adımı daha hızlı hale getirmek için yapılacak çok şey yoktur.
Araç başlatma
Bir IDE'deki (genellikle bir takma addır) derleme simgesini çalıştırdığınızda veya tıkladığınızda bu gerçekleşir. Derleme aracı ikili dosyası, genellikle aynı şey olan derleme yapılandırmasının yanı sıra yapılandırma dosyalarını da başlatır ve okur.
Yapı karmaşıklığına ve boyutuna bağlı olarak, bu, bir saniyenin bir kısmından birkaç saniyeye kadar her yere kadar sürebilir. Tek başına bu o kadar da kötü olmazdı. Ne yazık ki çoğu marka tabanlı yapı sistemi, her bir yapı için onlarca kez yüzlerce kez çağrılmaya neden oluyor. Genellikle bu, tekrar eden marka kullanımından kaynaklanır (ki bu kötüdür).
Make'ın bu kadar yavaş olmasının bir uygulama hatası olmadığı belirtilmelidir. Makefiles sözdiziminin, gerçekten hızlı bir uygulamayı imkansız kılan bazı tuhaflıkları var. Bu sorun, bir sonraki adımla birleştirildiğinde daha da belirgindir.
Bağımlılık kontrolü
Derleme aracı yapılandırmasını okuduktan sonra, hangi dosyaların değiştiğini ve hangilerinin yeniden derlenmesi gerektiğini belirlemelidir. Yapılandırma dosyaları, yapı bağımlılıklarını açıklayan yönlendirilmiş bir döngüsel grafik içerir. Bu grafik genellikle yapılandırma adımı sırasında oluşturulur. Derleme aracının başlangıç zamanı ve bağımlılık tarayıcısı her derlemede çalıştırılır. Birleştirilmiş çalışma zamanı, edit-compile-debug döngüsünün alt sınırını belirler. Küçük projeler için bu süre genellikle birkaç saniyedir. Bu tolere edilebilir. Make için alternatifler var. Bunların en hızlısı Chromium için Google mühendisleri tarafından üretilen Ninja'dır. Oluşturmak için CMake veya Gyp kullanıyorsanız, Ninja arka uçlarına geçin. Yapı dosyalarındaki hiçbir şeyi değiştirmek zorunda değilsiniz, sadece hız artışının tadını çıkarın. Ninja çoğu dağıtımda paketlenmemiş,
Derleme
Bu noktada derleyiciyi çağırıyoruz. Bazı köşeleri kesmek, burada atılan yaklaşık adımlar.
- Birleştirme şunları içerir
- Kodu ayrıştırma
- Kod üretimi / optimizasyonu
Popüler inanışın aksine, C ++ derlemek aslında o kadar yavaş değildir. STL yavaştır ve C ++ derlemek için kullanılan çoğu oluşturma aracı yavaştır. Bununla birlikte, dilin yavaş kısımlarını azaltmanın daha hızlı araçları ve yolları vardır.
Bunları kullanmak biraz dirsek yağı gerektirir, ancak faydaları yadsınamaz. Daha hızlı inşa süreleri daha mutlu geliştiricilere, daha fazla çevikliğe ve sonunda daha iyi kodlamaya yol açar.