Bence bir ayrım var, ancak mutlaka “Derlenmiş” ve “Yönetilen” arasında değil. Bunlar karşıt değiller; bir dil derlenebilir ve yönetilemez veya yorumlanamaz (derlenemez) ve yönetilebilir, ya da her ikisi birden, hatta hiçbiri
"Derlenmiş" bir dil, geliştirici tarafından yazılan kaynak kodunu makine tarafından yürütülen daha düzenli bir "bytecode" a dönüştüren bir adımdır. "Makine", gerçek işlemci veya bayt kodlarında "yerel" makine talimatlarına dönüştürmek için ek işlemler gerçekleştiren bir "sanal makine" olabilir. "Derlenmiş" bir dilin zıttı, kaynak kodunun bir derleme adımı olmadan yürütüldüklerinde satır satır yürütüldükleri sırada satır bayt kodlarına dönüştürüldüğü "yorumlanmış" bir dildir. Aralarındaki bir melez, genellikle yürütme makinesi tarafından tek seferlik bir adım olarak yorumlanan "JIT" (Tam Zamanında) 'dan "jitting" dir;
"Yönetilen" dil, neredeyse her zaman bir bayt kodu yorumlayıcı içeren belirli bir çalışma ortamı ortamında tüketilen programları üretmek için tasarlanmış bir dildir; programın kodunu alan ve ek makine veya ortama özgü dönüşüm gerçekleştiren bir "sanal makine". Ortam ayrıca, "çöp toplayıcı" ve programın alan ve araçların "sanal alanı" içinde çalışmasını amaçlayan diğer "güvenlik" özellikleri gibi bellek yönetimini de içerebilir, ancak bu özellikler "yönetilen" çalışma zamanlarının tek alanı değildir. . Yorumlanan tüm diller yönetilen olarak değerlendirilebilir, çünkü yorumlayıcının yürütülen "kullanıcı" kodu satırlarının altında çalışmasını gerektirirler. Ayrıca, JVM ve .NET dilleri (Java, Scala, C #, VB, F #, IronWhatever), biçim ve işlev olarak ikili bir montaj diline yüzeysel olarak benzer olan, ancak herhangi bir "yerel" komut kümesine% 100 bağlı olmayan bir ara dile veya IL'ye derlenir. Bu talimatlar, JVM veya .NET'in CLR'si tarafından yürütülür; bu, bunları etkili bir şekilde CPU mimarisine ve / veya işletim sisteminin işletim sistemine özgü yerel ikili talimatlara dönüştürür.
Dolayısıyla, diller genellikle "derlenmiş" veya "yorumlanmış" ve "yönetilmeyen" (veya "yerel") ve "yönetilen" olarak tanımlanabilir. Olası "yorumlanmış yerel" dışında bunların herhangi bir kombinasyonu olarak tanımlanabilecek diller vardır (bu sadece geliştirici tarafından yazılanın yürütüldüğü şey elle yazılmış onaltılı opcodlar için geçerli olacaktır); yorumlama katmanını bir "çalışma zamanı" olarak görürseniz (bu tartışması kolay ve tartışması zor), yorumlanan tüm diller "yönetilir".
Teknik olmak istiyorsanız, günümüzde çok görevli bir işletim sistemini hedefleyen neredeyse tüm programlar "yönetilmektedir"; İşletim Sistemi, çalışan her program için programın çalışan tek şey olduğunu düşündüğü (veya en azından aksini bilmek zorunda olmadığı) bir "sanal makine" oluşturur. Kod kendi içinde ve başvurulan diğer kütüphanelere çağrı yapabilir, sanki bu program belleğe yüklenen tek şeymiş gibi; benzer şekilde, veri ve kontrol cihazlarını saklamak ve işlemek için RAM ve daha yüksek bellek tahsis etmeye yönelik çağrılar, tüm bellek mimarisi kullanılabilirmiş gibi kodlanır. VM (ve arkasındaki işletim sistemi) daha sonra çeşitli bellek işaretleyicilerini programın gerçek konumuna, verilerini ve kancalarını aygıt sürücülerine vb. ya da her türlü hafızayı, programın X'in 0 adresi gibi davranabileceği X adresinden başlayarak) ve bunu yapmak çok ucuzdur, ancak işlem zamanlamasının ve süreçler arası iletişim gibi OS çekirdeğinin sorumlu olduğu başka şeyler de vardır. trickier yönetmek için. Bununla birlikte, programın sanal bir makine tarafından çalıştırıldığını bilmek zorunda olmadığı ve genellikle ayrılan belleğini "temiz" tutmaktan sorumlu olduğu için, bu temel model genellikle "yönetilen" olarak kabul edilmez. MS-DOS komut satırında çalıştırılmak üzere tasarlanmış bir program, artık altında MS-DOS ortamına sahip olmayan yeni Windows işletim sistemlerinde çalıştırılabilir; bunun yerine programa "sanal konsol" ortamı verilir ve bu "korumalı alandan" ayrılmaya çalışmaması şartıyla