- 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.ml → primes.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 जैसी दूसरी भाषाओं तक विस्तार की संभावना भी सामने रखी गई है
अभी कोई टिप्पणी नहीं है.