প্রকল্প সম্পর্কে

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`: প্যাকেজ রেজিস্ট্রিতে প্রকাশ - ক্রস-কম্পাইলেশন (লক্ষ্য নির্দিষ্ট করে) এবং বিভিন্ন ব্যাকএন্ড কম্পাইলার (যেমন 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/