"Interpreted" və "Compiled" proqramlaşdırma dilləri
- 24 Yanvar 2024
- 4 dəqiqə
Adətən proqramçılar tərəfindən yazılmış kodlar kompüterlər tərəfindən birbaşa oxuna bilmir. Çünki kompüterlər o dilləri başa düşmür. Onların başa düşdüyü tək dil 0 və 1-lərdən ibarətdir. Bu 0 və 1-lərdən ibarət koda binary code deyilir. Nümunə üçün aşağıdakı diaqrama baxaq.
Proqramlaşdırma dilləri hər nə qədər qəribə səslənsə də, kod yazma təcrübəsini rahatlaşdırmaq məqsədi ilə əslində insanlar üçün hazırlanıb. Birbaşa maşın dilində yazmaq diaqramdan da göründüyü kimi, çox da sevimli bir yol deyil 😅
Yazılan kodlar icra olunma formasına görə iki növə ayrılır:
Interpreted (tərcümə olunmuş - sinxron tərcümə kimi) və Compiled (tərtib edilmiş).
Interpreted proqramlaşdırma dillərində yazılan kodlar kompüterdə xüsusi proqram tərəfindən sətir-sətir oxunduqca icra olunur. Interpreted dillər kompüter tərəfindən birbaşa oxuna bilmir. Mütləq şəkildə kodu maşın tərəfindən anlaşılan dilə çevirə bilən “tərcüməçi” proqrama (interpreter) ehtiyac olur. Interpreted dillərə PHP, Javascript və s. dillərini nümunə gətirə bilərik.
Compiled proqramlaşdırma dillərində yazılan kodlar isə sətir-sətir oxunmaq əvəzinə əvvəlcədən bütövlükdə maşın dilinə çevrilir, sonra isə komputerin özü tərəfindən oxunur və icra olunur. Compiled dillərə C, C++ və s. daxildir.
Əgər real həyatdan nümunə verəsi olsaq:
Bir aşbaz düşünün. Əlindəki, baş aşbazdan gələn reseptə uyğun yemək hazırlamalıdır. Amma resept çin dilindədir. Aşbaz bu dili bilmir. Bu halda aşbazın iki yolu var. Ya əlindəki resepti hansısa tərcüməçiyə tərcümə elətdirib, təhvil almalı və oxuyub icra etməlidir (eyni compiled proqramlaşdırma dillərində olduğu kimi). Ya da həmin tərcüməçi, resepti sətir-sətir oxuduqca, aşbaz da orada yazılanları icra etməlidir (eyni interpreted proqramlaşdırma dillərində olduğu kimi).
Compiled dillərdə yazılmış kodun icra olunması üçün mütləq şəkildə o, öncə, xüsusi compiler proqramlar tərəfindən compile (birləşdirmək, tərtib etmək, maşın dilinə çevirmək) olunmalıdır. Bu da öz növbəsində belə bir mənfi xüsusiyyət yaradır:
Proyektdə kiçik də olsa nəsə dəyişiklik etmək istəyiriksə, etdikdən sonra onu mütləq yenidən compile etməliyik.
Yuxarıdakı aşbaz nümunəsi üzərindən gedəsi olsaq, əgər baş aşbaz reseptdə dəyişiklik edib yenidən digər aşbaza göndərsə, aşbaz onu əvvəlki qaydada, tərcüməçiyə əvvəldən sona qədər tərcümə etdirməli, tərcümə olunmuş resepti təhvil alıb yenidən resept üzrə icraya başlamalıdır. Artıq köhnə resept yararsız sayılır deyə bilərik.
Interpreted dillərdə isə yazılmış kodların icrası üçün compile mərhələsi olmur. Yazılan kod bir başa icra üçün hazır sayılır və edilən dəyişiklik dərhal öz əksini tapır. Yenə də aşbaz nümunəsinə qayıdası olsaq:
Baş aşbaz reseptdə dəyişiklik etmək üçün digər aşbazdan eyni resepti təhvil alır, əvvəl yazdığı bəzi elementləri silir və yerinə yenilərini əlavə edir, sonra isə yenidən geri göndərir. Resepti təhvil alan digər aşbaz həmin resepti yenə də, yanındakı tərcüməçiyə sətir-sətir oxuması üçün verir.
Compiled dillər yoxsa Interpreted dillər? Hansı üstündür?
Əslində hər birinin özünə uyğun müsbət və mənfi cəhətləri vardır. Ümumiləşdirəsi olsaq:
- Interpreted dillərdə yazılan kodlar birbaşa icra üçün hazır olur. Compiled dillərdə yazılmış kodlar isə mütləq şəkildə əvvəlcə compile edilməlidir.
- Compiled dillərdə yazılmış kodlar maşın dilinə öncədən çevrildiyi üçün daha sürətli şəkildə icra olunur və maşının hardware (daxili) hissələri üzərində (CPU, RAM, Memory) idarə qabiliyyətinə malik olur. Interpreted dillərdə yazılmış kodlar isə real vaxt ərzində sətir-sətir tərcümə olunduğu üçün performans cəhətdən compiled dillərdən daha yavaşdır və maşının hardware hissəsi ilə bağlı idarəetmələr adətən arxa fonda avtomatik aparılır.
- Compiled dillərdə yazılan kodda olan bir sıra xətalar (compilation errors - kodun strukturunda olan xətalar, sintaksis xətaları [kodun yazılış qaydalarından kənara çıxmaq - məs. "print" açar sözü yerinə "primt" yazmaq və ya sonda ; işarəsini qoymamaq kimi] və s.) compile zamanı compiler tərəfindən aşkar olunur və aradan qaldırmadıqca compile etmək mümkün olmur (compile time error). Interpreted dillərdə isə xətalar kodun icrası zamanı (runtime error) üzə çıxır.
Bəzi proqramlaşdırma dillərində hər iki yanaşmanın üstünlüklərindən faydalana bilmək üçün həm interpreted, həm də compiled yanaşmalar tətbiq edilir.
Məsələn, JAVA dilində yazılmış kod Java compiler tərəfindən intermediate code (orta səviyyəli kod) olaraq bytecode (maşın dilinə ən yaxın dil) dilinə çevrilir. Sonra isə JVM (Java Virtual Machine - interpreter) bu kodu icra zamanı maşın dilinə çevirir və kod icra olunur.