ฉันไม่ได้เกลียดการใช้ภาษาแอสเซมบลีเนื่องจากฉันได้เขียนบางอย่างในหลักสูตรระบบปฏิบัติการของฉัน แต่เห็นได้ชัดว่าภาษาแอสเซมบลีขาดสิ่งที่เป็นนามธรรมคุณต้องให้ความสำคัญกับรายละเอียดมากขึ้น
ภาษาแอสเซมบลีจำเป็นอย่างยิ่งที่จะเขียน TAOCP หรือไม่
ฉันไม่ได้เกลียดการใช้ภาษาแอสเซมบลีเนื่องจากฉันได้เขียนบางอย่างในหลักสูตรระบบปฏิบัติการของฉัน แต่เห็นได้ชัดว่าภาษาแอสเซมบลีขาดสิ่งที่เป็นนามธรรมคุณต้องให้ความสำคัญกับรายละเอียดมากขึ้น
ภาษาแอสเซมบลีจำเป็นอย่างยิ่งที่จะเขียน TAOCP หรือไม่
คำตอบ:
เขาไม่เพียง แต่ใช้ MIXAL ซึ่งเป็นภาษาแอสเซมบลีของเขาสำหรับ MIX แต่ยังรวมถึง MIX ซึ่งเป็นแบบจำลองสำหรับคอมพิวเตอร์แบบง่าย ๆ (เช่นเดียวกับที่ใช้ในยุคหกสิบเศษ) นี่เป็นตัวอย่างสำหรับการสอนซึ่งเขามีอิสระจากการพัฒนาในสาขานี้
หากเขาต้องการใช้ภาษาการเขียนโปรแกรมอื่น (คุณคิดว่าจะเหมาะกับภาษาใด) โดยพูดว่า NPL (ภาษาการเขียนโปรแกรมที่ดี) เขาจะต้องละทิ้งแนวคิดการใช้ MIX หรือเพื่อแนะนำ คอมไพเลอร์ของภาษาคอมพิวเตอร์บางตัวเลือก (ซึ่งเป็นสิ่งที่ซับซ้อนยิ่งกว่าสิ่งที่เขาจัดการในฉบับที่ 1) ด้วยวิธีนี้มันจะไม่กลายเป็น TAOCP แต่เป็น TAONPLP คนแรกเป็นอิสระจากตัวเลือกดังกล่าวและด้วยเหตุนี้จึงไม่มีเวลาในหนังสือสองสามเล่มเกี่ยวกับการเขียนโปรแกรม อันที่สองคงถูกลืมไปแล้วในตอนนี้ ...
นอกจากนี้ตราบใดที่คอมพิวเตอร์ทำงานในหลักการเดียวกับที่ MIX ของเขาทำมันก็เป็นสิ่งที่ดีถ้าคุณสนใจที่จะเรียนรู้วิธีทำงานกับพวกเขา
บางครั้งคุณวิปเปอร์สแน็ปเปอร์ทำให้ฉันประหลาดใจ พวกคุณทุกคนก็มักจะไม่รู้ว่าอะไรเกิดขึ้นก่อนที่คุณจะเข้าโรงเรียน (ฉันมีปัญหาเดียวกันฉันต้องใช้เวลานานกว่าจะเข้าใจว่า 15 ปีจริง ๆ แล้วเป็นเวลาสั้น ๆ จากมุมมองของผู้ใหญ่นั่นคือช่วงจากฮิโรชิมาไปจนถึงวิกฤตการณ์ขีปนาวุธคิวบาสำหรับฉันสงครามโลกครั้งที่สองเป็นเพียง ประวัติศาสตร์ แต่พ่อของฉันต่อสู้ในนั้นและแม่ของฉันอยู่ในระดับมัธยมศึกษาตอนต้นในช่วงนั้น)
TAOCP ฉบับที่ 1 "อัลกอริทึมพื้นฐาน" รุ่นที่ 1 ถูกตีพิมพ์ครั้งแรกในปี 1968 นั่นคือ 45 ปีที่ผ่านมา Knuth เริ่มวางแผนซีรีย์ให้ดีก่อนหน้านั้น
สำหรับการอ้างอิง: Intel 8086 ปรากฏตัวครั้งแรกในปี 1978 สิบปีต่อมา ภาษา PASCAL ปรากฏตัวครั้งแรกในปี 1971; หนังสือ Jensen & Wirth เกี่ยวกับภาษารุ่นที่สองออกมาในปี 1974 การพัฒนาเริ่มต้นของ C คือ 1969-1973: K&R ถูกตีพิมพ์ในปี 1978
Knuth ตั้งใจให้ซีรี่ส์ครอบคลุมพื้นที่ เขากำหนดรูปแบบแล้วจะเป็นประโยชน์กับผู้ปฏิบัติงานแล้ว เขาไม่เคยคาดหวังว่าซีรีส์นั้นจะกลายเป็นงานในชีวิตของเขาอย่างแท้จริงหรือการเขียนเพื่อขยายสิ่งที่อาจจะดีกว่าครึ่งศตวรรษเมื่อเขาเสร็จสิ้นในที่สุด
ภาษาแอสเซมบลีไม่ได้มีความสำคัญเหมือนสมัยนี้ แต่ก็ยังมีความสำคัญมากกว่าภาษา Java / C ++ / Javascript / Python / Perl ที่อยากให้ทุกคนเชื่อ
ตอนนี้รับของฉันออกกฎหมาย!
Knuth กล่าวถึงเหตุผลของเขาในคำนำ ฉันจะพูดเพียงไม่กี่ชิ้นและชิ้น:
... ฉันจำเป็นต้องตัดสินใจว่าจะใช้ภาษาพีชคณิตเช่น ALGOL หรือ FORTRAN หรือใช้ภาษาที่เน้นด้วยเครื่องจักรเพื่อจุดประสงค์นี้ บางทีผู้เชี่ยวชาญคอมพิวเตอร์ในปัจจุบันหลายคนอาจไม่เห็นด้วยกับการตัดสินใจของฉันที่จะใช้ภาษาที่ใช้กับเครื่อง แต่ฉันเชื่อว่ามันเป็นตัวเลือกที่ถูกต้องแน่นอนด้วยเหตุผลดังต่อไปนี้:
- ภาษาพีชคณิตเหมาะกับปัญหาเชิงตัวเลขมากกว่าปัญหาที่ไม่ใช่ตัวเลขที่พิจารณาที่นี่ [... ]
- ... โดยการเขียนด้วยภาษาที่ใช้ภาษาเครื่องโปรแกรมเมอร์จะมักใช้วิธีที่มีประสิทธิภาพมากกว่า มันใกล้ความเป็นจริงมาก
- โปรแกรมที่เราต้องการคือมีข้อยกเว้นเล็กน้อยทั้งหมดค่อนข้างสั้น ...
- บุคคลที่มีความสนใจในคอมพิวเตอร์มากกว่าควรศึกษาในภาษาเครื่อง ...
- ภาษาเครื่องบางภาษาอาจจำเป็น
แม้ว่าเขาจะไม่ได้ชี้ให้เห็นโดยตรง แต่ฉันคิดว่าการพูดถึง ALGOL และ FORTRAN ชี้ไปที่ปัญหาอื่นที่เขาหลีกเลี่ยงซึ่งอาจสำคัญกว่า สมมติว่าเขาเลือก Algol (เห็นได้ชัดว่าเหมาะกับโปรแกรมที่ไม่ใช่ตัวเลขมากกว่า Fortran อยู่แล้ว) ฉันจะวางตัวว่าอัลกอลอาจจะเป็นชาวต่างชาติมากขึ้นสำหรับโปรแกรมเมอร์ส่วนใหญ่ในปัจจุบันมากกว่าภาษาแอสเซมบลีที่เขาเลือก
สำหรับฉบับที่สามเขาได้ออกแบบ MIX ใหม่เพื่อให้เข้ากับโปรเซสเซอร์ที่ทันสมัยยิ่งขึ้นและต้องเขียนโค้ดใหม่อีกครั้ง อย่างไรก็ตามฉันต้องการโพสต์ที่เขาใช้ภาษาระดับสูงกว่าการเขียนใหม่จะยิ่งใหญ่กว่าและเหตุผลทั้งหมดที่เขาให้จะยังคงอยู่เช่นกัน
Knuth ได้อัปเดตเหตุผลของเขาเช่นกัน:
ทำไมต้องมีภาษาของเครื่อง?
ผู้อ่านหลายคนไม่ต้องสงสัยเลยว่า `` ทำไม Knuth จึงมาแทนที่ MIX ด้วยเครื่องอื่นแทนที่จะใช้ภาษาโปรแกรมระดับสูง? ทุกวันนี้แทบจะไม่มีใครใช้แอสเซมเบลอร์ ''
ผู้คนเหล่านี้มีสิทธิ์รับความคิดเห็นของตนเองและพวกเขาไม่จำเป็นต้องอ่านส่วนภาษาเครื่องของหนังสือของฉัน แต่เหตุผลของภาษาเครื่องที่ฉันให้ไว้ในส่วนนำของเล่ม 1 ที่เขียนในช่วงต้นทศวรรษ 1960 ยังคงใช้ได้ในปัจจุบัน:
- หนึ่งในเป้าหมายหลักของหนังสือของฉันคือการแสดงให้เห็นว่าการก่อสร้างระดับสูงนำไปใช้จริงในเครื่องจักรได้อย่างไร ฉันอธิบายการเชื่อมโยงของ coroutine โครงสร้างของต้นไม้การสร้างตัวเลขสุ่มการคำนวณเลขคณิตความแม่นยำสูงการแปลงฐานข้อมูลการจัดเก็บข้อมูลการค้นหาแบบ combinatorial การเรียกซ้ำเป็นต้นจากพื้นดิน
- โดยทั่วไปโปรแกรมที่ต้องการในหนังสือของฉันสั้นมากจนสามารถเข้าใจได้ง่าย
- ผู้ที่มีความสนใจในคอมพิวเตอร์มากกว่าคนทั่วไปควรมีความคิดอย่างน้อยเกี่ยวกับฮาร์ดแวร์พื้นฐาน มิฉะนั้นโปรแกรมที่พวกเขาเขียนจะค่อนข้างประหลาด
- ภาษาเครื่องจำเป็นในทุกกรณีเนื่องจากผลลัพธ์ของโปรแกรมซอฟต์แวร์ที่ฉันอธิบาย
- การแสดงวิธีการขั้นพื้นฐานเช่นอัลกอริทึมสำหรับการเรียงลำดับและการค้นหาในภาษาเครื่องทำให้สามารถทำการศึกษาที่มีความหมายเกี่ยวกับผลกระทบของขนาดแคชและ RAM และลักษณะของฮาร์ดแวร์อื่น ๆ (ความเร็วหน่วยความจำ ฯลฯ ) เมื่อเปรียบเทียบรูปแบบที่แตกต่างกัน
ยิ่งกว่านั้นถ้าฉันใช้ภาษาระดับสูงมันควรใช้ภาษาอะไร ในทศวรรษที่ 1960 ฉันน่าจะเลือก Algol W; ในปี 1970 ฉันจะต้องเขียนหนังสือใหม่ด้วย Pascal ในปี 1980 ฉันจะเปลี่ยนทุกอย่างเป็น C อย่างแน่นอน ในปี 1990 ฉันต้องเปลี่ยนไปใช้ C ++ และอาจเป็น Java ในยุค 2000 ภาษาอื่นไม่ต้องสงสัยเลยว่าเดอริกูร์ ฉันไม่สามารถมีเวลาในการเขียนหนังสือของฉันเป็นภาษาที่เข้าและออกจากแฟชั่น; ภาษาไม่ใช่จุดประสงค์ของหนังสือของฉัน แต่เป็นสิ่งที่คุณสามารถทำได้ในภาษาที่คุณโปรดปราน หนังสือของฉันเน้นที่ความจริงอมตะ
ดังนั้นฉันจะใช้ภาษาอังกฤษเป็นภาษาระดับสูงใน TAOCP ต่อไปและฉันจะใช้ภาษาระดับต่ำต่อไปเพื่อระบุว่าเครื่องคำนวณจริงอย่างไร ผู้อ่านที่ต้องการเห็นอัลกอริธึมที่จัดทำแพ็กเกจแล้วในแบบปลั๊กอินโดยใช้ภาษายอดนิยมควรซื้อหนังสือของคนอื่น
ข่าวดีก็คือการเขียนโปรแกรมสำหรับเครื่อง RISC นั้นน่าพอใจและเรียบง่ายเมื่อเครื่อง RISC มีการออกแบบที่ดี ดังนั้นฉันจึงไม่จำเป็นต้องอาศัยรายละเอียดเล็ก ๆ น้อย ๆ ที่บิดเบือนจากประเด็นหลัก ในแง่นี้ MMIX จะดีกว่า MIX อย่างมาก