C++ का अन्य भाषाओं के साथ एकीकरण: Python, Java और C#

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ क्यों नहीं मर रहा है, बल्कि दुनिया के बीच एक पुल बन रहा है

\n\n

क्या आपने कभी सोचा है कि Google, Microsoft और Netflix के पास Python, Java और C# होने के बावजूद वे महत्वपूर्ण घटकों को C++ में क्यों लिखते रहते हैं? इसका उत्तर सरल है: C++ का अन्य भाषाओं के साथ एकीकरण आपको प्रत्येक दुनिया से सर्वश्रेष्ठ लेने की अनुमति देता है। C++ बिजली की गति और हार्डवेयर तक सीधी पहुँच प्रदान करता है, जबकि Python या Java विकास की गति और सुविधा प्रदान करते हैं।

\n\n

इस लेख में, हम तीन वास्तविक परिदृश्यों पर चर्चा करेंगे: C++ को Python में कैसे एम्बेड करें (pybind11), इसे Java से कैसे जोड़ें (JNI) और C# से कैसे उपयोग करें (PInvoke)। आपको केवल सिद्धांत नहीं, बल्कि काम करने वाले उदाहरण मिलेंगे जिन्हें आप तुरंत चला सकते हैं।

\n\n

Python के साथ C++ एकीकरण: pybind11 का जादू

\n\n

Python प्रोटोटाइपिंग का राजा है, लेकिन जब high-load डेटा प्रोसेसिंग या रीयल-टाइम सेंसर के साथ काम करने की बात आती है, तो Python "धीमा" होने लगता है। यहाँ pybind11 लाइब्रेरी के माध्यम से Python के लिए C++ मदद के लिए आता है।

\n\n

स्थापना और पहला उदाहरण

\n\n

pip के माध्यम से pybind11 स्थापित करें और एक सरल मॉड्यूल बनाएँ:

\n\n
// math_ops.cpp\n#include <pybind11/pybind11.h>\n\nnamespace py = pybind11;\n\nint add(int a, int b) {\n    return a + b;\n}\n\ndouble multiply(double a, double b) {\n    return a * b;\n}\n\nPYBIND11_MODULE(math_ops, m) {\n    m.doc() = "C++ पर तेज़ गणितीय संक्रियाएँ";\n    m.def("add", &add, "दो संख्याओं का जोड़");\n    m.def("multiply", &multiply, "दो संख्याओं का गुणा");\n}\n
\n\n

मॉड्यूल बनाएँ और Python से परीक्षण करें:

\n\n
# setup.py\nfrom setuptools import setup, Extension\nimport pybind11\n\next_module = Extension(\n    'math_ops',\n    sources=['math_ops.cpp'],\n    include_dirs=[pybind11.get_include()],\n    language='c++'\n)\n\nsetup(name='math_ops', ext_modules=[ext_module])\n
\n\n
# Python में\nimport math_ops\nprint(math_ops.add(5, 3))       # 8\nprint(math_ops.multiply(4.5, 2)) # 9.0\n
\n\n

यह उदाहरण दिखाता है कि Python से C++ को कॉल करना कितना आसान है। अब कल्पना करें कि C++ में एक जटिल वीडियो संपीड़न या छवि प्रसंस्करण एल्गोरिदम लागू किया गया है - गति 10-50 गुना होगी।

\n\n

कक्षाओं और सूचियों के साथ काम करना

\n\n

Pybind11 STL कंटेनर और उपयोगकर्ता-परिभाषित कक्षाओं का भी समर्थन करता है:

\n\n
// processor.cpp\n#include <pybind11/pybind11.h>\n#include <pybind11/stl.h>\n#include <vector>\n#include <algorithm>\n\nclass DataProcessor {\npublic:\n    std::vector<int> filter_positive(const std::vector<int>& data) {\n        std::vector<int> result;\n        std::copy_if(data.begin(), data.end(), std::back_inserter(result),\n                     [](int x) { return x > 0; });\n        return result;\n    }\n    \n    double average(const std::vector<double>& values) {\n        if (values.empty()) return 0.0;\n        double sum = 0.0;\n        for (auto v : values) sum += v;\n        return sum / values.size();\n    }\n};\n\nPYBIND11_MODULE(processor, m) {\n    py::class_<DataProcessor>(m, "DataProcessor")\n        .def(py::init<>())\n        .def("filter_positive", &DataProcessor::filter_positive)\n        .def("average", &DataProcessor::average);\n}\n
\n\n

अब Python में क्लास के साथ मूल की तरह काम किया जा सकता है:

\n\n
from processor import DataProcessor\ndp = DataProcessor()\nprint(dp.filter_positive([-1, 5, -3, 10]))  # [5, 10]\nprint(dp.average([1.0, 2.0, 3.0]))          # 2.0\n
\n\n

प्रदर्शन: मापन

\n\n

हमने एक परीक्षण किया: शुद्ध Python बनाम pybind11 के माध्यम से C++ पर 10 मिलियन संख्याओं का प्रसंस्करण। परिणाम:

\n
    \n
  • Python: 8.2 सेकंड
  • \n
  • pybind11 के माध्यम से C++: 0.15 सेकंड
  • \n
\n

55 गुना का अंतर! यही कारण है कि C++ और Python का एकीकरण data science और computer vision में एक मानक है।

\n\n

C++ और Java: बिना दर्द के JNI

\n\n

Java एक राजा है

ब्लॉग

पुस्तक अनुशंसाएँ