เหตุใด Donald Knuth จึงเขียน TAOCP โดยใช้ภาษาแอสเซมบลี


20

ฉันไม่ได้เกลียดการใช้ภาษาแอสเซมบลีเนื่องจากฉันได้เขียนบางอย่างในหลักสูตรระบบปฏิบัติการของฉัน แต่เห็นได้ชัดว่าภาษาแอสเซมบลีขาดสิ่งที่เป็นนามธรรมคุณต้องให้ความสำคัญกับรายละเอียดมากขึ้น

ภาษาแอสเซมบลีจำเป็นอย่างยิ่งที่จะเขียน TAOCP หรือไม่


6
รายละเอียดอยู่ที่ปีศาจอยู่
Blrfl

5
@ Blrfl ฉันไม่เชื่อในปีศาจ (ฉันเชื่อในรายละเอียดว่า ... ตัวสั่น )
จิมมี่ฮอฟฟา

3
เล่มแรกของ TAOCP ได้รับการตีพิมพ์ในปี 2511 แม้ว่าภาษาระดับสูงจะมีอยู่จริง แต่แอสเซมเบลอร์ที่เขียนด้วยมือมีความสำคัญมากกว่านั้นและทรัพยากรคอมพิวเตอร์บนเมนเฟรมย้อนกลับ Knuth เคยโต้เถียงกันอย่างจริงจังในการรักษา goto เพราะอัลกอริธึมบางอย่างไม่สามารถเขียนได้โดยใช้โครงสร้างโฟลว์การควบคุมแบบซ้อนโดยไม่มีประสิทธิภาพ ที่จริงแล้วเขาไม่ได้สนับสนุนการเพิ่มประสิทธิภาพก่อนวัยอันควรแม้กระทั่ง IIRC เขาเพียงต้องการตัวเลือกที่พร้อมใช้งานเมื่อต้องการเพิ่มประสิทธิภาพ
Steve314

3
@JimmyHoffa: โอ้ดีในกรณีของคุณโดยมีรายละเอียดที่เดอวิลล์เป็น
Blrfl

1
Jerry Coffin ประสบความสำเร็จในการทำสิ่งที่ฉันต้องการจะทำเขาค้นหามันในแหล่งที่มา ;-) ฉันดูในบทที่แนะนำ MIX และ MIXAL ซึ่งฉันไม่พบข้อความเช่นนี้ ... บางทีฉันควรได้รับสำเนาอิเล็กทรอนิกส์สักวัน อย่างไรก็ตามฉันคิดว่าแท็กคำตอบจะเหมาะสมกว่าสำหรับคำตอบของ Jerry ในกรณีนี้
โธมัส

คำตอบ:


22

เขาไม่เพียง แต่ใช้ MIXAL ซึ่งเป็นภาษาแอสเซมบลีของเขาสำหรับ MIX แต่ยังรวมถึง MIX ซึ่งเป็นแบบจำลองสำหรับคอมพิวเตอร์แบบง่าย ๆ (เช่นเดียวกับที่ใช้ในยุคหกสิบเศษ) นี่เป็นตัวอย่างสำหรับการสอนซึ่งเขามีอิสระจากการพัฒนาในสาขานี้

หากเขาต้องการใช้ภาษาการเขียนโปรแกรมอื่น (คุณคิดว่าจะเหมาะกับภาษาใด) โดยพูดว่า NPL (ภาษาการเขียนโปรแกรมที่ดี) เขาจะต้องละทิ้งแนวคิดการใช้ MIX หรือเพื่อแนะนำ คอมไพเลอร์ของภาษาคอมพิวเตอร์บางตัวเลือก (ซึ่งเป็นสิ่งที่ซับซ้อนยิ่งกว่าสิ่งที่เขาจัดการในฉบับที่ 1) ด้วยวิธีนี้มันจะไม่กลายเป็น TAOCP แต่เป็น TAONPLP คนแรกเป็นอิสระจากตัวเลือกดังกล่าวและด้วยเหตุนี้จึงไม่มีเวลาในหนังสือสองสามเล่มเกี่ยวกับการเขียนโปรแกรม อันที่สองคงถูกลืมไปแล้วในตอนนี้ ...

นอกจากนี้ตราบใดที่คอมพิวเตอร์ทำงานในหลักการเดียวกับที่ MIX ของเขาทำมันก็เป็นสิ่งที่ดีถ้าคุณสนใจที่จะเรียนรู้วิธีทำงานกับพวกเขา


โปรดทราบว่า "เทคนิคคอมไพเลอร์" เป็นหัวข้อของโวลุ่มที่คาดการณ์ไว้อย่างเป็นทางการ 7 มันอาจยังคงเกิดขึ้น แต่ฉันคิดว่าทุกคนดีใจที่ Knuth ไม่รอจนกว่าเขาจะมีผู้แปลเพื่อเริ่มเผยแพร่
Kilian Foth

@Kilian ทั้งใช่ฉันรู้ แต่ฉันคาดหวังว่าจะใช้ภาษาโปรแกรมประดิษฐ์ในหนังสือเล่มนี้ อาจกำหนดเป้าหมายเป็น MMIX (M ตัวที่สองไม่ใช่คอมพิวเตอร์ที่ใช้ตัวพิมพ์ :-) และ ETA ของ vol 5 คือ 2020 ....
โทมัส

56

บางครั้งคุณวิปเปอร์สแน็ปเปอร์ทำให้ฉันประหลาดใจ พวกคุณทุกคนก็มักจะไม่รู้ว่าอะไรเกิดขึ้นก่อนที่คุณจะเข้าโรงเรียน (ฉันมีปัญหาเดียวกันฉันต้องใช้เวลานานกว่าจะเข้าใจว่า 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 คอมไพเลอร์มาใช้ในปี 1960 และ ALGOL นั้นเหมาะสำหรับการเผยแพร่อัลกอริธึมดังนั้นฉันจึงไม่คิดว่านี่เป็นคำตอบที่แท้จริง
Peter Taylor

10
ฉันไม่เชื่อจริง ๆ เหตุผลคือความพร้อมของเวลา LISP พร้อมใช้งานถ้าเขาต้องการให้มีระดับสูงของนามธรรมเช่นคณิตศาสตร์ไม่ ฉันคิดว่าเขาไปด้วยเนื่องจากคำแรกของชื่อ; พื้นฐาน ไม่มีอะไรที่เป็นพื้นฐานของอัลกอริทึมมากกว่าคำแนะนำทีละขั้นตอนไปยังเครื่องที่เรียบง่าย มันบังคับให้คุณทำลายอัลกอริธึมลงอย่างสมบูรณ์แทนที่จะให้เหตุผลในระดับสูงซึ่งไม่ใช่จุดประสงค์ของเขาในหนังสือ
จิมมี่ฮอฟฟา

1
นี่คือเหตุผลที่โรงเรียนของฉันเสนอชั้นเรียนการคำนวณเชิงประวัติศาสตร์ที่คุณสามารถตั้งโปรแกรม Altair และ PDP บางตัวได้
Rig

@Rig - อย่างจริงจัง? ตอนนี้ฉันรู้สึกแก่เฒ่า แม้ว่าจะไม่เก่าเท่าการอธิบาย HPGL ให้กับผู้รับจ้างรายใหม่และค้นพบว่าพวกเขาไม่เคยเห็นหรือเคยได้ยินผู้เขียนปากกาเลย!
Martin Beckett

6
+1 เนื่องจากพูดจาโผงผางสนุกเช่นเดียวกับข้อมูลที่เกี่ยวข้อง
luser droog

43

Knuth กล่าวถึงเหตุผลของเขาในคำนำ ฉันจะพูดเพียงไม่กี่ชิ้นและชิ้น:

... ฉันจำเป็นต้องตัดสินใจว่าจะใช้ภาษาพีชคณิตเช่น ALGOL หรือ FORTRAN หรือใช้ภาษาที่เน้นด้วยเครื่องจักรเพื่อจุดประสงค์นี้ บางทีผู้เชี่ยวชาญคอมพิวเตอร์ในปัจจุบันหลายคนอาจไม่เห็นด้วยกับการตัดสินใจของฉันที่จะใช้ภาษาที่ใช้กับเครื่อง แต่ฉันเชื่อว่ามันเป็นตัวเลือกที่ถูกต้องแน่นอนด้วยเหตุผลดังต่อไปนี้:

  1. ภาษาพีชคณิตเหมาะกับปัญหาเชิงตัวเลขมากกว่าปัญหาที่ไม่ใช่ตัวเลขที่พิจารณาที่นี่ [... ]
  2. ... โดยการเขียนด้วยภาษาที่ใช้ภาษาเครื่องโปรแกรมเมอร์จะมักใช้วิธีที่มีประสิทธิภาพมากกว่า มันใกล้ความเป็นจริงมาก
  3. โปรแกรมที่เราต้องการคือมีข้อยกเว้นเล็กน้อยทั้งหมดค่อนข้างสั้น ...
  4. บุคคลที่มีความสนใจในคอมพิวเตอร์มากกว่าควรศึกษาในภาษาเครื่อง ...
  5. ภาษาเครื่องบางภาษาอาจจำเป็น

แม้ว่าเขาจะไม่ได้ชี้ให้เห็นโดยตรง แต่ฉันคิดว่าการพูดถึง ALGOL และ FORTRAN ชี้ไปที่ปัญหาอื่นที่เขาหลีกเลี่ยงซึ่งอาจสำคัญกว่า สมมติว่าเขาเลือก Algol (เห็นได้ชัดว่าเหมาะกับโปรแกรมที่ไม่ใช่ตัวเลขมากกว่า Fortran อยู่แล้ว) ฉันจะวางตัวว่าอัลกอลอาจจะเป็นชาวต่างชาติมากขึ้นสำหรับโปรแกรมเมอร์ส่วนใหญ่ในปัจจุบันมากกว่าภาษาแอสเซมบลีที่เขาเลือก

สำหรับฉบับที่สามเขาได้ออกแบบ MIX ใหม่เพื่อให้เข้ากับโปรเซสเซอร์ที่ทันสมัยยิ่งขึ้นและต้องเขียนโค้ดใหม่อีกครั้ง อย่างไรก็ตามฉันต้องการโพสต์ที่เขาใช้ภาษาระดับสูงกว่าการเขียนใหม่จะยิ่งใหญ่กว่าและเหตุผลทั้งหมดที่เขาให้จะยังคงอยู่เช่นกัน


นอกจากนี้คอมไพเลอร์มักมีราคาแพงในสมัยนั้น หลายปีหลังจากที่เล่มที่ 1 ของ TAOCP ออกมาฉันสัมภาษณ์ในสถานที่ที่ไม่ต้องการใช้เงินกับสิ่งใดสิ่งหนึ่ง (และตามจริงแล้วผู้ประกอบเครื่อง IBM 370 ก็ไม่ได้แย่ขนาดนั้น) และภรรยาของฉันทำงานที่ร้านขายชุดประกอบภาษา ไม่กี่ปีหลังจากนั้น
David Thornley

2
ฉันจะขึ้นจุด 4 ได้อย่างไร?
Javier

5
@Javier รับสำเนาและเขียน +1 ในระยะขอบ
luser droog

29

Knuth ได้อัปเดตเหตุผลของเขาเช่นกัน:

ทำไมต้องมีภาษาของเครื่อง?

ผู้อ่านหลายคนไม่ต้องสงสัยเลยว่า `` ทำไม Knuth จึงมาแทนที่ MIX ด้วยเครื่องอื่นแทนที่จะใช้ภาษาโปรแกรมระดับสูง? ทุกวันนี้แทบจะไม่มีใครใช้แอสเซมเบลอร์ ''

ผู้คนเหล่านี้มีสิทธิ์รับความคิดเห็นของตนเองและพวกเขาไม่จำเป็นต้องอ่านส่วนภาษาเครื่องของหนังสือของฉัน แต่เหตุผลของภาษาเครื่องที่ฉันให้ไว้ในส่วนนำของเล่ม 1 ที่เขียนในช่วงต้นทศวรรษ 1960 ยังคงใช้ได้ในปัจจุบัน:

  • หนึ่งในเป้าหมายหลักของหนังสือของฉันคือการแสดงให้เห็นว่าการก่อสร้างระดับสูงนำไปใช้จริงในเครื่องจักรได้อย่างไร ฉันอธิบายการเชื่อมโยงของ coroutine โครงสร้างของต้นไม้การสร้างตัวเลขสุ่มการคำนวณเลขคณิตความแม่นยำสูงการแปลงฐานข้อมูลการจัดเก็บข้อมูลการค้นหาแบบ combinatorial การเรียกซ้ำเป็นต้นจากพื้นดิน
  • โดยทั่วไปโปรแกรมที่ต้องการในหนังสือของฉันสั้นมากจนสามารถเข้าใจได้ง่าย
  • ผู้ที่มีความสนใจในคอมพิวเตอร์มากกว่าคนทั่วไปควรมีความคิดอย่างน้อยเกี่ยวกับฮาร์ดแวร์พื้นฐาน มิฉะนั้นโปรแกรมที่พวกเขาเขียนจะค่อนข้างประหลาด
  • ภาษาเครื่องจำเป็นในทุกกรณีเนื่องจากผลลัพธ์ของโปรแกรมซอฟต์แวร์ที่ฉันอธิบาย
  • การแสดงวิธีการขั้นพื้นฐานเช่นอัลกอริทึมสำหรับการเรียงลำดับและการค้นหาในภาษาเครื่องทำให้สามารถทำการศึกษาที่มีความหมายเกี่ยวกับผลกระทบของขนาดแคชและ RAM และลักษณะของฮาร์ดแวร์อื่น ๆ (ความเร็วหน่วยความจำ ฯลฯ ) เมื่อเปรียบเทียบรูปแบบที่แตกต่างกัน

ยิ่งกว่านั้นถ้าฉันใช้ภาษาระดับสูงมันควรใช้ภาษาอะไร ในทศวรรษที่ 1960 ฉันน่าจะเลือก Algol W; ในปี 1970 ฉันจะต้องเขียนหนังสือใหม่ด้วย Pascal ในปี 1980 ฉันจะเปลี่ยนทุกอย่างเป็น C อย่างแน่นอน ในปี 1990 ฉันต้องเปลี่ยนไปใช้ C ++ และอาจเป็น Java ในยุค 2000 ภาษาอื่นไม่ต้องสงสัยเลยว่าเดอริกูร์ ฉันไม่สามารถมีเวลาในการเขียนหนังสือของฉันเป็นภาษาที่เข้าและออกจากแฟชั่น; ภาษาไม่ใช่จุดประสงค์ของหนังสือของฉัน แต่เป็นสิ่งที่คุณสามารถทำได้ในภาษาที่คุณโปรดปราน หนังสือของฉันเน้นที่ความจริงอมตะ

ดังนั้นฉันจะใช้ภาษาอังกฤษเป็นภาษาระดับสูงใน TAOCP ต่อไปและฉันจะใช้ภาษาระดับต่ำต่อไปเพื่อระบุว่าเครื่องคำนวณจริงอย่างไร ผู้อ่านที่ต้องการเห็นอัลกอริธึมที่จัดทำแพ็กเกจแล้วในแบบปลั๊กอินโดยใช้ภาษายอดนิยมควรซื้อหนังสือของคนอื่น

ข่าวดีก็คือการเขียนโปรแกรมสำหรับเครื่อง RISC นั้นน่าพอใจและเรียบง่ายเมื่อเครื่อง RISC มีการออกแบบที่ดี ดังนั้นฉันจึงไม่จำเป็นต้องอาศัยรายละเอียดเล็ก ๆ น้อย ๆ ที่บิดเบือนจากประเด็นหลัก ในแง่นี้ MMIX จะดีกว่า MIX อย่างมาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.