Tôi không ghét sử dụng ngôn ngữ lắp ráp, vì tôi đã viết một số trong khóa học os của mình. Nhưng rõ ràng, ngôn ngữ lắp ráp thiếu trừu tượng, bạn phải chú ý nhiều hơn đến các chi tiết.
Là ngôn ngữ lắp ráp thực sự cần thiết để viết TAOCP?
Tôi không ghét sử dụng ngôn ngữ lắp ráp, vì tôi đã viết một số trong khóa học os của mình. Nhưng rõ ràng, ngôn ngữ lắp ráp thiếu trừu tượng, bạn phải chú ý nhiều hơn đến các chi tiết.
Là ngôn ngữ lắp ráp thực sự cần thiết để viết TAOCP?
Câu trả lời:
Anh ta không chỉ sử dụng MIXAL, ngôn ngữ lắp ráp của mình cho MIX, mà còn là MIX, một mô hình cho một máy tính đơn giản (giống như một ngôn ngữ được sử dụng vào những năm sáu mươi). Đây là một mô hình cho việc giảng dạy mà ở một mức độ nào đó, ông không phụ thuộc vào sự phát triển trong lĩnh vực này.
Nếu anh ấy đã sử dụng một ngôn ngữ lập trình khác (nhân tiện, bạn nghĩ sẽ phù hợp với ngôn ngữ nào?), Nói NPL (ngôn ngữ lập trình tiện lợi), anh ấy đã phải từ bỏ ý tưởng sử dụng MIX hoặc để giới thiệu trình biên dịch của một số ngôn ngữ máy tính được lựa chọn (đó là một điều phức tạp hơn nhiều so với những gì anh ta đang giải quyết trong Vol 1). Theo cách đó, nó sẽ không trở thành TAOCP mà là TAONPLP. Cuốn đầu tiên độc lập với lựa chọn như vậy và, vì lý do này, vượt thời gian theo cách mà một vài cuốn sách về lập trình sẽ trở thành. Cái thứ hai có lẽ sẽ bị lãng quên ...
Ngoài ra, miễn là máy tính hoạt động theo nguyên tắc theo cách MIX của anh ấy, thì nên tính đến điều đó nếu bạn thực sự quan tâm đến việc học cách làm việc với chúng.
Đôi khi những người trẻ tuổi làm tôi ngạc nhiên. Tất cả các bạn thường không có manh mối rằng bất cứ điều gì xảy ra trước khi bạn bắt đầu đi học. (Tôi có cùng một vấn đề. Tôi đã mất một thời gian dài để hiểu rằng 15 năm thực sự là một khoảng thời gian rất ngắn, theo quan điểm của người lớn. Lịch sử, nhưng cha tôi đã chiến đấu trong đó, và mẹ tôi học cấp hai trong thời gian đó.)
TAOCP, tập. 1, "Thuật toán cơ bản", ấn bản đầu tiên, được in lần đầu tiên vào năm 1968. Đó là 45 năm trước. Knuth bắt đầu lên kế hoạch cho loạt phim trước đó.
Để tham khảo: Intel 8086 xuất hiện lần đầu tiên vào năm 1978, mười năm sau. Ngôn ngữ PASCAL xuất hiện lần đầu tiên vào năm 1971; cuốn sách Jensen & Wirth, về phiên bản thứ hai của ngôn ngữ, được phát hành vào năm 1974. Sự phát triển ban đầu của C là 1969-1973: K & R được xuất bản năm 1978.
Knuth dự định loạt bài để bao gồm các lĩnh vực. Ngài thiết lập phong cách, THÌ, có ích cho các học viên THÌ. Anh ấy đã không bao giờ nghĩ rằng bộ truyện đó sẽ trở thành tác phẩm hoàn toàn theo nghĩa đen của anh ấy, hoặc tác phẩm của nó sẽ trải dài hơn nửa thế kỷ khi cuối cùng anh ấy kết thúc.
Ngôn ngữ hội được cho là không quá quan trọng như ngày nay, nhưng nó vẫn quan trọng hơn nhiều so với các mavens Java / C ++ / Javascript / Python / Perl muốn tất cả các bạn tin.
Bây giờ có được ra bãi cỏ của tôi!
Knuth thảo luận về lý luận của mình trong Lời nói đầu. Tôi sẽ trích dẫn chỉ một vài bit và miếng:
... Tôi cần phải quyết định nên sử dụng ngôn ngữ đại số như ALGOL hoặc FORTRAN hay sử dụng ngôn ngữ hướng máy cho mục đích này. Có lẽ nhiều chuyên gia máy tính ngày nay sẽ không đồng ý với quyết định sử dụng ngôn ngữ định hướng máy móc của tôi, nhưng tôi đã bị thuyết phục rằng đó chắc chắn là lựa chọn chính xác, vì những lý do sau:
- Các ngôn ngữ đại số phù hợp với các vấn đề số hơn so với các vấn đề không số lượng được xem xét ở đây. [...]
- ... Bằng cách viết bằng ngôn ngữ hướng máy, lập trình viên sẽ có xu hướng sử dụng phương pháp hiệu quả hơn nhiều; nó gần với thực tế hơn nhiều
- Các chương trình chúng tôi yêu cầu, với một vài ngoại lệ, tất cả đều khá ngắn ...
- Một người quan tâm nhiều hơn đến máy tính nên được học tốt về ngôn ngữ máy ...
- Một số ngôn ngữ máy sẽ là cần thiết dù sao ...
Mặc dù anh ấy không chỉ ra điều đó trực tiếp, tôi nghĩ rằng việc anh ấy nhắc đến ALGOL và FORTRAN chỉ ra một vấn đề khác mà anh ấy tránh được có thể còn quan trọng hơn. Giả sử anh ta đã chọn Algol (rõ ràng phù hợp hơn với các chương trình phi số so với Fortran). Tôi sẽ khẳng định rằng Algol có lẽ sẽ còn xa lạ hơn với hầu hết các lập trình viên ngày nay so với ngôn ngữ lắp ráp mà anh ta đã chọn.
Đối với phiên bản thứ ba, ông đã thiết kế lại MIX để phù hợp hơn với các bộ xử lý hiện đại và phải viết lại mã cho nó. Tuy nhiên, tôi khẳng định rằng anh ta đã sử dụng ngôn ngữ cấp cao hơn, việc viết lại sẽ đáng kể hơn - và tất cả những lý do anh ta đưa ra cũng sẽ vẫn như vậy.
Knuth cũng đã cập nhật lý do của mình :
Tại sao có ngôn ngữ máy?
Nhiều độc giả không nghi ngờ gì khi nghĩ, 'Tại sao Knuth thay thế MIX bằng một máy khác thay vì chỉ sử dụng ngôn ngữ lập trình cấp cao? Hầu như không ai sử dụng trình biên dịch những ngày này. ''
Những người như vậy có quyền với ý kiến của họ và họ không cần phải đọc các phần ngôn ngữ máy trong sách của tôi. Nhưng những lý do cho ngôn ngữ máy mà tôi đã đưa ra trong lời nói đầu của Tập 1, được viết vào đầu những năm 1960, vẫn còn hiệu lực cho đến ngày nay:
- Một trong những mục tiêu chính của những cuốn sách của tôi là chỉ ra cách thức thực hiện các công trình cấp cao thực sự trong máy móc, không chỉ đơn giản là chỉ ra cách chúng được áp dụng. Tôi giải thích liên kết coroutine, cấu trúc cây, tạo số ngẫu nhiên, số học có độ chính xác cao, chuyển đổi cơ số, đóng gói dữ liệu, tìm kiếm tổ hợp, đệ quy, v.v., từ đầu.
- Các chương trình cần thiết trong sách của tôi thường ngắn đến mức các điểm chính của chúng có thể được nắm bắt dễ dàng.
- Những người quan tâm nhiều hơn đến máy tính nên có ít nhất một số ý tưởng về phần cứng cơ bản là như thế nào. Nếu không các chương trình họ viết sẽ khá kỳ lạ.
- Ngôn ngữ máy là cần thiết trong mọi trường hợp, như đầu ra của nhiều chương trình phần mềm tôi mô tả.
- Thể hiện các phương pháp cơ bản như thuật toán để sắp xếp và tìm kiếm bằng ngôn ngữ máy cho phép thực hiện các nghiên cứu có ý nghĩa về tác động của bộ đệm và kích thước RAM và các đặc điểm phần cứng khác (tốc độ bộ nhớ, đường ống, nhiều vấn đề, bộ đệm tìm kiếm, kích thước của khối bộ đệm, v.v.) khi so sánh các sơ đồ khác nhau.
Hơn nữa, nếu tôi đã sử dụng một ngôn ngữ cấp cao, thì nó nên là ngôn ngữ nào? Trong những năm 1960, có lẽ tôi đã chọn Algol W; vào những năm 1970, sau đó tôi đã phải viết lại những cuốn sách của mình bằng Pascal; vào những năm 1980, tôi chắc chắn đã thay đổi mọi thứ thành C; vào những năm 1990, tôi đã phải chuyển sang C ++ và sau đó có lẽ là Java. Trong những năm 2000, một ngôn ngữ khác sẽ không còn nghi ngờ gì nữa. Tôi không thể dành thời gian để viết lại sách của mình khi ngôn ngữ đi vào và ra khỏi thời trang; ngôn ngữ không phải là điểm của sách của tôi, vấn đề là những gì bạn có thể làm trong ngôn ngữ yêu thích của mình. Sách của tôi tập trung vào những sự thật vượt thời gian.
Do đó, tôi sẽ tiếp tục sử dụng tiếng Anh làm ngôn ngữ cấp cao trong TAOCP và tôi sẽ tiếp tục sử dụng ngôn ngữ cấp thấp để chỉ ra cách các máy tính thực sự tính toán. Những độc giả chỉ muốn xem các thuật toán đã được đóng gói theo cách bổ trợ, sử dụng ngôn ngữ hợp thời trang, nên mua sách của người khác.
Tin tốt là lập trình cho các máy RISC rất dễ chịu và đơn giản, khi máy RISC có thiết kế sạch đẹp. Vì vậy, tôi không cần phải chú ý đến những chi tiết phức tạp, nhỏ nhặt mà làm sao lãng những điểm chính. Về mặt này MMIX sẽ tốt hơn đáng kể so với MIX.