Advent of Compiler Optimisations 2025
(xania.org)- C/C++ derleyici optimizasyonu temalı, 25 gün süren bir Advent takvim projesi
- 1 Aralık ile 25 Aralık arasında her gün bir blog yazısı ve video ile bir optimizasyon örneği sunuluyor
- Her yayın, uygulanma zamanı, assembly analizi ve uygulanmadığı durumlar gibi başlıkları ayrıntılı biçimde ele alıyor
- Odak noktası x86-64 olsa da 64-bit ve 32-bit ARM mimarisi de kısmen yer alıyor
- Derleyicinin nasıl çalıştığını öğrenmek isteyen geliştiriciler için yüksek eğitsel değere sahip bir seri
Advent of Compiler Optimisations 2025 Proje Genel Bakışı
- Yaklaşık bir yıl hazırlanmış bu projeyle, Aralık ayında her gün yeni bir derleyici optimizasyonu örneği yayınlanıyor
- 1 Aralık ile 25 Aralık tarihleri arasında her gün birer kez blog yazısı ve video paylaşılacak
- Her içerikte C veya C++ kodu temel alınarak derleyicinin yaptığı ilginç optimizasyonlar inceleniyor
- Her optimizasyon, uygulama koşulları, assembly kodu yorumlama ve uygulanmadığı durumlar dahil olmak üzere detaylı şekilde açıklanır
- Bu, yalnızca basit kod karşılaştırması değil, gerçek derleyici davranışının analizi şeklinde bir yaklaşım sunar
Kapsanan Teknoloji Alanı
- Düşük seviye mimariye göre hilelerden yüksek seviye optimizasyon tekniklerine kadar geniş bir yelpazeyi kapsar
- Ağırlıkla x86-64 ele alınmakla birlikte 64-bit ve 32-bit ARM ile ilgili içerik de kısmen bulunur
- Derleyicinin iç işleyişi ve kod üretim sürecini öğrenebileceğiniz pratik bir kaynak olarak hazırlanmıştır
Katılım ve İzleme
- Blogdaki AoCO2025 etiketi ile tüm gönderiler takip edilebilir
- YouTube kanalı veya özel oynatma listesi ile videolar izlenebilir
- YouTube bağlantısı:
https://www.youtube.com/mattgodbolt - Oynatma listesi bağlantısı:
https://youtube.com/playlist?list=PL2HVqYf7If8cY4wLk7JUQ2f0JXY_xMQm2
- YouTube bağlantısı:
Projenin Önemi
- Yaklaşık bir yıl süren hazırlığın ardından tamamlanan büyük ölçekte bir kişisel proje olarak, derleyicinin hassasiyeti ve verimliliğini incelemek amacını taşıyor
- Geliştiricilerin derleyici optimizasyonunun gerçek çalışma prensiplerini anlamasına ve bunu kod yazarken kullanabilmesine yardımcı olmayı hedefleyen eğitim odaklı bir girişim
- Yazar, “derleyicinin ne kadar şaşırtıcı olduğunu öğrenmenin keyfini” paylaşmak istiyor
Matt Godbolt Hakkında
- Chicago'da yaşayan bir C++ geliştiricisi olarak Hudson River Trading'de çalışıyor
- Two’s Complement podcast'inin ortak sunucusu
- Mastodon ve Bluesky platformlarında aktif
- Blog içeriği Creative Commons BY-NC 3.0 Unported lisansıyla dağıtılıyor
1 yorum
Hacker News yorumu
Matt’in derleyici optimizasyonlarına bakışını inceledikten sonra, onunla yaptığım röportaja da göz atmanızı öneririm
Benim benimsediğim fikir şu: rahat ettiğiniz soyutlama seviyesinde çalışın, ama altındaki katmanı da anlayın
Örneğin bir C programcısıysanız, C çalışma zamanının işletim sistemiyle nasıl etkileşime girdiğini bilmelisiniz. Tüm ayrıntıları bilmeniz gerekmez, ama bir sorun çıktığında nereden bakmaya başlayacağınızı sezebilecek kadar bilmek gerekir
Matt’in yazdığı ACM Queue makalesi de eski bir yazı olsa da bu tür optimizasyon kavramlarını anlamak için çok iyi bir giriş niteliğinde
Mesela Java ile çalışırken JVM’i anlamak, tıbbi yazılımın performansını çok daha iyi optimize etmemi sağladı. Ayrıca sadece o alt katmanı anlamak da eğlenceli
Açıkça bir alan uzmanı olmasına rağmen, doğrudan karmaşık x86 komut setine dalmayıp temel kısımlardan başlayarak adım adım anlatması etkileyici
Matt Godbolt, C ve C++ topluluğunun gerçek bir mücevheri
Compiler Explorer ve katkıları sayesinde pek çok geliştiricinin dünyasının daha iyi bir yer haline geldiğini düşünüyorum
Advent of Computer Science Advent Calendars, Day 2 izliyorum
SQLite’ın kullandığı kod birleştirme (amalgamation) tekniği ilgimi çok çekiyor
SQLite ekibine göre sadece bu yöntem bile %5–10 performans artışı sağlıyor. Matt’in oturum sırasında bu konuya da değinmesini isterim
Referans: Unity build wiki
Yine de LTO artımlı olmayan derlemelerde yavaş olabildiği için, tek seferlik derlemelerde unity build hâlâ faydalı olabiliyor
25 yıldır yazılım geliştiriyorum ama hâlâ en iyi derleyici bayraklarını kullanıp kullanmadığımı merak ediyorum
Çoğu durumda
-O2yeterlidir. Derleyici güncellendikçe iç optimizasyonlar iyileşir, bu yüzden geliştiricinin elle ince ayar yapması genelde gerekmezAyrıca hatalı bir benchmark temel alınarak bayrak eklemek risklidir. Sistem durumuna göre %1–2 performans farkı görmek olağandır
Kodun yapısı değiştiğinde önbellek dostu olma durumu da değişebilir ve bu da performansı etkileyebilir. Yani sebep bayraklar değil, kod yerleşimi olabilir
Kalan yazıları merakla bekliyorum. Bu sabah SBCL’ye
(+ base (* index scale))ve(+ base (ash index n))kalıplarını tek bir LEA komutuna optimize etmeyi öğretmeye çalışıyordum. Yani Day 2’de öğrendiklerimi hemen uygulamış oldumGodbolt içeriğinin ne kadarı olsa yetmez
Tamsayı sabitleriyle bölme işlemini ele almasını isterdim. Hacker’s Delight içindeki ilgili bölüm gerçekten harika ama genel okur için biraz zor gelebiliyor
Bu, derleyici meraklıları için bir Advent of Code gibi
Her gün lokmalık bir optimizasyon dersiyle sezgi geliştirme formatını çok seviyorum
Derleyicinin ne yaptığını ve neden yaptığını anlamak, hangi dili kullanırsanız kullanın sizi daha iyi bir programcı yapar