Ben de burada tahıl karşı gidip C için (biraz mizahi) estetik bir dava yapmaya çalışacağım Bazı insanlar sınıf gibi üst düzey yapıların eksikliği gibi farklı nedenlerle "çirkin" diyebilirim veya işaretçiler üzerine olan güveni, benim için durumun böyle olmadığını düşünüyorum .
TL; DR : Bence C basit, iyi C okunabilir ve vurma uçlarında bulunmanın mutluluğu var.
C basit
Standart C, bunlardan işlevler, işaretçiler ve diziler oluşturmak için yalnızca birkaç temel türü ve mekanizmayı tanımlar. Bunun da ötesinde, ilkellerden (yapılar ve sendikalar gibi) daha karmaşık türler yapmak için az sayıda kompozisyon yapısı vardır. Dilin çoğunu iki cümleyle nasıl tarif ettiğime dikkat edin . Bu, kodlama sırasında kafanızda çok fazla sözdizimsel kural ve form bulundurmanız gerekmediği anlamına gelir.
Basit güzel .
C gizli değil
Birçok üst düzey dilden farklı olarak, C'de çok sayıda garip, anlaşılmaz sembol bulmak zor olurdu. C dünyasında, hem soyutlama hem de "sözdizimsel sıkıştırma" için ana tesis işlevdir - anlamsal olarak çok basit ve kendini açıklayıcı yapı. İyi C stili neredeyse şiirsel, okunabilir güzelliği teşvik eder. Örneklemek için, aşağıdaki kod parçasını Linux çekirdeğinden okumaya çalışalım. Altta yatan veri yapılarını ve uygulama ayrıntılarını anlamadan bile, aşağıdakiler hakkında çok anlamlı olabiliriz:
bool kthread_freezable_should_stop(bool *was_frozen)
{
bool frozen = false;
might_sleep();
if (unlikely(freezing(current)))
frozen = __refrigerator(true);
if (was_frozen)
*was_frozen = frozen;
return kthread_should_stop();
}
Fonksiyonun ortasında "akımın donması durumunda, buzdolabına gerçekten donma olup olmadığını sorun" yazıyor. Dr. Seuss daha iyi yazamazdı.
Okunabilir güzel .
C şeffaftır
Bir C ifadesi bir işlev çağrısı içermediği sürece, genellikle çalışma zamanı maliyeti ve yan etkileri hakkında çok iyi bir fikir edinebilirsiniz. C programcıya kontrol sağlar ve sonuçta doğru şeyi yapmak için ona güvenir. strlen()
Her operatör iyi tanımlanmış semantiğe sahip olduğundan, bu (SE için hafifçe yeniden biçimlendirilmiş) snippet'in GNU C kütüphanesinde çalıştırılmasından sonra ne olduğuna dair bir resim elde edebiliriz . C'de aşırı yükleme yoktur.
for (char_ptr = str; ((unsigned long int) char_ptr & (sizeof (longword) - 1)) != 0;
++char_ptr)
if (*char_ptr == '\0')
return char_ptr - str;
"Optimize edilebilirlik" amacıyla, bu özellik harika. Tartışmalı olarak, bazı üst düzey diller, üst düzey algoritmaların özlü ifadesini kolaylaştırır (sınıflar ve aşırı yükleme ile C ++ gibi), ancak C'nin taşınabilir bir montajcı olarak hareket etmek için tasarlandığı amaçlar için - C idealdir. Bazen, düşük seviyeli kodun başarılı bir şekilde yürütülmesi üzerine, bir programcı bir anlamda makineyle bir tane hissedebilir (veya sıfırdır - bu bir uygulama detayıdır). Bu, diğer dillerin kötü olduğunu, yeterince "zen" veya bunun gibi aptalca bir şey olmadığı anlamına gelmez, sadece IMO C, birçok geçerli nedenden ötürü, diğer birçok dilin seçmemeyi seçen ilginç olabilir.
Kanımca, yukarıda sunulan üç nokta, Linux tarafından aklımda bulunan karmaşık - ancak verimli - sistemlerin oluşturulmasını yönetilebilir kılmaktadır. Bu dünyanın estetik hassasiyetlerime hitap ettiğini düşünüyorum ve C'yi bir sonraki hedefi olarak düşünen herkese bu noktaları dikkate almasını tavsiye ederim. İşletim sistemleri ve neyin daha iyi ifade edilmediğini açıkça belirterek desteklendiğini hissediyorum çünkü başarılı bir programcı olmak için kesinlikle çekirdeği anlamaya gerek yok, ama bu alanları öznel olarak zorlayıcı bulabiliriz.