इस प्रोजेक्ट के बारे में

Nolang एक नई भाषा है जिसका उद्देश्य सिस्टम प्रोग्रामिंग है, और इसका मुख्य डिज़ाइन लक्ष्य मेमोरी सुरक्षा है, बिना किसी गार्बेज कलेक्शन (GC) के। ## भाषा विेषताए **मेमोरी सुरक्षा**: Nolang GC पर निर्भर नहीं करती; यह स्वचालित मेमोरी प्रबंधन के माध्यम से सुरक्षा सुनिश्चित करती है। वेरिएबल फ़ंक्शन स्कोप के अंत में स्वतः नष्ट हो जाते हैं, और मैनुअल फ़्री करना वर्जित है ताकि डैंगलिंग रेफरेंस से बचा जा सके। ऐरे और स्लाइस जैसे कंटेनर वैल्यू कॉपी सिमैंटिक्स अपनाते हैं, जो मूल वेरिएबल के जीवनकाल से अलग रहते हैं। **एकीकृत रेफरेंस पासिंग मॉडल**: सभी फ़ंक्शन पैरामीटर डिफ़ॉल्ट रूप से रेफरेंस द्वारा पास होते हैं; फ़ंक्शन के अंदर पैरामीटर में किया गया परिवर्तन सीधे कॉलर के मूल डेटा पर लागू होता है, लेकिन पैरामीटर को स्वयं नष्ट नहीं किया जा सकता। **स्कोप में वेरिएबल ओवरराइट**: एक ही फ़ंक्शन स्कोप में समान वेरिएबल नाम का दोबारा उपयोग करने पर Nolang इसे नया वेरिएबल बनाने के बजाय ओवरराइट पुनः-असाइनमेंट मानती है। यदि टाइप भिन्न हों तो सिंटैक्स स्तर पर ही इसकी अनुमति नहीं होती, जिससे वेरिएबल शैडोइंग पूरी तरह समाप्त हो जाती है। **भाषा स्तर पर कभी क्रैश नहीं**: अंतर्निहित क्रैश पथ समाप्त, कोई छिपी अस्पष्टता नहीं। **पूर्व-बैच हीप आवंटन और बैच मुक्ति**: समय से पहले बैच आवंटन का समर्थन, स्कोप छोड़ते समय बैच में free, कोई छिपी आवंटन लागत नहीं। ## टूलचेन पूर्ण कमांड-लाइन टूल (`no` कमांड) उपलब्ध है, जो निम्नलिित कार्यों का समर्थन करता है: - `no init` / `no new`: वर्कस्पेस आरंभ करना और नया प्रोजेक्ट पैकेज बनाना - `no fmt`: कोड फ़ॉर्मेटिंग - `no build` / `no run` / `no test`: बिल्ड, रन और टेस्ट - `no add` / `no remove` / `no update` / `no sync` / `no list`: डिपेंडेंसी प्रबंधन - `no install` / `no uninstall`: बाइनरी इंस्टॉल प्रबंधन - `no pub`: पैकेज रजिस्ट्री में पब्लिश करना - क्रॉस-कंपाइलेशन (target निर्दिष्ट करके) और विभिन्न बैकएंड कंपाइलर (जैसे Zig) का समर्थन एंट्री कन्वेंशन: `main.no` प्रोग्राम एंट्री है, `lib.no` लाइब्रेरी एंट्री है, और `tests/` डायरेक्टरी की सभी `.no` फ़ाइलें टेस्ट फ़ाइलें हैं। ## एडिटर समर्थन - VSCode एक्सटेंशन (LSP server सहित) - `make lsp` के माध्यम से सोर्स से बिल्ड किया जा सकता है ## सोर्स से बिल्ड `make` कमांड का उपयोग करें: `make no` CLI बिल्ड करता है, `make lsp` लैंग्वेज सर्वर बिल्ड करता है, `make package` VSCode एक्सटेंशन पैकेज करता है, `make playground` WebAssembly ऑनलान Playground बिल्ड करता है। ## संबंधित प्रोजेक्ट - notools: Nolang में कार्यान्वित Unix कमांड-लाइन टूल्स का सेट (cat, ls, grep, wc आदि), जो सिस्टम प्रोग्रामिंग क्षेत्र में भाषा के व्यावहारिक उपयोग को प्रदर्शित करता है। प्रोजेक्ट Apache-2.0 लाइसेंस के अंतर्गत है, आधिकारिक डॉक्यूमेंटेशन: https://lizongying.github.io/nolang/