19 पॉइंट द्वारा GN⁺ 2026-01-04 | 4 टिप्पणियां | WhatsApp पर शेयर करें
  • C भाषा के syntax और semantics को बनाए रखते हुए safety और usability को मजबूत करने वाली एक evolved language है, जो मौजूदा C developers के लिए परिचित environment बनाए रखती है
  • पूर्ण C ABI compatibility देती है, इसलिए C/C++ projects में सीधे integrate की जा सकती है, और ऐसा उदाहरण भी है जहाँ vkQuake के कुछ code को C3 में बदलकर c3c compiler से build किया गया
  • module system, operator overloading, compile-time macros आदि के जरिए code structure और expressiveness को बेहतर बनाती है
  • contract-based programming (Gradual Contracts), zero-overhead error handling, runtime और compile-time reflection जैसी आधुनिक सुविधाएँ शामिल हैं
  • debug mode में safety checks और detailed stack traces अपने-आप मिलते हैं, जिससे bug detection और stability में मदद मिलती है

C3 अवलोकन

  • C3 एक programming language है जो C भाषा के syntax और semantics के आधार पर विकसित की गई है
    • इसका लक्ष्य है कि मौजूदा C programmers के लिए परिचित रूप बनाए रखते हुए भाषा को आगे बढ़ाया जाए
  • सटीक और उद्देश्य-उन्मुख operator overloading को support करती है
    • C++ की जटिल overloading structure के बिना vector, matrix, fixed-point arithmetic को स्वाभाविक रूप से व्यक्त किया जा सकता है
  • contract-based programming को support करती है, जिससे runtime और compile-time constraints को स्पष्ट रूप से लिखा जा सकता है
    • इससे code की stability और specification consistency बेहतर होती है
  • Result-based error handling और exception के फायदों को जोड़ती है
    • C code के साथ स्वाभाविक रूप से integrate होने वाली error management structure देती है
  • type introspection को compile-time और runtime, दोनों में support करती है
  • inline assembly: string या जटिल constraints के बिना सामान्य code की तरह assembly लिखी जा सकती है
  • debug mode में runtime bound checks और value checks अपने-आप डाले जाते हैं
  • C3 standard library debug builds में detailed stack traces डिफ़ॉल्ट रूप से देती है
    • साधारण “segmentation fault” की जगह error की सटीक location पता की जा सकती है

Ergonomics and Safety

  • Optionals के जरिए error और null handling की safety मिलती है
  • defer syntax से resource cleanup को automate किया जा सकता है
  • slices और foreach से सुरक्षित iteration संभव है
  • comment-based contracts से code constraints को स्पष्ट रूप से लिखा जा सकता है
  • @pool context में memory auto-release को support किया जाता है

Performance by default

  • SIMD vectors को सीधे लिखकर hardware-level control संभव है
  • अलग-अलग memory allocators चुनकर performance fine-tuning की जा सकती है
  • error handling में overhead-free design अपनाया गया है
  • तेज compile time और LLVM backend optimization का लाभ मिलता है
  • इस्तेमाल में आसान inline assembly दी गई है

Batteries included standard library

  • dynamic containers और strings सहित standard data structures उपलब्ध हैं
  • cross-platform abstraction के जरिए platform portability सुनिश्चित होती है
  • ज़रूरत पड़ने पर native platform access की अनुमति है

Leverage existing C or C++ libraries

  • C3 C ABI के साथ पूरी तरह compatible है, इसलिए अलग से “C-compatible types” या function declarations की ज़रूरत नहीं होती
  • C3 से C code को link किया जा सकता है, और C से C3 code को भी link किया जा सकता है

Modules are simple

  • सरल और सहज module system
    • defaults को इस तरह बनाया गया है कि वे development flow में बाधा न डालें
  • modules के जरिए namespace management मिलता है
  • explicit control के साथ encapsulation structure को सरल बनाया गया है
  • interfaces के जरिए shared behavior define किया जा सकता है
  • generic modules की सुविधा, जिससे generic types को सरल और स्पष्ट तरीके से implement किया जा सकता है
  • struct subtyping के जरिए structure reuse को support किया जाता है

Macros without a PhD

  • compile-time macros को सामान्य functions जैसी शैली में लिखा जा सकता है
  • code के type information को समझने वाले type-aware macros उपलब्ध हैं
  • C preprocessor की तुलना में अधिक स्पष्ट और शक्तिशाली code generation मिलता है

4 टिप्पणियां

 
kayws426 2026-01-06

काफ़ी तरह-तरह से आ रहे हैं। LONG LIVE C-LANG !!!
लेकिन बाद में अगर c4 आ गया, तो क्या उसे सचमुच विस्फोटक लोकप्रियता मिलेगी...

 
bus710 2026-01-05

Zig में हर साल breaking changes आते रहते हैं, इसलिए भाषा पसंद होने के बावजूद अब उसका ज़्यादा इस्तेमाल करने का मन नहीं करता।
वहीं c3 का परिचय देखकर लगा कि कुल मिलाकर यह c + go जैसा एहसास देता है, इसलिए पढ़ना-लिखना आसान है और version upgrades से होने वाला stress भी काफ़ी कम होगा।

 
mhcoma 2026-01-05

थोड़ा समर्थन भी करते हुए... मैं इसे हाल में इस्तेमाल कर रहा हूँ और यह मज़ेदार है.
मुझे यह इसलिए पसंद है क्योंकि यह C करते समय होने वाली सिर्फ असुविधाजनक बातों को ही सुधारने की कोशिश करता है.
आधिकारिक दस्तावेज़ अभी थोड़ा परिपक्व नहीं है
(ऐसे-वैसे फीचर्स के बारे में जानने के लिए अक्सर बिल्कुल अप्रत्याशित जगहों पर विवरण लिखा मिलता है...)

 
GN⁺ 2026-01-04
Hacker News की राय
  • मुझे C3 की डिज़ाइन फ़िलॉसफ़ी की संयमित दिशा पसंद है
    यह न तो कोई नया memory model थोपती है, न ही C++ जैसा बनने की कोशिश करती है
    खासकर पूर्ण ABI compatibility की वजह से मौजूदा C build system में सीधे C3 फ़ाइलें मिलाकर इस्तेमाल किया जा सकता है, इसलिए binding लिखने की ज़रूरत नहीं पड़ती
    क्रांति से ज़्यादा विकास को लक्ष्य बनाने वाले maintainers की सोच काबिले-तारीफ़ है
    वीकेंड में सीखने लायक भाषा के रूप में इसकी सिफारिश की जा सकती है। यह C99 से ज़्यादा आधुनिक है, लेकिन एहसास परिचित रहता है
    • सोच रहा हूँ कि क्या C3 में library लिखकर symbols export किए जा सकते हैं ताकि bindings में उनका इस्तेमाल हो सके
      मैं C को पूरी तरह छोड़ नहीं पाता, उसकी वजह cstring और unreleased pointers हैं
    • मुझे संदेह है कि पूर्ण ABI compatibility सच में इतनी महत्वपूर्ण है
      C अपने-आप में उतनी खतरनाक भाषा नहीं है, जितनी उसकी implementations और ABI खतरनाक हैं
      fat pointer, varargs improvements, UBSan, MTE वगैरह लागू किए जाएँ तो चीज़ें काफ़ी बेहतर हो सकती हैं
  • C3 के आधिकारिक दस्तावेज़ में Contracts सेक्शन पढ़ते समय एक सवाल उठा
    अगर compiler के लिए contracts को ज़रूरी तौर पर जाँचना आवश्यक नहीं है, और उल्लंघन होने पर undefined behavior हो सकता है, तो इस पर भरोसा करके इसे कैसे इस्तेमाल किया जाए, समझ नहीं आता
    फ़ीचर बढ़िया है, लेकिन थोड़ा जोखिम भरा लगता है
    • contract एक invariant है, यानी “ऐसी शर्त जो हमेशा सत्य होनी चाहिए”
      इसे अनदेखा किया जा सकता है, runtime पर जाँचा जा सकता है, या फिर इसे हमेशा सत्य मानकर optimization में इस्तेमाल किया जा सकता है
      उदाहरण के लिए pointer validity को जाँचा जा सकता है, जबकि odd input condition को एक assumption के रूप में छोड़ा जा सकता है
    • contract का मकसद intent को मानकीकृत तरीके से व्यक्त करना है
      बड़ी टीमें इसे enforce कर सकती हैं, और Visual Studio जैसे tools सिर्फ warning दिखाकर लोगों को धीरे-धीरे सीखने का मौका दे सकते हैं
    • दस्तावेज़ की तीन पंक्तियों का मतलब अलग-अलग यह है
      1. compiler के लिए contracts का इस्तेमाल करना अनिवार्य नहीं है
      2. उल्लंघन होने पर undefined behavior हो सकता है
      3. safety mode में इन्हें runtime assert के रूप में जाँचा जाता है
        यानी development के दौरान इसे चालू रखा जा सकता है, और release के समय बंद करके performance पर असर से बचा जा सकता है
    • आख़िरकार यह वही assumption-based optimization है जो compiler पहले से करता है, बस उसे code में स्पष्ट रूप से व्यक्त किया जाता है
    • मैं contracts को ऐसी soft constraints की तरह समझता हूँ जो “ऐसी शर्तें” बताती हैं जिन तक लगभग कभी पहुँचना नहीं चाहिए
      जिन शर्तों की जाँच अनिवार्य है, उन्हें function के भीतर सीधे code से संभालना चाहिए
  • C3 GitHub repository में और विस्तार से जानकारी है
    C से अलग इसकी चीज़ों में header files नहीं हैं, module-based namespace, slices, operator overloading, generic modules, Result-आधारित error handling, और safety mode में runtime checks शामिल हैं
    • features अच्छे हैं, लेकिन composition थोड़ी imbalanced लगती है
      निजी तौर पर मुझे function overloading, default parameters, और tuple return की कमी खलती है
  • C3 में Result या Expected को Optional कहना भ्रमित करता है
    इसका मतलब “T या खाली” नहीं, बल्कि “T या E” होना चाहिए, इसलिए नाम गलत-सा लगता है
    संबंधित दस्तावेज़ लिंक
    • C3 का Optional Option<T> या Result<T, E> जैसा नहीं है
      error type सिर्फ़ एक integer code तक सीमित है, और यह “क्रांति नहीं, विकास” वाली फ़िलॉसफ़ी से अच्छी तरह मेल खाता है
      type? syntax भी सहज लगता है
    • code में “Optional” शब्द को सीधे इस्तेमाल नहीं किया जाता
      यह C के अर्थ को बनाए रखते हुए out param का बोझ कम करने वाला डिज़ाइन है
    • concept के नाम मनमाने ढंग से बदलना अच्छा नहीं लगता, लेकिन अगर दोनों में से सिर्फ़ एक को support करना हो, तो Optional ज़्यादा स्पष्ट नाम है
      Result का सामान्य अर्थ पहले से ही return value से जुड़ा है, इसलिए भ्रम हो सकता है
    • फिर भी “Option” या “Maybe” का मतलब कुछ और होता है, इसलिए मुझे “Result” या “Either” ज़्यादा उपयुक्त लगता है
  • Tsoding का C3 पर 30 घंटे से ज़्यादा का livestream मौजूद है
    YouTube playlist
  • मेरा C3, Odin, और Zig के developers के साथ बातचीत का अनुभव रहा है
    यह बात प्रभावशाली लगी कि ये तीनों भाषाएँ एक-दूसरे से प्रतिस्पर्धा करने के बजाय अपने-अपने trade-offs साझा करके सीखने वाले रिश्ते में हैं
    • जानना चाहता हूँ कि embedded environment में इनमें से कौन-सी भाषा सबसे व्यावहारिक है
    • “प्रतिस्पर्धा नहीं, सीखना” कहा जाता है, लेकिन आख़िर में क्या यह सिर्फ़ शिष्ट भाषा में कही गई प्रतिस्पर्धा नहीं है?
  • दस्तावेज़ों को सरसरी तौर पर देखने पर मेरे दो सवालों के जवाब मिल गए
    1. यह LLVM-आधारित है, इसलिए इसकी portability अच्छी है
    2. Tagged enum का समर्थन नहीं है
      इसकी जगह macros और reflection जैसे features जोड़े गए हैं
    • मुझे लगता है कि system languages में tagged union अकुशल होता है
      यह सबसे बड़े type जितनी memory लेता है, और runtime type checking की तरफ़ flow खिसक जाता है, जिससे static type language के फ़ायदे कम हो जाते हैं
      ज़रूरत पड़ने पर इसे सीधे खुद implement करना बेहतर है
  • सोचता हूँ कि नई language बनाना आखिर कब वाकई सार्थक होता है
    मैंने C में generics, slices, और error propagation खुद implement किए हैं, लेकिन compiler बनाना बहुत जटिल है
    इसलिए मैं C के एक variant और Go, दोनों के साथ काम करता हूँ
    • LLVM की वजह से “बेहतर C” जैसी family की language बनाना सोच से आसान है
      entry barrier इतना कम है कि सिर्फ़ एक दिन में prototype भी बनाया जा सकता है
    • language बनाना हमेशा सार्थक है
      किसी नए paradigm को वास्तविकता में बदलने का यही एकमात्र तरीका है
      language में syntax, standard library, tooling, runtime — सबको साथ में संतुलित करना पड़ता है, इसलिए यह कठिन है, लेकिन इसी वजह से भविष्य पर इसका असर भी बड़ा होता है
    • C3 मूल रूप से C2 में योगदान दे रहे Christoffer का ऐसा project है जो उन्होंने धीमी development speed से निराश होकर स्वतंत्र रूप से शुरू किया था
      LLVM की वजह से नया compiler खुद बनाना संभव हुआ
    • language की असली क़ीमत दूसरों के साथ साझा समझ बनाने में है
      अकेले इस्तेमाल होने वाला C variant ठीक है, लेकिन दूसरे लोगों के साथ सहयोग करना हो या बाहरी libraries इस्तेमाल करनी हों, तो एक common language चाहिए
  • शुरुआत में लगा था कि यह एक सरल भाषा होगी, लेकिन इसके काफ़ी समृद्ध feature list को देखकर हैरानी हुई
    और exceptions को “Excuses” कहना प्यारा और चतुर लगा
  • मेरे हिसाब से ऐसी वेबसाइट ही programming language sites के लिए आदर्श होनी चाहिए
    • उल्टा मुझे इसका डिज़ाइन बचकाना और amateurish लगा
      खासकर navigation में Discord link होने से यह प्रभाव और मज़बूत हुआ