Her yıl yeni bir programlama dili ortaya çıkıyor ve bilgisayar bilimi sorunlarını çözmek için yeni diller yaratmanın cazibesine karşı koymak pek kolay değil. Bazı kaynaklar, var olan dillerin sayısının 2.500 kadar olduğunu bile öne sürüyor!
Gömülü yazılım geliştiricileri için, bu liste çok daha küçük. Aslında, mikrodenetleyicilerle çalışan geliştiricilerin kullanabileceği dilleri bir elin parmaklarıyla sayabiliriz: C, C++, Rust, Assembly ve Python. Tabii ki, Embedded Linux veya FPGA’larla çalışıyorsanız başka diller de var, ancak mikrodenetleyicilerle çalışan geliştiricilerin göz önünde bulundurduğu dilleri dikkate alıyorum.
Yaklaşık 50 yıldır, C, kaynak açısından kısıtlı sistemlerde baskın dil olmuştur. Genel yazılım dünyasında da C, bu süre boyunca hakim olmuştur. En azından Haziran 2024’e kadar. TIOBE Programlama Topluluğu Endeksi’ne göre, 39 yıl sonra ilk kez C’nin popülaritesi, C++’ın altına düştü.
Dil Popülerliğinin Anlamı
Gömülü yazılım ekipleri ve geliştiriciler, C++’ın C’yi popülerlikte geçmesi konusunda endişelenmeli mi? İlk düşüncem hayır. Dillerin popülaritesi zaman içinde değişir. Tarih boyunca, C++ birkaç kez C’yi geçecek gibi göründü, ancak C’nin popülaritesi yeniden arttı.
Ancak, bu sefer durumun farklı olabileceği düşünülüyor. Genel yazılım endüstrisinde birçok ekip C’den C++ veya Rust’a geçiyor. Hatta Linux çekirdeği bile artık Rust’ı destekliyor! Genel bilgisayar dünyasında C popülaritesini kaybediyor olabilir, ancak gömülü sistemler için hala varsayılan dil olarak kalacaktır. Ancak, ikna olmadım.
Geçmiş on yıllık anket verilerine bakıldığında, C, gömülü sistem projelerinin %80’inde kullanılıyordu. Bugün bu oran %60-70 aralığında. Daha ilginç olanı, C++’ın gömülü projelerde %20-25 oranında kullanılmasıdır. Gömülü ekipler için bile genel eğilim C’den C++’a doğru gidiyor. Rust’ın bu sayıları etkilemesini büyük bir ilgiyle izliyorum.
Bu anketlerdeki dil popülaritesi, bir ekibin bilgisayar bilimindeki genel eğilimlere yönelmesine ve gelecekteki geliştiricilerin hangi becerilere sahip olabileceğine dair fikir verir. Örneğin, Rust’ın artan popülaritesi ve önerileri, kendi dil becerilerimin de yeterli olmasını sağlamak için beni etkiledi.
C’nin üniversite seviyesinde yıllardır öğretilmediği göz önüne alındığında, popülaritesini bu kadar uzun süre koruması şaşırtıcı. Şirketler sürekli olarak geliştiricileri C konusunda eğitmek zorunda kalırken, popülaritesi azalan bir dil için neden beceri yatırımı yapmaya devam edelim?
Miras olarak kalan C kodu sayısız olsa da, tüm yeni kod geliştirmemizi modası geçmiş bir dile bağlamamalıyız. Modern becerilerle ekipleri daha ileri ve daha hızlı götürebilecekken neden yeniliği engelleyelim ve zaman kaybedelim? Mikrodenetleyici satıcılarının “her zaman böyle yaptık” döngüsüne takılıp kaldıklarını düşünüyorum.
Mikrodenetleyicilerin kaynak açısından kısıtlı cihazlar olduğunu ve C’ye ihtiyaç duyduğunu savunabilirsiniz, ancak satıcıların bugün kaynak açısından kısıtlı olarak sunduklarına baktınız mı? 2MB flash ve 768 kB RAM’e sahip ve 160 MHz veya üzeri hızda çalışan Cortex-M33 parçaları. Bu, mikrodenetleyici içinde ilk PC’mden daha fazla işlem gücü!
C++ veya Rust’ın çok yavaş olduğu iddiaları gerçekten incelemeye dayanmaz.
Sonuçlar
C++, tarih boyunca ilk kez en popüler programlama dili olarak C’yi geçti. Bu eğilim devam edecek mi? Zaman gösterecek. Ancak, dil popülaritesinin tüm hikayeyi anlatmadığını kabul etmek önemlidir.
Gömülü bir sistem için dil seçiminin doğru çözümü, şu şekilde olabilir:
- Başlangıç kodu için Assembly dili
- Düşük seviyeli sürücüler ve kart desteği için C
- Uygulama kodu için C++ veya Rust
Tek bir dilin diğerini domine ettiğini düşünürken, aslında zaten tek bir sistemde birden fazla dil kullanıyoruz. Neden bu kullanımı uygulama seviyesinde en fazla faydayı sağlayacak şekilde C++ veya Rust için genişletmeyelim ve C kodunu en rahat olduğumuz yerde tutmayalım?
Bu, C’nin hızını ve esnekliğini ve C++ veya Rust’ın modern teknikleri ve soyutlamalarını en iyi şekilde kullanmamızı sağlar.