Tuyệt. Có vẻ sẽ có cách không quá khó để đổi khổ giấy; tôi muốn đổi sang A5 rồi tự đóng thành một cuốn sách đẹp
Tôi tò mò liệu có thể làm theo phiên bản sách này để tạo ra toàn bộ hệ thống không. Tôi muốn biết liệu có cần phải kiếm bo mạch FPGA gốc mà Wirth đã dùng hay không
Chương lớn nhất trong bản năm 1992 bàn về trình biên dịch dịch chương trình Oberon sang mã của bộ xử lý NS32032, nhưng nay bộ xử lý đó không còn kiếm được nữa và kiến trúc của nó cũng khó khuyến nghị. Vì vậy, thay vì viết một trình biên dịch mới cho một kiến trúc thương mại, việc tác giả tự thiết kế để mở rộng tính đơn giản và tính quy củ tới tận phần cứng là một đoạn rất thú vị
Nhờ quyết định này, không chỉ phần mềm của Oberon System mà cả phần cứng cũng có thể được mô tả một cách đầy đủ và chặt chẽ; bộ xử lý đó được gọi là RISC, còn toàn bộ các mô-đun phần cứng được mô tả bằng Verilog
Không biết so với Nand to Tetris thì thế nào. Ngoài điểm đó ra thì trông thật sự rất thú vị, không biết đã có ai đọc chưa
Như người khác đã nói, nó không hướng tới người mới bắt đầu. Trước hết có lẽ cần một phần, thậm chí là phần lớn, kiến thức nền của NAND 2 Tetris
Chẳng hạn, phần về bộ xử lý ở chương 16 đẩy thẳng người đọc vào giữa mã Verilog. Giao diện CPU với bus hệ thống, các thanh ghi, cách bộ nhân hoạt động đều xuất hiện ngay lập tức
Phần hay là những chú giải về các quyết định thiết kế và đánh đổi. Đó là trí tuệ mà Niklaus Wirth ở cuối sự nghiệp để lại dựa trên kinh nghiệm cả đời, nên rất quý giá. Ông là một học giả uyên bác hiếm có, hiểu biết vừa rộng vừa sâu cả về mạch điện lẫn khoa học máy tính trừu tượng hơn, luôn cố gắng khái quát hóa và hiểu các nguyên lý, đồng thời giải thích quá trình phát triển trong bối cảnh lịch sử
Vì là Wirth nên nhiều bài học lịch sử cũng dựa trên trải nghiệm cá nhân, và tôi nghĩ nhờ vậy tạo ra một sự tổng hợp rất hay. Ví dụ như sau:
The second [interface] (MouseX) is included here for historical reasons. It was used by the computer Lilith in 1979, and used the same Mouse as its ancestor Alto (at PARC, 1975). It is distinguished by a very simple hardware without its own microprocessor, which is currently contained in most mice. This goes at a cost of a 9-wire cable. But today, microprocessors are cheaper than cables. We include this interface here, because it allows for a simple explanation of the principle of pointing devices.
Nand2Tetris là dự án nhập môn hoàn hảo cho lĩnh vực này, bao quát thiết kế phần cứng, hệ điều hành và trình biên dịch
Tuy nhiên, sau khi tự mình làm đến cuối, tôi cảm thấy mọi chủ đề đều thiếu chiều sâu và thiếu phần đào sâu. Nhưng chính điều đó lại khiến nó trở thành dự án nhập môn hoàn hảo
Đại học Tokyo cũng có một dự án tương tự, và tôi nghĩ có thể dùng nó như một bước đệm. Hãy xem bài thực nghiệm CPU: https://ytsmiling.tech/2017/04/02/cpuex.html
Nếu không thích, có lẽ là do thiếu tài liệu; ở giai đoạn này bạn cũng có thể tự thiết kế dự án. Về cơ bản, bắt đầu bằng một tiểu dự án CPU dùng Verilog hoặc bất kỳ ngôn ngữ mô tả phần cứng nào, rồi nối tiếp bằng các dự án hệ điều hành và trình biên dịch là được
Project Oberon mô tả hệ thống cuối cùng trông như thế nào. Nó không phải là một tutorial đưa bạn từng bước từ nền tảng đến hệ thống hoàn chỉnh
Bộ xử lý RISC của Wirth đơn giản hơn nhiều để giải thích và lập trình so với bộ xử lý TECS/Nand2Tetris. Tôi cho rằng bộ xử lý Nand2Tetris gần như đến mức khó dùng
Tôi đã trải qua quá trình “thiết kế” bộ xử lý Nand2Tetris trong nandgame, và có vẻ bộ xử lý Nand2Tetris sẽ đơn giản hơn nếu phải đấu dây bằng các cổng logic
Nhưng bộ xử lý RISC của Wirth hẳn sẽ dễ chạy trên FPGA hoặc mô phỏng bằng Verilator hơn nhiều. Lý do là nó dùng một ngôn ngữ mô tả phần cứng thực sự, chứ không phải thứ na ná ngôn ngữ mô tả phần cứng do một người chưa từng thiết kế phần cứng tưởng tượng ra
Có lẽ nếu viết bằng Verilog thì bộ xử lý Nand2Tetris có thể ít mã hơn. Nó có lẽ khá giống "a tiny computer for teaching" của Chuck Thacker https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack..., vốn cũng dựa trên kiến trúc Data General Nova giống như bộ xử lý Nand2Tetris
Nand2Tetris đưa bạn từ cổng NAND đến Tetris và trình thông dịch bytecode. Ngược lại, Oberon bắt đầu từ Verilog có thể tổng hợp được, rồi đưa bạn tới một hệ điều hành GUI hoàn toàn dùng được, có thể biên dịch lại mã nguồn của chính nó
Đáng tiếc là không thể chạy Vivado trên đó, nên nó không thể tự tổng hợp lại bitstream FPGA của mình. Tuy nhiên, như ai đó bên dưới đã nói, có vẻ nó có thể mô phỏng phần cứng của chính mình
Điểm chung của cả hai là kiến trúc bộ xử lý đều không có một cái tên thật sự dùng được
Cấu trúc phục vụ giáo dục của nó yếu hơn nhiều so với Nand to Tetris. Nếu cần kiến thức nền, tốt hơn là đọc cái đó trước rồi hãy đọc cuốn này
Về sau Wirth đã chuyển phần mô tả phần cứng sang Lola, HDL do ông tự tạo
Trong 5 năm qua, ý tưởng về một máy tính phục vụ giáo dục cứ lởn vởn trong đầu tôi
Nếu nghĩ đến phần cứng và hệ điều hành hiện đại, gần như không thể có một cỗ máy đủ đơn giản để dạy cho thế hệ trẻ. Các fantasy console như pico-8 là lựa chọn tốt để lập trình, nhưng không phù hợp để hiểu phần cứng bên dưới
Vì vậy có lẽ các trường học vẫn dùng các kiến trúc cũ để giảng dạy
Một bản triển khai RISC-V tối thiểu khá đơn giản. Cũng có bản triển khai RISC-V của xv6. Tuy vậy vẫn cần nhiều hơn một chút so với bản RISC-V tối thiểu tuyệt đối, cụ thể là cần CSR, các chế độ M/S/U và phân trang
Nếu không cần bộ nhớ phân trang thì chỉ với chế độ M và U cũng được. Tôi có một hệ điều hành thời gian thực nhỏ nhắm đến một số vi điều khiển WCH với cấu hình như vậy. Nó có dùng PMP, nhưng ngay cả cái đó cũng không hẳn là bắt buộc
Phần cứng 8-bit cổ điển rất dễ hiểu, và dạy được những nền tảng vẫn còn áp dụng đến ngày nay
Các video YouTube của Ben Eater rất tuyệt cho việc này. Cả dự án 6502 lẫn chiếc máy tính tự chế làm “từ đầu” trên breadboard đều hay
Một chiếc máy tính có thể học cách giao tiếp với các máy tính khác bằng cách nào đó có lẽ sẽ là giải pháp đỉnh cao
Giờ đây nhờ LLM, điều đó đã nằm trong tầm với; phần việc còn lại có lẽ là kết nối các máy tính với nhau bằng cách nào đó, tức vấn đề tương thích phần cứng. Về phía phần mềm, nó phải có khả năng tìm hiểu phần mềm phía bên kia theo cách nào đó
Xin cầu chúc Giáo sư Wirth yên nghỉ
Nhân tiện, có thể gắn thẻ tốt hơn để cho thấy liên kết này là một file PDF không? Nguồn trông đáng tin, nhưng tôi luôn thấy hơi căng khi URL dẫn tới PDF
Thông thường các liên kết dẫn tới PDF sẽ có [pdf] ở cuối
Tôi tò mò cụ thể điều gì ở file PDF khiến bạn lo ngại
URL vốn đã kết thúc bằng .pdf rồi
Khi học môn trình biên dịch ở đại học, tôi đã viết một trình biên dịch Oberon
Tôi không tìm được trang gốc của môn học, nhưng trang này, là tài liệu từ vài năm trước thời điểm tôi học, có vẻ gần đúng: https://cseweb.ucsd.edu/~wgg/CSE131B/
Đây là một ngôn ngữ giáo dục tuyệt vời
Đây đúng là một viên ngọc. Tôi tự hỏi liệu có nỗ lực nào nhằm tái sử dụng Oberon thành một “máy tính” di động không
Tôi tự hỏi liệu đã có ai cập nhật cuốn sách để có thể làm việc với các bo mạch FPGA mới hơn chưa
1 bình luận
Các ý kiến trên Hacker News
Tôi đã dàn trang lại phần nội dung bằng TeX và tạo một bản PDF dễ đọc hơn cho những ai quan tâm: https://github.com/guidoism/tex-oberon
Sau đó cũng nên xem Oberon System 3. Nó pha trộn mô hình component Gadgets với trình biên dịch JIT/AOT
"The Oberon companion - a guide to using and programming Oberon System 3"
https://www.semanticscholar.org/paper/The-Oberon-companion-a...
Có thể xem mã nguồn trong fork của Rochus
https://github.com/rochus-keller/OberonSystem3
Hoặc cũng có một nhánh phát triển dẫn tới Active Oberon, tuy không phải do chính Niklaus Wirth thực hiện
https://gitlab.inf.ethz.ch/felixf/oberon
Ảnh chụp màn hình và tài liệu hướng dẫn hệ điều hành
https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/ocp/Doc...
Còn có Component Pascal và Blackbox IDE do một startup tách ra từ ETHZ tạo ra
https://blackboxframework.org/index.php
Nếu muốn nghiên cứu mã nguồn, có thể dùng công cụ này: https://github.com/Rochus-Keller/ActiveOberon
Đây chỉ là nửa đầu của cuốn sách. Tất cả các phần và phần mềm có thể tìm thấy tại đây: https://people.inf.ethz.ch/wirth/ProjectOberon/
Chương lớn nhất trong bản năm 1992 bàn về trình biên dịch dịch chương trình Oberon sang mã của bộ xử lý NS32032, nhưng nay bộ xử lý đó không còn kiếm được nữa và kiến trúc của nó cũng khó khuyến nghị. Vì vậy, thay vì viết một trình biên dịch mới cho một kiến trúc thương mại, việc tác giả tự thiết kế để mở rộng tính đơn giản và tính quy củ tới tận phần cứng là một đoạn rất thú vị
Nhờ quyết định này, không chỉ phần mềm của Oberon System mà cả phần cứng cũng có thể được mô tả một cách đầy đủ và chặt chẽ; bộ xử lý đó được gọi là RISC, còn toàn bộ các mô-đun phần cứng được mô tả bằng Verilog
Không biết so với Nand to Tetris thì thế nào. Ngoài điểm đó ra thì trông thật sự rất thú vị, không biết đã có ai đọc chưa
Chẳng hạn, phần về bộ xử lý ở chương 16 đẩy thẳng người đọc vào giữa mã Verilog. Giao diện CPU với bus hệ thống, các thanh ghi, cách bộ nhân hoạt động đều xuất hiện ngay lập tức
Phần hay là những chú giải về các quyết định thiết kế và đánh đổi. Đó là trí tuệ mà Niklaus Wirth ở cuối sự nghiệp để lại dựa trên kinh nghiệm cả đời, nên rất quý giá. Ông là một học giả uyên bác hiếm có, hiểu biết vừa rộng vừa sâu cả về mạch điện lẫn khoa học máy tính trừu tượng hơn, luôn cố gắng khái quát hóa và hiểu các nguyên lý, đồng thời giải thích quá trình phát triển trong bối cảnh lịch sử
Vì là Wirth nên nhiều bài học lịch sử cũng dựa trên trải nghiệm cá nhân, và tôi nghĩ nhờ vậy tạo ra một sự tổng hợp rất hay. Ví dụ như sau:
Tuy nhiên, sau khi tự mình làm đến cuối, tôi cảm thấy mọi chủ đề đều thiếu chiều sâu và thiếu phần đào sâu. Nhưng chính điều đó lại khiến nó trở thành dự án nhập môn hoàn hảo
Đại học Tokyo cũng có một dự án tương tự, và tôi nghĩ có thể dùng nó như một bước đệm. Hãy xem bài thực nghiệm CPU: https://ytsmiling.tech/2017/04/02/cpuex.html
Nếu không thích, có lẽ là do thiếu tài liệu; ở giai đoạn này bạn cũng có thể tự thiết kế dự án. Về cơ bản, bắt đầu bằng một tiểu dự án CPU dùng Verilog hoặc bất kỳ ngôn ngữ mô tả phần cứng nào, rồi nối tiếp bằng các dự án hệ điều hành và trình biên dịch là được
Tôi đã trải qua quá trình “thiết kế” bộ xử lý Nand2Tetris trong nandgame, và có vẻ bộ xử lý Nand2Tetris sẽ đơn giản hơn nếu phải đấu dây bằng các cổng logic
Nhưng bộ xử lý RISC của Wirth hẳn sẽ dễ chạy trên FPGA hoặc mô phỏng bằng Verilator hơn nhiều. Lý do là nó dùng một ngôn ngữ mô tả phần cứng thực sự, chứ không phải thứ na ná ngôn ngữ mô tả phần cứng do một người chưa từng thiết kế phần cứng tưởng tượng ra
Có lẽ nếu viết bằng Verilog thì bộ xử lý Nand2Tetris có thể ít mã hơn. Nó có lẽ khá giống "a tiny computer for teaching" của Chuck Thacker https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack..., vốn cũng dựa trên kiến trúc Data General Nova giống như bộ xử lý Nand2Tetris
Nand2Tetris đưa bạn từ cổng NAND đến Tetris và trình thông dịch bytecode. Ngược lại, Oberon bắt đầu từ Verilog có thể tổng hợp được, rồi đưa bạn tới một hệ điều hành GUI hoàn toàn dùng được, có thể biên dịch lại mã nguồn của chính nó
Đáng tiếc là không thể chạy Vivado trên đó, nên nó không thể tự tổng hợp lại bitstream FPGA của mình. Tuy nhiên, như ai đó bên dưới đã nói, có vẻ nó có thể mô phỏng phần cứng của chính mình
Điểm chung của cả hai là kiến trúc bộ xử lý đều không có một cái tên thật sự dùng được
Về sau Wirth đã chuyển phần mô tả phần cứng sang Lola, HDL do ông tự tạo
Trong 5 năm qua, ý tưởng về một máy tính phục vụ giáo dục cứ lởn vởn trong đầu tôi
Nếu nghĩ đến phần cứng và hệ điều hành hiện đại, gần như không thể có một cỗ máy đủ đơn giản để dạy cho thế hệ trẻ. Các fantasy console như pico-8 là lựa chọn tốt để lập trình, nhưng không phù hợp để hiểu phần cứng bên dưới
Vì vậy có lẽ các trường học vẫn dùng các kiến trúc cũ để giảng dạy
Nếu không cần bộ nhớ phân trang thì chỉ với chế độ M và U cũng được. Tôi có một hệ điều hành thời gian thực nhỏ nhắm đến một số vi điều khiển WCH với cấu hình như vậy. Nó có dùng PMP, nhưng ngay cả cái đó cũng không hẳn là bắt buộc
Các video YouTube của Ben Eater rất tuyệt cho việc này. Cả dự án 6502 lẫn chiếc máy tính tự chế làm “từ đầu” trên breadboard đều hay
Giờ đây nhờ LLM, điều đó đã nằm trong tầm với; phần việc còn lại có lẽ là kết nối các máy tính với nhau bằng cách nào đó, tức vấn đề tương thích phần cứng. Về phía phần mềm, nó phải có khả năng tìm hiểu phần mềm phía bên kia theo cách nào đó
Trang 59–75 nói về một bản triển khai piece list nhanh. Đây cũng là chủ đề gần đây đã được bàn trên HN
Bổ sung vì trên HN đã có nhiều thread về cách biểu diễn buffer văn bản để chỉnh sửa nhanh:
https://news.ycombinator.com/item?id=15381886
https://news.ycombinator.com/item?id=11244103
https://news.ycombinator.com/item?id=14129543
https://news.ycombinator.com/item?id=15387672
https://news.ycombinator.com/item?id=14046446
Xin cầu chúc Giáo sư Wirth yên nghỉ
Nhân tiện, có thể gắn thẻ tốt hơn để cho thấy liên kết này là một file PDF không? Nguồn trông đáng tin, nhưng tôi luôn thấy hơi căng khi URL dẫn tới PDF
[1] https://cr.yp.to/bib/1995/wirth.pdf
Khi học môn trình biên dịch ở đại học, tôi đã viết một trình biên dịch Oberon
Tôi không tìm được trang gốc của môn học, nhưng trang này, là tài liệu từ vài năm trước thời điểm tôi học, có vẻ gần đúng: https://cseweb.ucsd.edu/~wgg/CSE131B/
Đây là một ngôn ngữ giáo dục tuyệt vời
Đây đúng là một viên ngọc. Tôi tự hỏi liệu có nỗ lực nào nhằm tái sử dụng Oberon thành một “máy tính” di động không
Tôi tự hỏi liệu đã có ai cập nhật cuốn sách để có thể làm việc với các bo mạch FPGA mới hơn chưa