สตีฟ Yegge เขียนโพสต์บล็อกที่ดีที่ค่อนข้างอ้อมอยู่นี้
จุดใหญ่ # 1:คอมไพเลอร์รวมเอาทุกแง่มุมของวิทยาศาสตร์คอมพิวเตอร์ หลักสูตรนี้เป็นหลักสูตรระดับสูงเพราะคุณจำเป็นต้องรู้สิ่งอื่น ๆ ทั้งหมดที่คุณเรียนในหลักสูตรวิทยาศาสตร์คอมพิวเตอร์เพื่อเริ่มต้นใช้งาน โครงสร้างข้อมูล, การค้นหาและการเรียงลำดับ, ประสิทธิภาพแบบเชิงสัญลักษณ์, การระบายสีด้วยกราฟ? มันคือทั้งหมดที่อยู่ในนั้น
มีเหตุผลหลายอย่างที่ Knuth ได้ทำงานเกี่ยวกับ "Art of Computer Programming" (และไม่มีที่สิ้นสุด) เป็นเวลาหลายสิบปีแม้ว่ามันจะเริ่มเป็นตำราเรียนภาษาคอมไพเลอร์ก็ตาม ในทำนองเดียวกับที่ Carl Sagan กล่าวว่า "หากคุณต้องการสร้างแอปเปิ้ลพายจากศูนย์คุณต้องประดิษฐ์เอกภพก่อน" ถ้าคุณต้องการเขียนคอมไพเลอร์คุณต้องจัดการกับวิทยาศาสตร์คอมพิวเตอร์เกือบทุกด้าน
นั่นหมายความว่าถ้าคอมไพเลอร์เป็นโฮสต์ของตัวเองมันค่อนข้างแน่ใจว่าสามารถทำสิ่งที่ฉันต้องการได้ไม่ว่าฉันจะทำอะไร ในทางกลับกันถ้าคุณไม่ได้เขียนคอมไพเลอร์ในภาษาของคุณมีโอกาสดีที่จะพลาดบางสิ่งที่สำคัญสำหรับใครบางคนเพราะผู้ใช้ภาษาไม่เคยเขียนโปรแกรมที่ต้องการให้พวกเขาคิดถึงปัญหาเหล่านั้นทั้งหมด
จุดใหญ่อันดับที่ 2:จาก 30,000 ฟุตปัญหาที่น่าประหลาดใจดูเหมือนว่าคอมไพเลอร์
คอมไพเลอร์รับกระแสของสัญลักษณ์คิดโครงสร้างของพวกเขาตามกฎที่กำหนดไว้ล่วงหน้าเฉพาะโดเมนบางส่วนและเปลี่ยนให้เป็นกระแสสัญลักษณ์อื่น ฟังดูน่ารักใช่มั้ย ใช่
ไม่ว่าคุณจะอยู่ในทีม Visual C ++ หรือไม่คุณมักจะพบว่าตัวเองจำเป็นต้องทำอะไรบางอย่างที่ดูเหมือนเป็นส่วนหนึ่งของคอมไพเลอร์ ฉันทำมันทุกวันอย่างแท้จริง
โปรแกรมเมอร์ไม่เพียง แต่ใช้เครื่องมือ แต่สร้างเครื่องมือของตัวเอง โปรแกรมเมอร์ที่ไม่สามารถ (เนื่องจากขาดทักษะหรือขาดเครื่องมือที่ใช้งานได้ซึ่งสร้างเครื่องมืออื่น ๆ ) จะไม่สามารถใช้งานได้ตลอดเวลา จำกัด เฉพาะเครื่องมือที่มีคนอื่นจัดไว้ให้
หากภาษานั้น "ไม่เหมาะกับการสร้าง" โปรแกรมที่สามารถนำกระแสของสัญลักษณ์การใช้กฎกับพวกเขาและเปลี่ยนมันเป็นกระแสของสัญลักษณ์อื่นซึ่งฟังดูเหมือนเป็นภาษาที่ค่อนข้าง จำกัด และไม่ใช่ภาษาที่มีประโยชน์ ถึงฉัน.
(โชคดีที่ฉันไม่คิดว่ามีภาษาการเขียนโปรแกรมมากมายที่ไม่เหมาะสมในการเปลี่ยนสัญลักษณ์ C อาจเป็นภาษาที่เลวร้ายที่สุดที่ใช้กันในปัจจุบัน แต่คอมไพเลอร์ C มักจะโฮสต์ด้วยตนเองดังนั้นจึงไม่เคยหยุดใครเลย)
เหตุผลที่สามที่ฉันจะจบลงจากประสบการณ์ส่วนตัวที่ไม่ได้พูดถึงโดย Yegge (เพราะเขาไม่ได้เขียนเกี่ยวกับ "ทำไมต้องโฮสต์ตัวเอง"): มันทำให้เกิดข้อบกพร่อง เมื่อคุณเขียนคอมไพเลอร์นั่นหมายความว่าทุกครั้งที่คุณสร้างมัน (ไม่ใช่เฉพาะทุกครั้งที่คุณเรียกใช้ ) คุณจะต้องพึ่งพามันในการทำงานและทำงานอย่างถูกต้องกับ codebase ขนาดพอเหมาะ (คอมไพเลอร์เอง)
เดือนนี้ฉันใช้คอมไพเลอร์ที่ไม่โฮสต์ตัวเองที่โด่งดังและมีชื่อเสียง (คุณอาจเดาได้ว่าอันไหน) และฉันไม่สามารถไปได้ 2 วันโดยไม่แยกแยะสิ่งนั้น ฉันสงสัยว่าจริง ๆ แล้วนักออกแบบต้องใช้มันเท่าไหร่