मैंने मुख्य टेक्स्ट को TeX में फिर से typeset किया है, और रुचि रखने वालों के लिए एक ज्यादा पढ़ने योग्य PDF बनाया है: https://github.com/guidoism/tex-oberon
शानदार। पेपर फॉर्मैट बदलने का कोई आसान तरीका होना चाहिए; मैं इसे A5 में बदलकर खुद एक अच्छी-सी किताब के रूप में bind करके देखना चाहता हूं
सोच रहा हूं कि क्या इस version की किताब को follow करके पूरा सिस्टम बनाया जा सकता है। जानना चाहता हूं कि Wirth द्वारा इस्तेमाल किया गया मूल FPGA board लिए बिना काम चल जाएगा या नहीं
1992 संस्करण में सबसे बड़ा अध्याय उस compiler पर था जो Oberon प्रोग्राम्स को NS32032 processor code में translate करता था, लेकिन अब वह processor मिलना भी मुश्किल है और उसकी architecture की सिफारिश करना भी कठिन बताया गया है। इसलिए किसी commercial architecture के लिए नया compiler लिखने के बजाय, simplicity और regularity को hardware तक extend करने के लिए उन्होंने खुद ही design किया—यह हिस्सा दिलचस्प है
इस फैसले की वजह से Oberon System के software के साथ-साथ hardware को भी पूरी तरह और rigorously describe किया जा सका, और उस processor को RISC कहा जाता है, जबकि सभी hardware modules Verilog में describe किए गए हैं
सोच रहा/रही हूँ कि Nand to Tetris से इसकी तुलना कैसी होगी। बाकी तो सचमुच दिलचस्प लग रहा है; क्या किसी ने इसे पढ़ा है?
जैसा किसी और ने भी कहा, यह beginners के लिए oriented नहीं है। पहले NAND 2 Tetris की background knowledge का कुछ हिस्सा, शायद ज्यादातर हिस्सा, चाहिए होगा
उदाहरण के लिए chapter 16 का processor वाला हिस्सा सीधे Verilog code के बीच में ले जाता है। system bus के साथ CPU interface, registers, multiplication unit कैसे काम करता है—सब तुरंत सामने आ जाता है
अच्छी बात design decisions और trade-offs पर commentary है। अपने career के अंतिम दौर में Niklaus Wirth ने जीवन भर के अनुभव के आधार पर जो wisdom छोड़ी, वह मूल्यवान है। वे उन दुर्लभ विद्वानों में थे जिन्हें circuits और अधिक abstract computer science—दोनों की व्यापक और गहरी समझ थी; वे हमेशा generalize करने और principles समझने की कोशिश करते थे, और historical context में विकास की प्रक्रिया समझाते थे
Wirth होने की वजह से history lessons अक्सर उनके personal experience पर आधारित होते हैं, और मुझे लगता है कि इसी से अच्छी synthesis बनती है। उदाहरण के लिए:
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 hardware, operating system और compiler design को cover करने वाला इस क्षेत्र का एक perfect introductory project है
हालांकि इसे खुद अंत तक करके मुझे लगा कि हर topic में depth और deep exploration की कमी है। लेकिन ठीक इसी वजह से यह perfect introductory project बन जाता है
University of Tokyo में भी एक similar project है, और मुझे लगता है कि उसे stepping stone की तरह इस्तेमाल किया जा सकता है। CPU experiment देखें: https://ytsmiling.tech/2017/04/02/cpuex.html
अगर वह पसंद न आए, तो शायद वजह documentation की कमी होगी; इस stage पर आप अपना project खुद design कर सकते हैं। मूलतः Verilog या किसी भी hardware description language का इस्तेमाल करने वाले CPU sub-project से शुरू करके operating system और compiler projects तक आगे बढ़ा जा सकता है
Project Oberon बताता है कि final system कैसा दिखता है। यह ऐसा tutorial नहीं है जो foundations से लेकर complete system तक step-by-step साथ ले जाए
Wirth का RISC processor, TECS/Nand2Tetris processor की तुलना में समझाने और program करने में कहीं ज्यादा simple है। मेरे हिसाब से Nand2Tetris processor लगभग unusable के करीब है
मैंने nandgame में Nand2Tetris processor को “design” करने की प्रक्रिया की है, और gates से wiring करने के लिहाज से Nand2Tetris processor ज्यादा simple लग सकता है
लेकिन Wirth का RISC processor FPGA पर चलाना या Verilator से simulate करना कहीं आसान होगा, क्योंकि यह किसी ऐसे व्यक्ति द्वारा कल्पना की गई hardware description language जैसी चीज़ नहीं, जिसने कभी hardware design नहीं किया; बल्कि वास्तविक hardware description language का उपयोग करता है
शायद Verilog में लिखने पर Nand2Tetris processor में code की मात्रा कम हो सकती है। यह Chuck Thacker के "a tiny computer for teaching" https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack... से काफी मिलता-जुलता होगा, और Nand2Tetris processor की तरह Data General Nova architecture पर आधारित है
Nand2Tetris आपको NAND gates से लेकर Tetris और bytecode interpreter तक ले जाता है। दूसरी ओर Oberon synthesizable Verilog से शुरू करके एक पूरी तरह उपयोगी GUI operating system तक ले जाता है, जो अपने ही source code को फिर से compile कर सकता है
अफसोस, उसके ऊपर Vivado नहीं चलाया जा सकता, इसलिए वह अपना FPGA bitstream फिर से synthesize नहीं कर सकता। हालांकि नीचे किसी ने कहा है कि लगता है वह अपने hardware को simulate कर सकता है
दोनों में common बात यह है कि processor architecture के लिए कोई काम का नाम नहीं है
Nand to Tetris की तुलना में इसकी educational structure काफी कमजोर है। अगर background knowledge चाहिए, तो बेहतर है पहले वह पढ़ें और फिर यह किताब पढ़ें
बाद में Wirth ने hardware description को अपने बनाए HDL, Lola, में port किया
पिछले 5 सालों से शैक्षणिक कंप्यूटर का विचार मेरे दिमाग में घूमता रहा है
आधुनिक हार्डवेयर और ऑपरेटिंग सिस्टम को देखते हुए, युवा पीढ़ी को सिखाने लायक सरल मशीन होना व्यावहारिक रूप से असंभव है। pico-8 जैसे fantasy console प्रोग्रामिंग के लिए अच्छे विकल्प हैं, लेकिन उनके नीचे के हार्डवेयर को समझने के लिए उपयुक्त नहीं हैं
इसलिए लगता है कि स्कूलों में अब भी पुरानी architectures को शिक्षा में इस्तेमाल किया जाता है
न्यूनतम RISC-V implementation काफी सरल है। xv6 का RISC-V implementation भी है। हालांकि बिल्कुल न्यूनतम RISC-V implementation से थोड़ा अधिक चाहिए, खास तौर पर CSR, M/S/U modes और paging की जरूरत होती है
अगर paged memory की जरूरत न हो, तो सिर्फ M mode और U mode से भी काम चल सकता है। ऐसी configuration के साथ कुछ WCH microcontrollers को target करने वाला एक छोटा real-time operating system है। PMP इस्तेमाल करता है, लेकिन वह भी अनिवार्य नहीं है
vintage 8-bit hardware समझने में बहुत आसान है, और आज भी लागू होने वाली बुनियादी बातें सिखाता है
Ben Eater के YouTube वीडियो इसके लिए शानदार हैं। 6502 project और breadboard पर “शुरुआत से” बनाया गया handmade computer, दोनों अच्छे हैं
ऐसा कंप्यूटर जो किसी तरह दूसरे computers से बात करना सीख सके, शायद सबसे बेहतर समाधान होगा
अब LLM की वजह से यह पहुंच के दायरे में आ गया है, और बाकी चुनौती computers को किसी तरह जोड़ने की है, यानी hardware compatibility की समस्या। software की तरफ, उसे सामने वाले software को किसी न किसी तरह समझ पाने में सक्षम होना चाहिए
प्रोफेसर Wirth को श्रद्धांजलि
एक अलग बात के तौर पर, क्या इस लिंक पर बेहतर tag लगाया जा सकता है ताकि दिखे कि यह PDF file है? source भरोसेमंद लगता है, लेकिन URL अगर PDF पर जाता है तो हमेशा थोड़ा सतर्क हो जाता हूं
आम तौर पर PDF पर जाने वाले links के अंत में [pdf] लगा होता है
उत्सुक हूं कि PDF file में खास तौर पर कौन-सी बात चिंता पैदा करती है
URL पहले से ही .pdf पर खत्म होता है
यूनिवर्सिटी में compiler class लेते समय मैंने Oberon compiler लिखा था
original course site नहीं मिल रही, लेकिन मेरे समय से कुछ साल पहले की सामग्री वाली यह site लगभग वैसी ही लगती है: https://cseweb.ucsd.edu/~wgg/CSE131B/
teaching language के तौर पर बेहतरीन थी
यह तो किसी नगीने जैसा है। सोच रहा हूं कि Oberon को mobile “computer” के रूप में reuse करने की कोई कोशिश हुई है या नहीं
सोच रहा हूं कि क्या किसी ने किताब को update किया है ताकि नए FPGA boards के साथ काम किया जा सके
1 टिप्पणियां
Hacker News की राय
मैंने मुख्य टेक्स्ट को TeX में फिर से typeset किया है, और रुचि रखने वालों के लिए एक ज्यादा पढ़ने योग्य PDF बनाया है: https://github.com/guidoism/tex-oberon
इसके बाद Oberon System 3 भी देखना अच्छा रहेगा। इसमें Gadgets component model और JIT/AOT compiler का मिश्रण है
"The Oberon companion - a guide to using and programming Oberon System 3"
https://www.semanticscholar.org/paper/The-Oberon-companion-a...
source code Rochus fork में देखा जा सकता है
https://github.com/rochus-keller/OberonSystem3
या फिर एक धारा Active Oberon तक भी जाती है, हालांकि यह Niklaus Wirth ने खुद नहीं किया था
https://gitlab.inf.ethz.ch/felixf/oberon
screenshots और operating system manual
https://gitlab.inf.ethz.ch/felixf/oberon/-/blob/main/ocp/Doc...
ETHZ से निकले startup द्वारा बनाया गया Component Pascal और Blackbox IDE भी है
https://blackboxframework.org/index.php
source code पढ़ने के लिए यह tool इस्तेमाल किया जा सकता है: https://github.com/Rochus-Keller/ActiveOberon
यह किताब का सिर्फ पहला आधा हिस्सा है। सभी parts और software यहां मिल सकते हैं: https://people.inf.ethz.ch/wirth/ProjectOberon/
1992 संस्करण में सबसे बड़ा अध्याय उस compiler पर था जो Oberon प्रोग्राम्स को NS32032 processor code में translate करता था, लेकिन अब वह processor मिलना भी मुश्किल है और उसकी architecture की सिफारिश करना भी कठिन बताया गया है। इसलिए किसी commercial architecture के लिए नया compiler लिखने के बजाय, simplicity और regularity को hardware तक extend करने के लिए उन्होंने खुद ही design किया—यह हिस्सा दिलचस्प है
इस फैसले की वजह से Oberon System के software के साथ-साथ hardware को भी पूरी तरह और rigorously describe किया जा सका, और उस processor को RISC कहा जाता है, जबकि सभी hardware modules Verilog में describe किए गए हैं
सोच रहा/रही हूँ कि Nand to Tetris से इसकी तुलना कैसी होगी। बाकी तो सचमुच दिलचस्प लग रहा है; क्या किसी ने इसे पढ़ा है?
उदाहरण के लिए chapter 16 का processor वाला हिस्सा सीधे Verilog code के बीच में ले जाता है। system bus के साथ CPU interface, registers, multiplication unit कैसे काम करता है—सब तुरंत सामने आ जाता है
अच्छी बात design decisions और trade-offs पर commentary है। अपने career के अंतिम दौर में Niklaus Wirth ने जीवन भर के अनुभव के आधार पर जो wisdom छोड़ी, वह मूल्यवान है। वे उन दुर्लभ विद्वानों में थे जिन्हें circuits और अधिक abstract computer science—दोनों की व्यापक और गहरी समझ थी; वे हमेशा generalize करने और principles समझने की कोशिश करते थे, और historical context में विकास की प्रक्रिया समझाते थे
Wirth होने की वजह से history lessons अक्सर उनके personal experience पर आधारित होते हैं, और मुझे लगता है कि इसी से अच्छी synthesis बनती है। उदाहरण के लिए:
हालांकि इसे खुद अंत तक करके मुझे लगा कि हर topic में depth और deep exploration की कमी है। लेकिन ठीक इसी वजह से यह perfect introductory project बन जाता है
University of Tokyo में भी एक similar project है, और मुझे लगता है कि उसे stepping stone की तरह इस्तेमाल किया जा सकता है। CPU experiment देखें: https://ytsmiling.tech/2017/04/02/cpuex.html
अगर वह पसंद न आए, तो शायद वजह documentation की कमी होगी; इस stage पर आप अपना project खुद design कर सकते हैं। मूलतः Verilog या किसी भी hardware description language का इस्तेमाल करने वाले CPU sub-project से शुरू करके operating system और compiler projects तक आगे बढ़ा जा सकता है
मैंने nandgame में Nand2Tetris processor को “design” करने की प्रक्रिया की है, और gates से wiring करने के लिहाज से Nand2Tetris processor ज्यादा simple लग सकता है
लेकिन Wirth का RISC processor FPGA पर चलाना या Verilator से simulate करना कहीं आसान होगा, क्योंकि यह किसी ऐसे व्यक्ति द्वारा कल्पना की गई hardware description language जैसी चीज़ नहीं, जिसने कभी hardware design नहीं किया; बल्कि वास्तविक hardware description language का उपयोग करता है
शायद Verilog में लिखने पर Nand2Tetris processor में code की मात्रा कम हो सकती है। यह Chuck Thacker के "a tiny computer for teaching" https://www.cl.cam.ac.uk/teaching/1112/ECAD+Arch/files/Thack... से काफी मिलता-जुलता होगा, और Nand2Tetris processor की तरह Data General Nova architecture पर आधारित है
Nand2Tetris आपको NAND gates से लेकर Tetris और bytecode interpreter तक ले जाता है। दूसरी ओर Oberon synthesizable Verilog से शुरू करके एक पूरी तरह उपयोगी GUI operating system तक ले जाता है, जो अपने ही source code को फिर से compile कर सकता है
अफसोस, उसके ऊपर Vivado नहीं चलाया जा सकता, इसलिए वह अपना FPGA bitstream फिर से synthesize नहीं कर सकता। हालांकि नीचे किसी ने कहा है कि लगता है वह अपने hardware को simulate कर सकता है
दोनों में common बात यह है कि processor architecture के लिए कोई काम का नाम नहीं है
बाद में Wirth ने hardware description को अपने बनाए HDL, Lola, में port किया
पिछले 5 सालों से शैक्षणिक कंप्यूटर का विचार मेरे दिमाग में घूमता रहा है
आधुनिक हार्डवेयर और ऑपरेटिंग सिस्टम को देखते हुए, युवा पीढ़ी को सिखाने लायक सरल मशीन होना व्यावहारिक रूप से असंभव है। pico-8 जैसे fantasy console प्रोग्रामिंग के लिए अच्छे विकल्प हैं, लेकिन उनके नीचे के हार्डवेयर को समझने के लिए उपयुक्त नहीं हैं
इसलिए लगता है कि स्कूलों में अब भी पुरानी architectures को शिक्षा में इस्तेमाल किया जाता है
अगर paged memory की जरूरत न हो, तो सिर्फ M mode और U mode से भी काम चल सकता है। ऐसी configuration के साथ कुछ WCH microcontrollers को target करने वाला एक छोटा real-time operating system है। PMP इस्तेमाल करता है, लेकिन वह भी अनिवार्य नहीं है
Ben Eater के YouTube वीडियो इसके लिए शानदार हैं। 6502 project और breadboard पर “शुरुआत से” बनाया गया handmade computer, दोनों अच्छे हैं
अब LLM की वजह से यह पहुंच के दायरे में आ गया है, और बाकी चुनौती computers को किसी तरह जोड़ने की है, यानी hardware compatibility की समस्या। software की तरफ, उसे सामने वाले software को किसी न किसी तरह समझ पाने में सक्षम होना चाहिए
पेज 59–75 एक तेज piece list implementation पर चर्चा करते हैं। यह विषय हाल ही में HN पर भी आया था
तेज editing के लिए text buffer representation तरीकों पर HN में कई threads रहे हैं, इसलिए जोड़ रहा हूं:
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
प्रोफेसर Wirth को श्रद्धांजलि
एक अलग बात के तौर पर, क्या इस लिंक पर बेहतर tag लगाया जा सकता है ताकि दिखे कि यह PDF file है? source भरोसेमंद लगता है, लेकिन URL अगर PDF पर जाता है तो हमेशा थोड़ा सतर्क हो जाता हूं
[1] https://cr.yp.to/bib/1995/wirth.pdf
यूनिवर्सिटी में compiler class लेते समय मैंने Oberon compiler लिखा था
original course site नहीं मिल रही, लेकिन मेरे समय से कुछ साल पहले की सामग्री वाली यह site लगभग वैसी ही लगती है: https://cseweb.ucsd.edu/~wgg/CSE131B/
teaching language के तौर पर बेहतरीन थी
यह तो किसी नगीने जैसा है। सोच रहा हूं कि Oberon को mobile “computer” के रूप में reuse करने की कोई कोशिश हुई है या नहीं
सोच रहा हूं कि क्या किसी ने किताब को update किया है ताकि नए FPGA boards के साथ काम किया जा सके