Evet ve hayır. Evet, klasik senaryo, kaynak koddan makine kodu oluşturmak için bir derleyici kullanan bir geliştiricidir ve makine kodu daha sonra kullanıcılara dağıtılır.
Orada olan bu olsa birkaç istisna. İlk olarak, birçok açık kaynak projesi öncelikle (veya sadece) kaynak kodu biçiminde dağıtılır ve son kullanıcının bunları make
ve ardından gibi birkaç komut yazarak bunları yüklemesini bekler.make intall
. Bu, derleyiciyi, bağlayıcıyı, vb., Söz konusu kullanıcıların bilgisayarının kaynak kodundan makine kodunu üretmelerini sağlar. Bununla birlikte, bu durumlarda, inşaat ve kurulum süreci (en azından amaçlanan), kullanıcının daha önce hiç kaynak kodu içermeyen bir paket kurmamış olmasının ötesinde, nadiren bunun hakkında çok fazla bilgiye ihtiyaç duyduğu noktaya kadar otomatikleştirilir. , paket yöneticileri genellikle bazı "geliştirme" paketlerini gerçekten önem verdikleri uygulamayı yüklemek için bir önkoşul olarak listeler (bazıları bunu hala son kullanıcılara düşmanca görür).
Başka bir istisna (gördüğüm, ancak gördüğüm diğer cevaplarda çok iyi açıklanmayan) tam zamanında (JIT) derleyiciler. JIT derleyicilerinin birkaç açık örneği Microsoft Ortak Dil Çalışma Zamanı (CLR) ve Java Sanal Makinesi'dir (JVM). Bu durumlarda, normalde kaynak kodunu makine koduna çevirmekle ilgili iki tamamen ayrı derleyici vardır. Biri geliştirici tarafından kullanılır. Ancak, doğrudan makine kodu üretmek yerine, makineden bağımsız bir bayt kodu üretir. CLR / JVM daha sonra bu bayt kodlarını hedef bilgisayar için makine koduna dönüştüren birinciden tamamen ayrı olan ikinci bir derleyici içerir .
İkinci derleyicinin kesinlikle gerekli olmadığını da eklemeliyim. JVM'nin ilk sürümleri (bir örnek için) bayt kodlarını derlemek yerine yorumladı. Bu genellikle oldukça ciddi bir performans cezası taşır, bu nedenle üretim amaçlı amaçlanan en makul JVM'ler arasında bir JIT derleyicisi bulunur.