इस प्रोजेक्ट के बारे में
Hum एक सिस्टम्स प्रोग्रामिंग भाषा के लिए प्रारंभिक चरण (0.0.1 प्री-अल्फा) का डिज़ाइन ड्राफ्ट है। इसका घोषित लक्ष्य Rust/C++ शैली की निम्न-स्तरीय शक्ति को Python जैसी पठनीयता, स्थिर प्रकार, स्पष्ट प्रभाव, डिफ़ॉल्ट रूप से मेमोरी सुरक्षा, और मनुष्यों तथा कोडिंग एजेंट दोनों के लिए लक्षित कंपाइलर-जनित संदर्भ के साथ जोड़ना है।
मुख्य विचार यह है कि सामान्यतः टिप्पणियों के रूप में लिखे जाने वाले अनुबंध जाँचे गए वादे बन जाते हैं। एक टास्क `why`, `targets`, `uses`, `changes`, `needs`, `ensures`, `protects`, `trusts`, `fails when`, `watch for`, `cost`, `allocates`, `avoids`, `tradeoffs`, `optimizes`, `tests`, और `does` जैसे अनुभाग घोषित कर सकता है। रिपॉज़िटरी में जानबूझकर तोड़ा गया एक फ़िक्स्चर शामिल है जिसके `ensures: result == a + b` का उल्लंघन `return a - b` बॉडी द्वारा किया जाता है; इसे चलाने पर एक डायग्नोस्टिक उत्पन्न होता है जो कॉलर के बजाय टास्क कार्यान्वयन को दोष देता है।
स्वामित्व शब्द (`borrow`, `change`, `consume`) भी जाँचे गए वादों के रूप में माने जाते हैं। स्थानीय दृश्य संकीर्ण होते हैं: किसी फ़ील्ड को उधार लेना उस फ़ील्ड में बाद के लेखन से अमान्य हो जाता है, और किसी सूची तत्व को उधार लेना बाद की वृद्धि से अमान्य हो जाता है। एक लेखन-योग्य उपनाम रूप (`let alias = change record.field`) के माध्यम से लिखा जाता है और केवल अपने अंतिम सीधी-रेखा वाक्यात्मक उपयोग तक जीवित रहता है। मूव के बाद उपयोग की रिपोर्ट मूव स्थल के नाम के साथ की जाती है। `old(...)` टास्क प्रवेश पर किसी पैरामीटर का मान कैप्चर करता है, इसलिए जो स्वैप कभी स्वैप नहीं करता वह अपने ही अनुबंध द्वारा पकड़ा जाता है।
README सीमाओं के बारे में स्पष्ट है: `cost:`, `allocates:`, `protects:`, और `trusts:` पंक्तियाँ आज दर्ज किए गए इरादे, ग्राफ़ तथ्य, और जनित दायित्व हैं, प्रवर्तित प्रमाण नहीं। चेकर रिपोर्ट एक स्पष्ट गैर-दावा सूची उत्सर्जित करती हैं ताकि जाँचे गए और घोषित के बीच की सीमा दृश्यमान रहे।
स्थिति: एक Milestone 0 Rust बूटस्ट्रैप कंपाइलर फ्रंट-एंड, जिसमें Milestone 1 निष्पादन `hum run` के माध्यम से पहले Formal Core फ़िक्स्चर की व्याख्या करके शुरू किया गया है। पहला विहित नेटिव स्लाइस `programs/integer_sign.hum` है, जिसे `hum run --native --allow stdout.write ... --args -7` के साथ चलाया जाता है, जो स्रोत की जाँच करता है, बैकएंड तथ्यों को सत्यापित करता है, और समर्थित Windows तथा Linux होस्ट पर Cranelift के माध्यम से प्रिंट करता है। README इसे एक सीमित प्रोग्राम आकार के रूप में वर्णित करता है, सामान्य नेटिव कंपाइलेशन के रूप में नहीं।
रिपॉज़िटरी दस्तावेज़ीकरण-भारी है: आर्किटेक्चर, भाषा संदर्भ, व्याकरण, सिंटैक्स सतह के लिए स्कीमा, क्षमताएँ, लक्ष्य तथ्य, साक्ष्य रिपोर्ट, गणितीय दायित्व, संसाधन रिपोर्ट, Core Hum अनुबंध/पूर्वावलोकन/लोअर/सत्यापन, प्रकार/प्रभाव/स्वामित्व/संसाधन जाँच, IR अनुबंध और तैयारी, बैकएंड इनपुट/प्रोब/अनुबंध, LSP क्षमताएँ, doctor, साथ ही निर्णय रिकॉर्ड, सुरक्षा मॉडल, असुरक्षित नीति, इंटरऑप और पोर्टेबिलिटी, मेमोरी सुरक्षा मॉडल, कंपाइल-टाइम रणनीति, stdlib रणनीति, रनटाइम प्रोफ़ाइल, बैकएंड रणनीति, रोडमैप, गवर्नेंस, और शोध नोट्स। टूलिंग में एक TextMate व्याकरण, एक नियोजित फ़ॉर्मेटर (`humfmt`), एक पैकेज मैनेजर योजना (Nectar), और `check`, `version`, `explain`, `diagnostics`, `capabilities`, `target-facts`, `core-contract`, `core-preview`, `core-lower`, `core-verify`, और `full-type-check` जैसे CLI कमांड शामिल हैं, जिनमें से कई JSON आउटपुट के साथ हैं।
बूटस्ट्रैप कंपाइलर Rust में लिखा गया है और डिफ़ॉल्ट रूप से असुरक्षित कोड को अस्वीकार करता है, एक समीक्षित, स्थानीय रूप से अनुमत असुरक्षित JIT आह्वान सीमा और पाँच पिन किए गए Cranelift निर्भरताओं के साथ। Cargo वर्तमान बिल्ड और इंस्टॉल पथ है, हालाँकि README नोट करता है कि Hum को दीर्घकालिक रूप से "केवल एक Cargo क्रेट" के रूप में स्थापित नहीं किया जाना चाहिए।
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.