Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 14293|Yanıt: 2

[C] C dili çok güçlü, hangi dilde yazılmış?

[Bağlantıyı kopyala]
Yayınlandı 28.09.2019 16:51:21 | | |
"C hangi dilde yazılmış?"

Başka bir açıdan bakıldığında, durum şu: C dili çalışmadan önce derlenmesi gerekir, peki C dili derleyicisi nereden geliyor? Hangi dilde yazılmış? Eğer C harfi ile yazıyorsa, önce yumurta mı yoksa tavuk mu var?

1

Dünyada derleyici olmadığını varsayalım, makine diliyle başlayalım, nasıl yapılacağını görelim.

Makine dili, derleyiciye ihtiyaç duymadan doğrudan CPU tarafından çalıştırılabilir.

Sonra assembly dili vardır, ancak assembly dili sadece makine dili için bir hattılık olarak kullanılır, ancak çalıştırmak için makine diline derlenmesi gerekir, bu yüzden bu ilk derleyiciyi (gelecekte kullanılmayacak) makine diliyle yazmaktan başka seçenek yoktur.

Assembly dili sorunu çözüldü ve bu büyük bir ilerleme oldu; şu anda assembly diliyle C dili derleyicisini yazmak mümkün oldu; biz bunun C derleyicisinin atası olduğunu söylemiyoruz.

Bu atayla herhangi bir C dili programını derleyebilirsiniz, yani C dilinde bir derleyici yazabilir misiniz? Sadece atalarla derleyin.

Tamam, böyle bir katmandan sonra sonunda C dilinde yazılmış bir derleyici buldum, bu gerçekten sorunlu.

Bu noktada, önceki paket tarafından yazılmış C derleyicisi terk edilebilir.

Elbette, C'den önce Pascal gibi başka yüksek seviyeli diller varsa, Pascal C derleyicisi yazmak için kullanılabilirdi.

İlk Pascal'ın derleyicisinin Fortran ile yazıldığı söylenir. İlk yüksek seviyeli dil olarak, Fortran'ın derleyicisi assembly dilinde yazılmalıdır.

2

İşte derleyici hakkında ilginç bir efsane:

Efsaneye göre, Unix'in mucitlerinden biri olan Ken Thompson, Bell Labs'taki herhangi bir Unix makinesine gururla gelir, kullanıcı adını ve şifresini girmiş ve root yolundan giriş yapabiliyordu!

Bell Labs yetenekle dolu ve bazı büyük adamlar bu zafiyeti bulmaya yemin etti, Unix'in C kaynak kodunu okudular ve sonunda giriş arka kapısını buldular, arka kapıyı temizledikten sonra Unix'i derleyip çalıştırdılar ama Thompson yine de giriş yapabildi.

Bazı kişiler derleyicide bir sorun olabileceğini düşünüyor ve Unix derlenirken bir arka kapı yerleştirilmiş, bu yüzden C dilinde bir derleyici yeniden yazılmış ve Unix'i yeni bir derleyiciyle tekrar derlemişler.

Ama yine de çalışmıyor, Thompson root ile giriş yapabiliyor, bu gerçekten yıkıcı!

Daha sonra Thompson sırrı bizzat açtı, bu sorun yaşayan ilk C derleyicisiydi, bu derleyici elbette Unix kaynak kodu derlerken arka kapıya yerleştirilecek, bu yeterli değil, daha da iyisi, eğer C dilinde yeni bir derleyici yazarsanız, kesinlikle ikili kod olarak derlemeniz gerekir, ne derlemelisiniz, sadece Thompson tarafından yazılmış ilk derleyiciyi kullanarak derleyin, tamam, yazdığınız derleyici kirlenmiş olacak, derleyiciniz tekrar Unix derleyecek, Ayrıca bir arka kapı da takacağım :-)

Bu arada, birkaç yıl önceki XcodeGhost olayı hatırlıyor; bu sadece Xcode'a (resmi olmayan kanallardan indirilmiş) bir Truva atı yerleştirildiği anlamına geliyor; böylece XCode tarafından derlenen iOS uygulamaları kirlenmişti ve bu uygulamalar hackerlar tarafından yasa dışı şeyler yapmak için kullanılabiliyordu.

Bu XCodeGhost Thompson'unkinden çok uzak olsa da, yazılım indirirken resmi kanalları kullanmanız, resmi web sitesinden indirmeniz, sitenin HTTPS standardını aramanız ve hatta kontrol toplamını doğrulamanız gerektiğini hatırlatıyor.

3

Bazı insanlar şunu sorabilir: Ben Hui'yi Hello World paragrafı için kullanıyorum, ama biri karmaşık bir derleyici yazmak için bunu kullanabilir? Bu mümkün mü?

Tabii ki, Unix'in ilk nesli geliştirildiğinde C dili yoktu ve Ken Thompson ile Dennis Ritchie Unix'i montaj hatlarıyla yazıyordu.   WPS'nin ilk versiyonu Qiu Bojun tarafından Hui'de yazılmıştır ve Turbo Pascal'ın derleyicisi de Anders tarafından Hui'de yazılmıştır; tanrıların yetenekleri sıradan insanlar için hayal edilemez.

Derleyiciler için ayrıca "kar topu" şeklinde geliştirmek de mümkündür:

C dilini örnek alarak, ilk sürüm C dilinin bir alt kümesini seçebilir; örneğin sadece temel veri türleri, süreç kontrol ifadeleri ve fonksiyon çağrılarını destekleyebilir...... Buna C0 diyoruz.

Sonra assembly dilinde bir derleyici yazın ve bu dilin sadece bir alt kümesini C0 alır, böylece yazmak çok daha kolay olur.

C0 dili çalışıyor ve ardından bu alt kümeyi structs, pointer, ...... ekleyerek genişletiyoruz ve yeni dili C1 çağırıyoruz.

C1 dili için derleyiciyi kim yazıyor?   Doğal olarak, C0.

C1 çalışırken, dil özelliklerini tekrar genişletin, derleyiciyi C1 ile yazın ve C2'yi alın.

Sonra C3, C4 var......  Son olarak, tam C dili elde ediliyor.

Bu sürece bootstrapping denir ve Çince'de bootstrapping denir.





Önceki:Yeni .NET Core özellikleri, tek dosyalı bir yürütülebilir dosya yayınlar
Önümüzdeki:Neden programcılar sonsuz fazla mesai yapıyor?
Yayınlandı 29.09.2019 09:27:54 |
C hangi dilde yazılır?
Yayınlandı 1.10.2019 23:54:34 |
C hangi dilde yazılır?
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com