Şunu demek istiyorum geçenlerde Linux çekirdek kodlarını merak edip açtım. Kod dosyaları .c ile bitiyor. Peki bilgisayar bu C dilini nasıl anlayabiliyor? Python ile kernel yazamaz mıyız yani? Bilgisayar piyasaya çıktıktan sonra C diline güncelleme gelse kodları okuyamaz mı? Bu konularda bilgim yok aydınlatırsanız sevinirim.
Derleyici programlar bunun için var. Derleyici programlar önce "assembly" denen dile dönüştürüp daha sonra bilgisayarın anlayabileceği programlar haline getiriyor.
Bilgisayar sadece 0 ve 1'leri anlar, yazılım dilleri derlenerek 0 ve 1'lere yani bilgisayarın anlayacağı dile dönüştürülür. Bu konu derya deniz ve python veri analizine yönelik bir dildir, kernel yazabilen varsa buyursun yazsın takdir ederim.
Python sanırım "script" mantığıyla çalışıyor. Bu yüzden Python kodlarını çalıştırmak için Python'un yüklü olması gerekiyor. Aynı zamanda Python yüksek seviye bir dil, düşük seviye için uygun da değil. Bu nedenle Python ile çekirdek yazamazsınız.
Yandaki adımlarda da gördüğün gibi senin yazdığın kodlar bir compiler yardımı ile assembly kodlarına dönüşüyor. Bu assembly kodlar hala bilgisayarın anlayabileceği düzeyde değildir. Daha sonra assembler adı verilen birim bu kodları makine diline dönüştürür. Bu makine dili binary yapıda yani "0" ve "1"lerle yazılır.
Direkt olarak low-level programlama da mümkündür. Yeni direkt makine dili ile de program yazılabilir.
Linux çekirdek kodlarının C ile yazılmasının sebebi birçok programlama dilinin de C temelli olması ile aynı sebeptir.
Python compile edilen bir dil değildir. Python da C tabanlıdır. Bu tarz dillere high-level diller denir ve script tabanlıdır. Script tabanlı diller bir hata olsa dahi çalışmaya başlar ve hata sırasında işlemi sonlandırırlar. Compile edilen low-level dillerde hata olduğunda program çalışmaz. Bu en temel farklarıdır.
C ve Python gibi diller bilgisayarlar anlasın diye değil, biz insanlar anlayalım diye varlar. Bilgisayarın anladığı tek dil makine kodu. O da binary 1´ler ve 0´lardan oluşan sinyaller aslında. Compilerlar ya da interpreterlar insanların anladığı programlama dillerini bilgisayarın anladığı makine koduna dönüştürürler. Compiler bunu source kodun üzerinden bir ya da iki kez baştan sona geçerek binary executable bir dosya oluşturarak yapar. Interpreter farklı olarak source kodu okuyup anlık olarak çalıştırır. Binary dosya üretmez. Binary dönüşüm anlık olarak gerçekleştiği için programda bir error varsa bu program çalışırken ortaya çıkarlar. Compiler dillerde bu hata compile time esnasında ortaya çıkar.