Clang ve LLVM

LLVM (Low Level Virtual Machine) projesi 2000 yılında University of Illinois'de dinamik derleme ve performans optimizasyonları araştırmalarına yönelik olarak başlatıldı. C++ ile geliştirilen proje, herhangi bir programlama dili için derleme zamanı, linkleme zamanı, çalışma zamanı ve idle zamanı optimizasyonlarına yönelik yeniden kullanılabilir bileşen ve kütüphaneleri iyi tanımlanmış bir arayüzle sunmaktadır.

2005 yılından itibaren Apple tarafından yapılan ciddi katkıların ve geniş kullanımının yanı sıra son yıllarda Sony firmasının da SDK'larında kullanmaya başlamasıyla birlikte önemli bir ivme kazanmıştır.

GCC'ye oranla internal olarak çok daha modern ve iyi bir tasarıma sahip LLVM, gün geçtikçe kullanım oranını artırmakta ve genel olarak daha optimize bir kod üretimi sağlamaktadır

Clang, C, C++, Objective-C ve Objective-C++ dilleri için LLVM önyüzü sağlar. GCC derleyicisi ile uyumludur ve uzun vadede GCC'nin yerine geçmesi hedeflenmektedir. University of Illinois/NCSA Lisansı ile açık kaynaklı olarak geliştirilen projede özellikle Apple, Google, ARM, Sony ve Intel firmalarının ciddi katkıları göze çarpmaktadır.

Avantajlar

Clang özellikle IDE üzerinden kullanımlarda GCC'nin sahip olduğu pek çok olumsuz özelliğe dair dizaynından kaynaklanan avantajlar sunmaktadır. Bu nedenle IDE entegrasyonu çok daha iyidir.

GCC ile kıyaslandığında Clang ile derleme işlemleri daha hızlı gerçekleşmektedir. Yaklaşık 10 obje dosyası ve toplam 100.000 satır kod içeren C ile yazılmış bir proje için aynı parametrelerle gcc ile karşılaştırdığımızda aşağıdaki tablo ortaya çıkmaktadır:

Derleyici Toplam Derleme Zamanı Oluşan Binary Boyutu
Clang 4 saniye 755 Kb
GCC 7 saniye 953 Kb

Ek olarak derleme sürecinde kullanılan bellek miktarı da gcc'ye oranla daha düşüktür.

Clang kod üzerindeki olası hata veya uyarı gerektiren durumları daha agresif biçimde kontrol eder. Gcc ile hiç uyarı almadan derlediğiniz bir projede clang ile yüzlerce uyarı alabilirsiniz. Gcc'den farklı olarak hataların satır içlerindeki konumunu da detaylı bir şekilde gösterdiğinden düzeltilmesi daha kolaydır. Aynı zamanda uygulamanızın verimliliğine olumlu katkısı olur. Örnek bir hata mesajı aşağıdaki gibidir:

backend.c:194:15: error: address of array 'device->required_software' will always evaluate to 'true'
      [-Werror,-Wpointer-bool-conversion]
                if (device->required_software) {
                ~~  ~~~~~~~~^~~~~~~~~~~~~~~~~

Avantajlı durumların yanında, üretilen kodun çalışma zamanı performansı açısından LLVM 3.5 öncesi versiyonlarda (2014 öncesi) bariz bir handikap bulunmakta ve gcc ile derlenmiş kodlar daha hızlı çalışmaktaydı. Ancak 3.5 versiyonu ve sonrasında bazı testlerde Clang & LLVM daha iyi performans vermeye başlamıştır. LLVM tarafındaki hızlı geliştirme eforu nedeniyle kısa zamanda tüm testlerde LLVM'in daha iyi sonuçlar üretmesi beklenebilir.

Stallman'ın İtirazı

https://gcc.gnu.org/ml/gcc/2014-01/msg00247.html

results matching ""

    No results matching ""