ใช่และไม่. ใช่สถานการณ์คลาสสิคเป็นนักพัฒนาที่ใช้คอมไพเลอร์เพื่อสร้างรหัสเครื่องจากซอร์สโค้ดจากนั้นรหัสเครื่องจะถูกแจกจ่ายให้กับผู้ใช้
แม้ว่าจะมีข้อยกเว้นเล็กน้อยในเรื่องนี้ ครั้งแรกโครงการโอเพนซอร์ซจำนวนมากมีการแจกจ่ายเป็นหลัก (หรือแม้แต่เฉพาะ) ในรูปแบบซอร์สโค้ดและคาดว่าผู้ใช้จะติดตั้งได้โดยพิมพ์คำสั่งสองสามคำสั่งเช่นmake
นั้นmake intall
. สิ่งนี้จะเรียกคอมไพเลอร์ตัวเชื่อมโยง ฯลฯ เพื่อสร้างรหัสเครื่องจากซอร์สโค้ดสำหรับคอมพิวเตอร์ของผู้ใช้ ในกรณีเหล่านี้กระบวนการของการสร้างและติดตั้งนั้น (อย่างน้อยตั้งใจให้เป็น) โดยอัตโนมัติจนถึงจุดที่ผู้ใช้ไม่ค่อยต้องการความรู้มากไปกว่าข้อเท็จจริงที่ว่าถ้าพวกเขาไม่เคยติดตั้งแพ็คเกจซอร์สโค้ดเท่านั้น โดยทั่วไปตัวจัดการแพคเกจของพวกเขาจะแสดงรายการแพคเกจ "การพัฒนา" บางอย่างเป็นข้อกำหนดเบื้องต้นสำหรับการติดตั้งแอปพลิเคชันที่พวกเขาสนใจจริง ๆ (แม้ว่าบางคนยังคงเห็นว่านี่ไม่เป็นมิตรกับผู้ใช้ปลายทาง)
อีกข้อยกเว้น (นั่นคือการพาดพิงถึง แต่ไม่ได้อธิบายอย่างดีในคำตอบอื่น ๆ ที่ฉันเคยเห็น) คือคอมไพเลอร์ทันเวลา (JIT) ตัวอย่างที่ชัดเจนของคอมไพเลอร์ JIT คือ Microsoft Common Language Runtime (CLR) และ Java Virtual Machine (JVM) ในกรณีเหล่านี้ปกติจะมีคอมไพเลอร์สองตัวที่เกี่ยวข้องกับการแปลซอร์สโค้ดเป็นรหัสเครื่อง ส่วนหนึ่งถูกใช้โดยผู้พัฒนา อย่างไรก็ตามแทนที่จะสร้างรหัสเครื่องโดยตรงจะสร้างรหัสไบต์ที่ไม่ขึ้นกับเครื่อง จากนั้น CLR / JVM จะมีคอมไพเลอร์ตัวที่สองแยกจากตัวแรกอย่างสิ้นเชิงซึ่งจะแปลงรหัสไบต์เหล่านั้นเป็นรหัสเครื่องสำหรับคอมพิวเตอร์เป้าหมาย
ฉันควรเพิ่มว่าคอมไพเลอร์ที่สองไม่จำเป็นอย่างเคร่งครัด JVM เวอร์ชันก่อนหน้า (ตัวอย่างหนึ่ง) จะตีความรหัสไบต์แทนการคอมไพล์รหัสเหล่านั้น สิ่งนี้มักมีโทษประสิทธิภาพที่ร้ายแรงพอสมควรดังนั้น JVMs ล่าสุดที่มีเหตุผลมากที่สุดสำหรับการใช้งานจริงรวมถึง JIT compiler