Direkt makine kodunu yazmak (sıkıcı ise) mümkündür. Belki de programı bir araya getirerek bir kağıda yazıp, makinenin hafızasına girdiğiniz sayısal makine kodu talimatlarına elle çeviriyorsunuz. Tüm makine kodu talimatlarının sayısal değerlerini hafızaya aldıysanız, o günlerde nadir görülmeyen, inandığınız veya inanmadığınız takdirde, kağıt üzerine montaj adımını bile atlayabilirsiniz!
İlk bilgisayarlar doğrudan fiziksel anahtarlar değiştirilerek ikili olarak programlandı. Donanım, programcının (veya veri giriş asistanının) bir tuş takımı aracılığıyla onaltılık sayılarla kod girmesine izin vermek için geliştiğinde büyük bir verimlilik artışıydı!
Bir yazılım montajcısı, yalnızca daha fazla bellek bulunduğunda (montaj kodu, ham makine kodundan daha fazla yer kapladığından) ve donanım, alfasayısal girişe izin verecek şekilde geliştiğinde alakalı olur. Böylece ilk montajcılar doğrudan makine kodunda akan insanlar tarafından yazılmıştır.
Bir assembler olduğunda, assembler'da daha yüksek bir dil için bir derleyici yazabilirsin.
C'nin hikayesinin birden fazla adımı var. İlk C derleyicisi, BCPL'de yazılmış olan B'ye (C'nin öncülü) yazılmıştır. BCPL oldukça basit bir dildir (örneğin hiç türü yoktur), fakat yine de ham birleştirme programından bir adım ötede. Böylece, daha karmaşık dillerin montajcıya kadar basit dillerde ne kadar kademeli olarak oluşturulduğunu görüyorsunuz. Ve kendisi C bugünün standartlarına göre oldukça küçük ve basit bir dildir.
Bugün, yeni bir dilin ilk derleyicisi genellikle C dilinde yazılmıştır, ancak dil belirli bir olgunluğa ulaştığında, genellikle "kendi içinde" yeniden yazılır. İlk Java derleyicisi C ile yazılmıştır ancak daha sonra Java ile yeniden yazılmıştır. İlk C # derleyicisi C ++ dilinde yazılmıştır, ancak son zamanlarda C # dilinde yeniden yazılmıştır. Python derleyicisi / yorumlayıcısı C dilinde yazılmıştır, ancak PyPy projesi Python'da yeniden yazma girişimidir.
Yine de, dilin kendisindeki bir dil için derleyici / tercüman yazmak her zaman mümkün değildir. JavaScript'te yazılmış bir JavaScript tercümanı var, ancak mevcut tarayıcılardaki derleyiciler / tercümanlar performans nedenleriyle hala C veya C ++ dilinde yazılıyor. JavaScript'te yazılmış JavaScript sadece çok yavaş.
Ancak bir derleyici için C'yi "başlangıç dili" olarak kullanmak zorunda değilsiniz. İlk F # derleyicisi, F # ile en yakından ilişkili olan diğer dil olan OCaml'de yazılmıştır. Derleyici tamamlandığında, F # ile yeniden yazılmıştır. Perl 6 için ilk derleyici Haskell'de ( Perl'den çok farklı, tamamen işlevsel bir dil ) yazılmış, ancak şimdi C'de yazılmış bir derleyici var.
İlginç bir örnek, ilk derleyicinin OCaml'da yazıldığı Rust (şimdi Rust'ta yeniden yazılmıştır). Bu dikkate değerdir, çünkü OCaml genellikle metale yakın bir sistem dili olan Rust'tan daha yüksek olarak kabul edilir. Bu nedenle, her zaman alt seviye dillerde uygulanan daha yüksek seviyeli diller değil, bunun tersi de olabilir.