• OCaml कंपाइलर के लिए C++ कोड generation को सपोर्ट करने वाला नया बैकएंड प्रस्तावित किया गया है, जो मौजूदा C-आधारित बैकएंड की सीमाओं को पूरक करता है
  • परिवर्तित कोड शुद्ध functional style में लिखा जाता है, और mutable state या standard library के उपयोग के बिना List module के कुछ हिस्सों को फिर से implement करता है
  • इसे चलाने के लिए C++ compiler (g++) की ज़रूरत होती है, और यह template depth limit हटाने या arguments पास करने के लिए options सपोर्ट करता है
  • performance compiler के अनुसार अलग-अलग है, और बेहतर priority queue-आधारित sieve algorithm लागू करने पर speed और memory efficiency में सुधार होता है
  • community इसे functional language और template metaprogramming के संयोजन पर एक प्रयोग के रूप में देखती है, और Rust तक विस्तार की संभावना का भी ज़िक्र किया गया है

C++ बैकएंड जोड़ने का प्रस्ताव

  • OCaml compiler (ocamlc) में C++ बैकएंड जोड़ने वाला patch प्रस्तावित किया गया है
    • यह मौजूदा runtime और FFI में इस्तेमाल हो रहे non-incremental C backend का बेहतर रूप है
    • ocamlc -incr-c primes.ml कमांड से OCaml कोड को C++ में बदला जा सकता है
  • परिवर्तित C++ कोड शुद्ध functional style में लिखा जाता है और mutable state को सपोर्ट नहीं करता
    • इस वजह से standard library का उपयोग संभव नहीं है, और उदाहरण में List module के कुछ हिस्सों को शुद्ध functional रूप में फिर से implement किया गया है
    • output को Cons<hd, tl> जैसी nested structure के रूप में दिखाया जाता है, ताकि C++ के :: operator से टकराव से बचा जा सके
  • इसे चलाने के लिए C++ compiler (g++) की ज़रूरत होती है, और -Dlimit=100 option से arguments पास किए जा सकते हैं
    • execution result compiler error message के format में output होता है
    • बड़े computation के लिए -ftemplate-depth=999999 option से template depth limit हटाई जा सकती है
  • performance compiler के अनुसार अलग-अलग है
    • g++ 10000 तक prime numbers निकालने में लगभग 30 सेकंड और 11GiB memory का उपयोग करता है
    • clang++ 1 सेकंड के भीतर warning देने के बाद segmentation fault के साथ रुक जाता है
    • O’Neill के priority queue-आधारित sieve algorithm को लागू करने पर यह 8 सेकंड और 3.1GiB तक बेहतर हो जाता है
  • भविष्य के विस्तार के रूप में Rust सपोर्ट का ज़िक्र किया गया है
    • कहा गया है कि यदि Rust partial impl specialization को पूरा कर ले, तो OCaml programs चलाना संभव हो सकता है

community की प्रतिक्रिया और चर्चा

  • feature test और feedback

    • redianthus ने non-uniform recursive data type सपोर्ट के बारे में पूछा
    • stedolan ने %predint के unimplemented होने से जुड़ी error को ठीक किया और पुष्टि की कि वह type सही तरह से काम करता है
  • हास्य और प्रतिक्रियाएँ

    • avsm ने मज़ाक में कहा, “हमें C-- चाहिए था, लेकिन यह C++ है; चलो C# पर समझौता करते हैं”
    • stedolan ने जवाब दिया, “अगले साल मैं complex number ℂ आज़माऊँगा”
    • 😂, ❤️, 🚀 जैसे कई emoji reactions से community की सकारात्मक प्रतिक्रिया दिखी
  • तकनीकी सुझाव

    • AdelKS ने template की जगह constexpr evaluation इस्तेमाल करने वाला एक विकल्प सुझाया
      • compile time पर prime numbers निकालकर उन्हें सीधे binary में शामिल करने वाला example code साझा किया गया
    • LoganDark ने मज़ाकिया अंदाज़ में जवाब दिया, “वह तो बस शुद्ध मज़े के लिए है”, और templates इस्तेमाल करने की वजह बताई
  • अतिरिक्त चर्चा

    • redianthus ने कहा, “अब C++ सचमुच एक functional language बन गया है”
      • उन्होंने ज़ोर देकर कहा कि OCaml के शुद्ध functional data structures को C++ में implement किया जा सकता है
    • dzmitry-lahoda ने बताया कि Rust में भी OCaml पहले से चलाया जा सकता है, और contextgeneric/cgp प्रोजेक्ट का ज़िक्र किया

performance और execution examples

  • मूल उदाहरण: prime number calculation program
    • ocamlc -incr-c primes.mlprimes.cpp generate होता है
    • g++ -Dlimit=100 primes.cpp चलाने पर prime numbers की list output होती है
  • high-performance settings

    • g++ -ftemplate-depth=999999 -Dlimit=10000 primes.cpp
    • लगभग 30 सेकंड, 11GiB memory usage
  • बेहतर algorithm लागू करने पर

    • 8 सेकंड, 3.1GiB तक performance improvement

निष्कर्ष

  • यह PR OCaml को C++ में बदलने वाले एक नए backend experiment के रूप में, functional language और template metaprogramming के संयोजन की संभावना दिखाता है
  • community ने इसे तकनीकी हास्य और रचनात्मक प्रयोग के संयोजन के उदाहरण के रूप में लिया और सक्रिय प्रतिक्रिया दी
  • Rust जैसी दूसरी भाषाओं तक विस्तार की संभावना भी सामने रखी गई है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.