'\n' का स्रोत
just foo कमांड चलाने पर, justfile bar नाम की फ़ाइल में 0x0A बाइट लिखता है
just Rust में लिखा गया है, और just parser cook_string नामक फ़ंक्शन के ज़रिए escape sequence वाले just string token को UTF-8 string में बदलता है
Rust में प्रसंस्करण
rustc escape code को scan_escape नामक फ़ंक्शन में प्रोसेस करता है
rustc Rust में लिखा गया है और self-hosting के साथ compile होता है, इसलिए '\n' का अर्थ समझने के लिए यह rustc पर निर्भर करता है
rustc के शुरुआती version OCaml में लिखे गए थे, और OCaml version का rustc lexer में character escape को प्रोसेस करता था
OCaml में प्रसंस्करण
- OCaml compiler
\n को \010 के रूप में evaluate करता है और परिणाम को शामिल करता है
0x0A, 10 के बराबर है, इसलिए जब OCaml compiler \n को प्रोसेस करता है, तो उसे 0x0A बाइट मान मिलता है
निष्कर्ष
justfile में \n character escape होने पर, just binary 0x0A बाइट सहित अंतिम string को लिखता है
- यह
0x0A बाइट rustc द्वारा डाली गई थी, और इसकी शुरुआत वहाँ से हुई जहाँ OCaml compiler ने पहली बार rustc binary में 0x0A बाइट डाली
GN⁺ का सारांश
- यह लेख बताता है कि
\n character escape कैसे 0x0A बाइट में बदलता है
- Rust और OCaml compiler के ऐतिहासिक संदर्भ के माध्यम से
0x0A बाइट के स्रोत का पता लगाया गया है
- यह प्रोग्रामिंग भाषाओं के compiler character escape को कैसे प्रोसेस करते हैं, इस पर एक दिलचस्प अंतर्दृष्टि देता है
- यह Rust और OCaml के compiler behavior को समझने में मददगार लेख है
1 टिप्पणियां
Hacker News राय
एक उपयोगकर्ता ने उल्लेख किया कि उन्होंने यह विचार पहली बार "How I wrote a self-hosting C compiler in 40 days" नामक लेख के 42वें दिन पढ़ा था
EBCDIC सिस्टम के बारे में कहा गया कि यह ध्यान में रखना चाहिए कि शुरुआती C compiler ASCII के अलावा अन्य सिस्टम पर भी मौजूद थे
C standard में character encoding के बारे में एकमात्र गारंटी यह है कि '0'-'9' अंक लगातार बढ़ते क्रम में map होते हैं
एक उपयोगकर्ता ने Ken Thompson के Turing Award lecture "Reflections on Trusting Trust" का उल्लेख किया और अनुमान लगाया कि यह लेख शायद उसी lecture से प्रेरित था
यह जानने की जिज्ञासा जताई गई कि क्या clang compiler में भी यही गुण है; बताया गया कि यह
lib/Lex/LiteralSupport.cppमें स्पष्ट रूप से 10 के रूप में coded हैएक उपयोगकर्ता ने पूछा कि "\n" को 10 के रूप में encode किए जाने को समझने के लिए खोजबीन की ज़रूरत क्यों पड़ी, क्योंकि उन्हें यह अपेक्षित लगा
कहा गया कि यह लेख literary programming और कविता के मेल की तरह पढ़ा जाता है, और यह समझाने की कोशिश करता है कि code generation के सैकड़ों cycle के जरिए 0x0A byte कैसे बनता है
एक उपयोगकर्ता ने बताया कि C भाषा की वजह से वे "\0???" को octal escape मानते थे, इसलिए "\012" को "\x0a" या "0x0a" और "\010" को "0x08" के रूप में समझते थे
यह एक दिलचस्प सवाल उठाया गया कि अगर ASCII या strings में escape code न होते, तो हमारा code कैसा दिखता
यह भी कहा गया कि programming का एक नियम है: जब किसी काम के दो तरीके हों, और एक सही व दूसरा गलत होने की संभावना 50/50 लगे, तो शुरुआत में गलत वाला चुन लेने की संभावना ज़्यादा होती है