रेंडरिंगhi

Reader locales

Reader locale#

रीडर लोकेल Faber के स्रोत कोड, कंपाइलर डायग्नोस्टिक्स और भाषा कीवर्ड को पाठक की मानवीय भाषा में प्रस्तुत करने की प्रणाली है — अर्थ-विज्ञान को अलग किए बिना। थाई प्रोग्रामर थाई कीवर्ड के साथ Faber स्रोत पढ़ और लिख सकता है, थाई में कंपाइलर त्रुटियाँ प्राप्त कर सकता है, और लैटिन या चीनी उपयोगकर्ता के समान HIR के माध्यम से सहयोग कर सकता है। लैटिन से थाई में कोड को स्थानीयकृत करने वाला तंत्र वही है जो कोड को Rust में उत्सर्जित करता है: HIR → surface — इनमें से किसी को विशेषाधिकार प्राप्त नहीं है।

समस्या#

बड़े भाषा मॉडल ने प्रोग्रामिंग के आसपास की बातचीत को स्थानीयकृत कर दिया है — एक थाई कंप्यूटर वैज्ञानिक थाई में LLM से सहायता माँग सकता है — लेकिन स्थायी आर्टिफैक्ट को नहीं। उत्पन्न कोड, API, कंपाइलर त्रुटियाँ और दस्तावेज़ अब भी अंग्रेज़ी-आकार के बने रहते हैं। अंग्रेज़ी दक्षता कंप्यूटर विज्ञान की ओर जाने वाली रोक बन जाती है, केवल बातचीत की नहीं।

रीडर लोकेल इसका डिज़ाइन-उत्तर है: वह भाषा जिसका उपयोग कोई मानव Faber को समझने के लिए करता है — स्रोत, डायग्नोस्टिक्स और वैकल्पिक रूप से stdlib स्पेलिंग — अंग्रेज़ी को पूर्वापेक्षा बनाए बिना। यह एप्लिकेशन अंतर्राष्ट्रीयकरण (स्ट्रिंग-मैट्रिक्स का पूर्ण कवरेज) नहीं है। यह रीडर डायलेक्ट समर्थन है: ऐसे ऑप्ट-इन, आंशिक पैक जो ऐसे अर्थपूर्ण कोर पर आधारित हैं जिसे अलग नहीं किया जाता।

उत्पाद थीसिस: सॉफ़्टवेयर के आशय की समीक्षा के लिए अंग्रेज़ी आवश्यक भाषा नहीं होनी चाहिए। LLM ने प्रोग्रामिंग के आसपास की बातचीत को स्थानीयकृत किया है; रीडर लोकेल स्थायी आर्टिफैक्ट को स्थानीयकृत करता है।

यह कैसे काम करता है#

रीडर-लोकेल पैक Faber कीवर्ड, मूल प्रकारों की स्पेलिंग और डायग्नोस्टिक टेम्पलेट को लक्ष्य भाषा में मैप करता है। पैक TOML फ़ाइलें होती हैं जिनमें तीन तालिकाएँ होती हैं:

  • [keywords] — कीवर्ड नामों को उनकी स्थानीयकृत स्पेलिंग से मैप करता है
  • [types] — मूल प्रकारों के नामों को उनकी स्थानीयकृत स्पेलिंग से मैप करता है
  • [diagnostics.*] — डायग्नोस्टिक कोड को स्थानीयकृत संदेश टेम्पलेट से मैप करता है
  • [llm] — LLM कोड जनरेशन के लिए सिस्टम प्रॉम्प्ट स्निपेट और उदाहरण

कंपाइलर पैकों को एक जनरेट किए गए लैटिन स्कैफ़ोल्ड के विरुद्ध मान्य करता है — हर कीवर्ड और प्रकार की परिभाषित स्पेलिंग होनी चाहिए या उसे लैटिन से स्पष्ट रूप से इनहेरिट करना चाहिए। अनुपस्थित पंक्तियाँ मौन अंतराल के बजाय दिखाई देने वाला फ़ॉलबैक उत्पन्न करती हैं।

कमांड लाइन पर या faber.toml में लोकेल चुनें:

faber check --reader-locale th-TH program.fab
# faber.toml
[reader]
locale = "zh-Hans"

क्या स्थानीयकृत होता है और क्या नहीं#

परतHIR में?व्यवहार
कीवर्ड, प्रकार, युग्मित वाक्यांशहाँसभी रेंडरिंग में बिना जानकारी खोए
ग्लिफ़ ← → ∴ ≡ ∪ ⇥हाँ (अपरिवर्तनीय)हर रेंडरिंग में समान
प्रकार-प्रथम संरचनाहाँहर रेंडरिंग में समान
अंकसभी लोकलों में केवल ASCII
टिप्पणियाँनहींकंपाइलर के दायरे से बाहर; LLM-मध्यस्थित, ऑप्ट-इन
आइडेंटिफ़ायर नामनहींबाइट-दर-बाइट सुरक्षित
Stdlib स्पेलिंगनहींप्रति-लोकेल ओवरले

महत्वपूर्ण वास्तुशिल्पीय गारंटी यह है: कोई भी लोकेल सतह किसी भी अन्य सतह में, जिसमें लैटिन भी शामिल है, किसी भी समय बदली जा सकती है। स्थानीयकृत Faber फ़ाइल कभी जाल नहीं बनती, क्योंकि कोड जिस एकमात्र रूप में रह सकता है, वह यही नहीं है। faber format --canonical ठीक वही है जो faber format --reader-locale=la है।

उपलब्ध पैक#

Radix के साथ आज सात पैक आते हैं:

कोडभाषालिपिस्थिति
laLatina (लैटिन)लैटिनकैनोनिकल
th-THไทยथाईसंदर्भ प्रमाण
zh-Hans简体中文सरलीकृत चीनीकवरेज प्रमाण
zh-Hant繁體中文पारंपरिक चीनीकवरेज प्रमाण
arالعربيةअरबीकवरेज प्रमाण
hiहिन्दीदेवनागरीकवरेज प्रमाण
viTiếng Việtवियतनामी (लैटिन)कवरेज प्रमाण

पाँच संदर्भ लोकेल सामूहिक वास्तुशिल्पीय तनाव के लिए चुने गए हैं — साथ में वे हर Unicode और उत्सर्जन समस्या को सामने लाते हैं जिसे आधार-तंत्र को सहना होगा। चार गैर-लैटिन लिपियों का उपयोग करते हैं; वियतनामी लैटिन-लिपि नियंत्रण मामला है:

लोकेलपहुँचवास्तुशिल्पीय तनाव
th-THउच्चबिना रिक्ति वाली लिपि — टोकनाइज़र का तनाव परीक्षण
zh-Hans / zh-Hantबहुत उच्चयुग्मित कीवर्ड; सहोदर पैक इनहेरिटेंस; NFKC चौड़ाई-संकुचन
arउच्चदाएँ-से-बाएँ; डायग्नोस्टिक्स में bidi पृथक्करण
hiबहुत उच्चमात्रा/विराम क्लस्टर; Indic अंक
viउच्चलैटिन लिपि पर भारी डायक्रिटिक्स; NFKC के किनारी मामले

संदर्भ सेट जनसंख्या के लिए नहीं, वास्तुशिल्पीय कवरेज के लिए चुना गया है। केवल जनसंख्या से ऐसा कुछ सिद्ध नहीं होता जिसे आधार-तंत्र पहले से संभालता न हो।

स्थानीयकृत स्रोत उदाहरण#

छह में से हर गैर-कैनोनिकल लोकेल के पास examples/reader-locale/ के अंतर्गत एक पूर्ण Faber पैकेज है, जिसमें स्थानीयकृत स्रोत, डायग्नोस्टिक परीक्षण मामले और faber.toml मैनिफ़ेस्ट शामिल हैं। सभी उपलब्ध लोकेलों में रेंडर किया गया वही greet प्रोग्राम:

लैटिन laकैनोनिकल

फलन salve(पाठ nomen)  पाठ {
    स्थिर पाठ msg  "Salve, §!"(nomen)
    लौटाओ msg
}

आरंभ {
    स्थिर पाठ m  salve("munde")
    दिखाओ m
}

कैनोनिकल रेंडरिंग। faber format --canonical ठीक faber format --reader-locale=la है। लैटिन कीवर्ड स्वयं से मैप होते हैं; प्रकार नाम कैनोनिकल स्पेलिंग हैं।

ไทย th-THसंदर्भ प्रमाण

ฟังก์ชัน salve(ข้อความ nomen) → ข้อความ {
    ค่าคงที่ ข้อความ msg ← "Salve, §!"(nomen)
    คืนค่า msg
}

เริ่มต้น {
    ค่าคงที่ ข้อความ m ← salve("มุนเด")
    แจ้ง m
}

पहुँच-प्रमाण। थाई बिना रिक्ति वाली लिपि है — शब्दों के बीच कोई सीमा नहीं — इसलिए यह टोकनाइज़र का तनाव परीक्षण और रीडर-लोकेल प्रणाली का मूल वास्तुशिल्पीय प्रेरक है। हर टोकन सीमा को लेक्सर द्वारा केवल कीवर्ड मिलान के माध्यम से तय किया जाना चाहिए।

简体中文 zh-Hans

函数 问候(文本 名字) → 文本 {
    常量 文本 问候语 ← "你好,§!"(名字)
    返回 问候语
}

入口 {
    常量 文本 消息 ← 问候("世界")
    显示 消息
}

युग्मित कीवर्ड (si/secus के लिए 如果/否则), जिनके लिए पैक कीवर्ड समूह चाहिए; पूर्ण/अर्ध-चौड़ाई विराम-चिह्न; लेक्स प्रविष्टि पर NFKC चौड़ाई-संकुचन। CJK टोकनाइज़र सीमाओं के कारण यह सबसे कठिन LLM उत्सर्जन मामला है। पारंपरिक चीनी (zh-Hant) के लिए एक सहोदर पैक zh-Hans रूट्स को इनहेरिट और ओवरराइड करता है।

العربية ar

دالة salve(نص nomen) → نص {
    ثابت نص msg ← "مرحبا، §!"(nomen)
    أعد msg
}

بداية {
    ثابت نص m ← salve("عالم")
    اعرض m
}

तार्किक क्रम वाले LTR कोड ब्लॉक के भीतर एम्बेड की गई दाएँ-से-बाएँ लिपि। कंपाइलर के HTML डायग्नोस्टिक आउटपुट में कीवर्ड को <bdi> में लपेटा जाता है, ताकि RFO (दायाँ-बाएँ के बाद दायाँ) विकृति न हो। कच्चा स्रोत तार्किक क्रम में अरबी लिपि का उपयोग करता है; प्रदर्शन परत bidi प्रस्तुति संभालती है।

हिन्दी hi

फलन salve(पाठ nomen) → पाठ {
    स्थिर पाठ msg ← "Salve, §!"(nomen)
    लौटा msg
}

आरंभ {
    स्थिर पाठ m ← salve("जगत")
    दिखा m
}

मात्रा/विराम व्यंजन क्लस्टर वाली देवनागरी लिपि। यह व्यापक Indic परिवार के लिए मार्ग सिद्ध करती है — बंगाली, तमिल और तेलुगु इसी शेपिंग आधारभूत संरचना को इनहेरिट करते हैं — हालांकि प्रत्येक पैक का लेखन अलग कार्य बना रहता है। Indic अंकों के ग्लिफ़ (०-९) संख्यात्मक लिटरल में स्वीकार नहीं किए जाते; सभी लोकेलों में ASCII अंक सुरक्षित रहते हैं।

Tiếng Việt vi

hàm chào(vănbản tên) → vănbản {
    hằng vănbản lời_chào ← "Xin chào, §!"(tên)
    trả lời_chào
}

bắtđầu {
    hằng vănbản thông_điệp ← chào("thế giới")
    in thông_điệp
}

नियंत्रण मामला: लैटिन लिपि, लेकिन अंग्रेज़ी नहीं। भारी डायक्रिटिक भार (ế, ệ, ả) लेक्सर में NFKC के किनारी मामलों पर दबाव डालता है। यह ऐसी वास्तुकला को रोकता है जो विचित्र लिपियों पर तो काम करती हो, लेकिन डायक्रिटिक्स वाली लैटिन पर अप्रमाणित हो। आइडेंटिफ़ायर वियतनामी शब्दों (chào, tên, lời_chào, thông_điệp) का उपयोग करते हैं, और कंपाइलर उन्हें बाइट-दर-बाइट सुरक्षित रखता है।

ग्लिफ़ (← → ∴ ≡ ∪ ⇥), संरचनात्मक स्थान और आइडेंटिफ़ायर नाम ऊपर की सभी छह रेंडरिंग में समान हैं। केवल कीवर्ड और प्रकार नाम बदलते हैं। HIR ठीक वही प्रोग्राम है — कंपाइलर सभी छह को समतुल्य मानता है। Faber को थाई में रेंडर करना उसे Rust में रेंडर करने जैसी ही कंपाइलर प्रक्रिया है: HIR → surface, इनमें से किसी को विशेषाधिकार प्राप्त नहीं है।

स्थानीयकृत डायग्नोस्टिक्स#

डायग्नोस्टिक्स गद्य से पहले संरचित तथ्य हैं। हर डायग्नोस्टिक में एक स्थिर कोड (LEX###, PARSE###, SEM###, WARN###) और नामित आर्ग्युमेंट होते हैं; रेंडर किए गए टेम्पलेट पाठ का स्वामित्व पैक के पास होता है। इसका अर्थ है कि डायग्नोस्टिक रेंडरर डायग्नोस्टिक आधारभूत संरचना बदले बिना किसी भी लोकेल में संदेश उत्सर्जित कर सकता है।

रीडर-लोकेल उदाहरण पैकेजों में डायग्नोस्टिक परीक्षण मामले शामिल हैं — प्रकार असंगतियाँ, अपरिभाषित चर और गैर-ASCII संख्याएँ — जो सिद्ध करते हैं कि पूरी पाइपलाइन लोकेल-जागरूक है:

  • examples/reader-locale/vi/src/type-mismatch.fab
  • examples/reader-locale/vi/src/undefined-variable.fab
  • examples/reader-locale/vi/src/non-ascii-number.fab
  • examples/reader-locale/vi/src/keyword-suggestion.fab
  • examples/reader-locale/vi/src/keyword-edit-distance.fab

Bidi पृथक्करण अंतर्निहित है: तार्किक क्रम वाले LTR कोड ब्लॉक के भीतर अरबी कीवर्ड HTML आउटपुट में <bdi> तत्वों में लपेटे जाते हैं, जिससे वह RFO (दाएँ-बाएँ के बाद दायाँ) विकृति रुकती है जो अन्यथा RTL अनुक्रमों को अपठनीय बना देती।

स्थिति#

परतस्थिति
पैक स्कीमा, उपनाम, इनहेरिटेंस, सत्यापन, डायग्नोस्टिक्स, LLM आर्टिफैक्टउपलब्ध
पैक-जागरूक लेक्सिंग, प्रकार समाधान, मैनिफ़ेस्ट/CLI चयन, दिखाई देने वाला फ़ॉलबैकउपलब्ध
पैक-स्वामित्व वाला डायग्नोस्टिक रेंडरिंग, faber explain, bidi-पृथक प्रदर्शनउपलब्ध
कैनोनिकल Faber फ़ॉर्मैटिंगउपलब्ध
स्थानीयकृत Faber पुनः-उत्सर्जन (format --reader-locale)आंशिक
Stdlib ग्लॉस ओवरले, मापी गई LLM उत्सर्जन निष्ठा, पूर्ण लोकेल कवरेजस्थगित
बहुभाषी दस्तावेज़ जनरेशनप्रस्तावित

आधार-तंत्र की पूर्वापेक्षा — लेक्स प्रविष्टि पर NFKC सामान्यीकरण — अब उपलब्ध है। कीवर्ड तालिकाएँ, डायग्नोस्टिक नामित-आर्ग्युमेंट, रेंडरर और पैक वितरण उपलब्ध हैं। उत्तर-दिशा वाली परतें (स्थानीयकृत पुनः-उत्सर्जन, stdlib ग्लॉस, LLM उत्सर्जन बेंचमार्क, जनरेट किए गए बहुभाषी दस्तावेज़) अब भी स्पष्ट रूप से आंशिक या स्थगित हैं।

संदर्भ#

  1. radix/docs/design/reader-locale.md — पूर्ण डिज़ाइन दस्तावेज़ (69 KB)
  2. examples/reader-locale/ — स्थानीयकृत स्रोत वाले 6 लोकेल पैकेज
  3. stdlib/reader/*/pack.toml — 7 इंस्टॉल किए गए पैक परिभाषाएँ
  4. radix/crates/radix/src/reader_locale.rs — रनटाइम कार्यान्वयन
  5. radix/docs/design/faber-canonical-surface.md — कैनोनिकल मोड और faber format
  6. radix/docs/factory/lex-nfkc-normalization/ — NFKC पूर्वापेक्षा डिलीवरी

Reader-locale packages#

हर गैर-लैटिन रीडर लोकेल के लिए examples/reader-locale/ के अंतर्गत एक पूरा Faber पैकेज उपलब्ध है। इसमें स्थानीयकृत स्रोत, डायग्नोस्टिक परीक्षण मामले और faber.toml मेनिफेस्ट शामिल हैं।

उपलब्ध पैकेज#

लोकेलपथस्रोत उदाहरण
th-THexamples/reader-locale/th-TH/ฟังก์ชัน salve(ข้อความ nomen) → ข้อความ
zh-Hansexamples/reader-locale/zh-Hans/函数 问候(文本 名字) → 文本
zh-Hantexamples/reader-locale/zh-Hant/函式 問候(文字 名字) → 文字
arexamples/reader-locale/ar/دالة تحية(نص اسم) → نص
hiexamples/reader-locale/hi/फलन नमस्कार(पाठ नाम) → पाठ
viexamples/reader-locale/vi/hàm chào(vănbản tên) → vănbản

डायग्नोस्टिक परीक्षण मामले#

हर पैकेज में ऐसे परीक्षण मामले शामिल हैं जो यह प्रमाणित करते हैं कि पूरा कंपाइलर पाइपलाइन लोकेल के अनुसार काम करता है:

  • type-mismatch.fab — स्थानीयकृत प्रकार-असंगति डायग्नोस्टिक्स
  • undefined-variable.fab — स्थानीयकृत नाम-समाधान त्रुटियाँ
  • non-ascii-number.fab — NFKC हैंडलिंग
  • keyword-suggestion.fab — स्थानीयकृत “क्या आपका मतलब यह था?” संकेत