विदेशी कार्य अंतराफलक: Difference between revisions

From Vigyanwiki
mNo edit summary
mNo edit summary
Line 1: Line 1:
{{short description|Interface to call functions from other programming languages}}
{{short description|Interface to call functions from other programming languages}}
{{external links|date=August 2016}}
{{external links|date=August 2016}}
एक विदेशी प्रकार्य अंतरापृष्ठ (FFI) एक ऐसा तंत्र है जिसके द्वारा एक प्रोग्राम लिखा गया है, समान्यतः एक व्याख्या की गई ([[प्रोग्रामिंग भाषा]]एं), जो रूटीन को कॉल कर सकती है या किसी अन्य में लिखित या संकलित सेवाओं का उपयोग कर सकती है। FFI का उपयोग प्रायः उस संदर्भ में किया जाता है जहां बाइनरी सक्रिय-लिंक लाइब्रेरी में कॉल की जाती हैं।  
एक विस्थानीय प्रकार्य अंतरापृष्ठ (FFI) एक ऐसा तंत्र है जिसके द्वारा एक प्रोग्राम लिखा गया है, समान्यतः एक व्याख्या की गई ([[प्रोग्रामिंग भाषा]]एं), जो रूटीन को कॉल कर सकती है या किसी अन्य में लिखित या संकलित सेवाओं का उपयोग कर सकती है। FFI का उपयोग प्रायः उस संदर्भ में किया जाता है जहां बाइनरी सक्रिय-लिंक लाइब्रेरी में कॉल की जाती हैं।  


== नामकरण ==
== नामकरण ==


यह शब्द कामन लिस्प के लिए विनिर्देश से आता है, जो स्पष्ट रूप से प्रोग्रामिंग भाषासुविधा को संदर्भित करता है जैसे कि अंतर-भाषाकॉल के लिए सक्षम होता है;{{Citation needed|reason=ANSI/X3.226 does not mention FFI|date=December 2022}} इस शब्द का उपयोग प्रायः  [[हास्केल (प्रोग्रामिंग भाषा)]],<ref>{{cite web|title=FFI Introduction|url=https://wiki.haskell.org/FFI_Introduction|website=HaskellWiki|access-date=19 June 2015|quote=Haskell's FFI is used to call functions from other languages (basically C at this point), and for C to call Haskell functions.}}</ref> रस्ट (प्रोग्रामिंग भाषा),<ref>{{cite web|title=std::ffi - Rust|url=https://doc.rust-lang.org/std/ffi/index.html|access-date=1 April 2021|quote=This module provides utilities to handle data across non-Rust interfaces, like other programming languages and the underlying operating system. It is mainly of use for FFI (Foreign Function Interface) bindings and code that needs to exchange C-like strings with other languages.}}</ref> पायथन (प्रोग्रामिंग भाषा), और लुजीत  [[ लुआ (प्रोग्रामिंग भाषा) |लुआ (प्रोग्रामिंग भाषा)]] <ref name=":0" /><ref name=":1">{{Cite book |last=Heintz |first=Joachim |url=https://www.worldcat.org/oclc/855505215 |title=Ways Ahead : Proceedings of the First International Csound Conference. |date=2013 |publisher=Cambridge Scholars Publishing |others=Alex Hofmann, Iain McCurdy |isbn=978-1-4438-5122-0 |location=Newcastle upon Tyne |oclc=855505215}}</ref>{{Rp|page=35}} दुभाषिया और संकलक प्रलेखन द्वारा अधिकारिक रूप से किया जाता हैं।।<ref>{{cite web|title=CFFI documentation|url=https://cffi.readthedocs.org/|access-date=19 June 2015|quote=C Foreign Function Interface for Python. The goal is to provide a convenient and reliable way to call compiled C code from Python using interface declarations written in C.}}</ref> अन्य भाषाएं अन्य शब्दावली का उपयोग करती हैं: ADA प्रोग्रामिंग भाषा "भाषा बंधन" के बारे में बात करती है, जबकि [[जावा (प्रोग्रामिंग भाषा)]] अपने FFI  को JNI ([[जावा देशी इंटरफ़ेस|जावा नेटिव इंटरफ़ेस]] ) या JNA (जावा नेटिव एक्सेस) के रूप में संदर्भित करता है। ऐसी सेवाएं प्रदान करने वाले तंत्रों के लिए विदेशी प्रकार्य अंतरापृष्ठ समान्य शब्दावली बन गया है।  
यह शब्द कामन लिस्प के लिए विनिर्देश से आता है, जो स्पष्ट रूप से प्रोग्रामिंग भाषासुविधा को संदर्भित करता है जैसे कि अंतर-भाषाकॉल के लिए सक्षम होता है;{{Citation needed|reason=ANSI/X3.226 does not mention FFI|date=December 2022}} इस शब्द का उपयोग प्रायः  [[हास्केल (प्रोग्रामिंग भाषा)]],<ref>{{cite web|title=FFI Introduction|url=https://wiki.haskell.org/FFI_Introduction|website=HaskellWiki|access-date=19 June 2015|quote=Haskell's FFI is used to call functions from other languages (basically C at this point), and for C to call Haskell functions.}}</ref> रस्ट (प्रोग्रामिंग भाषा),<ref>{{cite web|title=std::ffi - Rust|url=https://doc.rust-lang.org/std/ffi/index.html|access-date=1 April 2021|quote=This module provides utilities to handle data across non-Rust interfaces, like other programming languages and the underlying operating system. It is mainly of use for FFI (Foreign Function Interface) bindings and code that needs to exchange C-like strings with other languages.}}</ref> पायथन (प्रोग्रामिंग भाषा), और लुजीत  [[ लुआ (प्रोग्रामिंग भाषा) |लुआ (प्रोग्रामिंग भाषा)]] <ref name=":0" /><ref name=":1">{{Cite book |last=Heintz |first=Joachim |url=https://www.worldcat.org/oclc/855505215 |title=Ways Ahead : Proceedings of the First International Csound Conference. |date=2013 |publisher=Cambridge Scholars Publishing |others=Alex Hofmann, Iain McCurdy |isbn=978-1-4438-5122-0 |location=Newcastle upon Tyne |oclc=855505215}}</ref>{{Rp|page=35}} दुभाषिया और संकलक प्रलेखन द्वारा अधिकारिक रूप से किया जाता हैं।।<ref>{{cite web|title=CFFI documentation|url=https://cffi.readthedocs.org/|access-date=19 June 2015|quote=C Foreign Function Interface for Python. The goal is to provide a convenient and reliable way to call compiled C code from Python using interface declarations written in C.}}</ref> अन्य भाषाएं अन्य शब्दावली का उपयोग करती हैं: ADA प्रोग्रामिंग भाषा "भाषा बंधन" के बारे में बात करती है, जबकि [[जावा (प्रोग्रामिंग भाषा)]] अपने FFI  को JNI ([[जावा देशी इंटरफ़ेस|जावा नेटिव इंटरफ़ेस]] ) या JNA (जावा नेटिव एक्सेस) के रूप में संदर्भित करता है। ऐसी सेवाएं प्रदान करने वाले तंत्रों के लिए विस्थानीय प्रकार्य अंतरापृष्ठ समान्य शब्दावली बन गया है।  


== ऑपरेशन ==
== ऑपरेशन ==


एक विदेशी प्रकार्य अंतरापृष्ठ का प्राथमिक कार्य एक प्रोग्रामिंग भाषा (मेजबान भाषा, या भाषा जो FFI को परिभाषित करता है) के शब्दार्थ और सम्मेलनों (अतिथि भाषा) के शब्दार्थ और सम्मेलनों के साथ मिलना है। इस प्रक्रिया को दोनों के कार्यावधि वातावरण और/या [[अनुप्रयोग द्विआधारी इंटरफ़ेस|अनुप्रयोग द्विआधारी अंतरापृष्ठ]]  को भी ध्यान में रखना चाहिए। यह कई अभिप्रयों में किया जा सकता है:
एक विस्थानीय प्रकार्य अंतरापृष्ठ का प्राथमिक कार्य एक प्रोग्रामिंग भाषा (मेजबान भाषा, या भाषा जो FFI को परिभाषित करता है) के शब्दार्थ और सम्मेलनों (अतिथि भाषा) के शब्दार्थ और सम्मेलनों के साथ मिलना है। इस प्रक्रिया को दोनों के कार्यावधि वातावरण और/या [[अनुप्रयोग द्विआधारी इंटरफ़ेस|अनुप्रयोग द्विआधारी अंतरापृष्ठ]]  को भी ध्यान में रखना चाहिए। यह कई अभिप्रयों में किया जा सकता है:


* यह आवश्यक है कि अतिथि-भाषा के कार्यों को मेजबान-भाषा कॉल करने योग्य होने के लिए निर्दिष्ट या कार्यान्वित किया जाए, जिसे प्रायः किसी [[प्रकार]] की एक संगतता पुस्तकालय का उपयोग किया जाता है।
* यह आवश्यक है कि अतिथि-भाषा के कार्यों को मेजबान-भाषा कॉल करने योग्य होने के लिए निर्दिष्ट या कार्यान्वित किया जाए, जिसे प्रायः किसी [[प्रकार]] की एक संगतता पुस्तकालय का उपयोग किया जाता है।
Line 26: Line 26:
== भाषा से ==
== भाषा से ==


FFI  के उदाहरणों में शामिल हैं:
FFI  के उदाहरणों में समिलित हैं:


* [[एडीए (प्रोग्रामिंग भाषा)|ADA (प्रोग्रामिंग भाषा)]] भाषा बाइंडिंग, न केवल विदेशी कार्यों को कॉल करने की अनुमति देता है, बल्कि गैर-ADA कोड से इसके कार्यों और विधियों को निर्यात करने के लिए भी अनुमति देता है।<ref>{{cite web|url=http://www.adaic.org/standards/05aarm/html/AA-B.html |title=Interface to Other Languages |publisher=Adaic.org |access-date=2013-09-29}}</ref>
* [[एडीए (प्रोग्रामिंग भाषा)|ADA (प्रोग्रामिंग भाषा)]] भाषा बाइंडिंग, न केवल विस्थानीय कार्यों को कॉल करने की अनुमति देता है, बल्कि गैर-ADA कोड से इसके कार्यों और विधियों को निर्यात करने के लिए भी अनुमति देता है।<ref>{{cite web|url=http://www.adaic.org/standards/05aarm/html/AA-B.html |title=Interface to Other Languages |publisher=Adaic.org |access-date=2013-09-29}}</ref>
* C ++ में C (प्रोग्रामिंग भाषा) के साथ एक तुच्छ FFI है, क्योंकि भाषाएं एक महत्वपूर्ण सामान्य उपवर्ग साझा करती हैं।C ++ में  {{mono|[[extern "C"]]}}  घोषणा का प्राथमिक प्रभाव C ++ [[नाम]] mangling को अक्षम करना है।
* C ++ में C (प्रोग्रामिंग भाषा) के साथ एक तुच्छ FFI है, क्योंकि भाषाएं एक महत्वपूर्ण सामान्य उपवर्ग साझा करती हैं।C ++ में  {{mono|[[extern "C"]]}}  घोषणा का प्राथमिक प्रभाव C ++ [[नाम]] मैंगलिंग को अक्षम करना है।
* [[ स्वच्छ (प्रोग्रामिंग भाषा) | स्वच्छ C (प्रोग्रामिंग भाषा)]] या (प्रोग्रामिंग भाषा) या STDCALL कॉलिंग सम्मेलन के बाद सभी भाषाओं के साथ एक द्विदिश FFI प्रदान करता है।<ref>{{cite web |url=https://cloogle.org/doc/#_11.1 | title=Foreign Export | access-date=2020-05-25 }}</ref><ref>{{cite web |url=https://svn.cs.ru.nl/repos/clean-tools/trunk/htoclean/CallingCFromClean.html |title=Calling C From Clean | access-date=2018-04-25 }}</ref>
* [[ स्वच्छ (प्रोग्रामिंग भाषा) | स्वच्छ C (प्रोग्रामिंग भाषा)]] या STDCALL (प्रोग्रामिंग भाषा) कॉलिंग सम्मेलन के बाद सभी भाषाओं के साथ एक द्विदिश FFI प्रदान करता है।<ref>{{cite web |url=https://cloogle.org/doc/#_11.1 | title=Foreign Export | access-date=2020-05-25 }}</ref><ref>{{cite web |url=https://svn.cs.ru.nl/repos/clean-tools/trunk/htoclean/CallingCFromClean.html |title=Calling C From Clean | access-date=2018-04-25 }}</ref>
* कॉमन लिस्प
* कॉमन लिस्प
* [[संकलित देशी इंटरफ़ेस|संकलित देशी अंतरापृष्ठ]] , GNU संकलनकर्ता वातावरण में उपयोग किए जाने वाले JNI का विकल्प।
* [[संकलित देशी इंटरफ़ेस|संकलित स्थानीय अंतरापृष्ठ]] , GNU संकलनकर्ता वातावरण में उपयोग किए जाने वाले JNI का विकल्प।
* [[घटक वस्तु मॉडल|घटक वस्तु प्रतिरूप]] के आधारों में से एक एक सामान्य अंतरापृष्ठ प्रारूप है, जो मूल रूप से स्ट्रिंग्स और सरणियों के लिए दृश्य आधारिक के समान प्रकार का उपयोग करता है।
* [[घटक वस्तु मॉडल|घटक वस्तु प्रतिरूप]] के आधारों में से एक एक सामान्य अंतरापृष्ठ प्रारूप है, जो मूल रूप से स्ट्रिंग्स और सरणियों के लिए दृश्य आधारिक के समान प्रकार का उपयोग करता है।
* [[डी (प्रोग्रामिंग भाषा)|D (प्रोग्रामिंग भाषा)]] इसे वैसे ही करता है जैसे C ++ करता है, बाहरी C के साथ बाहरी (C ++) के माध्यम से
* [[डी (प्रोग्रामिंग भाषा)|D (प्रोग्रामिंग भाषा)]] इसे वैसे ही करता है जैसे C ++ करता है, बाहरी C के साथ बाहरी (C ++) के माध्यम से
* [[डार्ट (प्रोग्रामिंग भाषा)]] में DART: FFI शामिल है<ref>{{cite web |url=https://api.dartlang.org/stable/dart-ffi/dart-ffi-library.html | title=dart:ffi library | access-date=2020-01-01 }}</ref> मोबाइल, कमांड-लाइन और सर्वर अनुप्रयोगों के लिए देशी सी (प्रोग्रामिंग भाषा) कोड को कॉल करने के लिए लाइब्रेरी
* [[डार्ट (प्रोग्रामिंग भाषा)]] में DART: FFI समिलित है<ref>{{cite web |url=https://api.dartlang.org/stable/dart-ffi/dart-ffi-library.html | title=dart:ffi library | access-date=2020-01-01 }}</ref> मोबाइल, कमांड-लाइन और सर्वर अनुप्रयोगों के लिए C (प्रोग्रामिंग भाषा) कोड को कॉल करने के लिए  
* [[गतिशील भाषा]], जैसे कि पायथन (प्रोग्रामिंग भाषा), [[पर्ल]], [[ आविष्कार ]], और [[ रूबी प्रोग्रामिंग भाषा | रूबी प्रोग्रामिंग भाषा]], सभी सी/सी ++ (या किसी अन्य भाषामें सी/सी ++ कॉलिंग कन्वेंशन) में लिखे गए देशी कोड तक आसान पहुंच प्रदान करते हैं।
* [[गतिशील भाषा|सक्रिय भाषा]], जैसे कि पायथन (प्रोग्रामिंग भाषा), [[पर्ल]], [[ आविष्कार | TCL]] , और [[ रूबी प्रोग्रामिंग भाषा | रूबी प्रोग्रामिंग भाषा]], सभी C/C ++ (या किसी अन्य भाषा में C/C ++ कॉलिंग अधिवेशन) में लिखे गए स्थानीय कोड तक आसान पहुंच प्रदान करते हैं।
* [[ कारक (प्रोग्रामिंग भाषा) ]] के लिए ffis है, [http://article.gmane.org/gmane.comp.lang.factor.general/2790 Fortran], [http://docs.factorcode.org/content/vocab-cocoa.html उद्देश्य-c], और [http://docs.factorcode.org/content/vocab-windows.com.html windows com];ये सभी आयात करने और मनमानी साझा पुस्तकालयों को गतिशील रूप से कॉल करने में सक्षम बनाते हैं।
* [[ कारक (प्रोग्रामिंग भाषा) | फैक्टर (प्रोग्रामिंग भाषा)]] में C के लिए FFIs है, [http://article.gmane.org/gmane.comp.lang.factor.general/2790 Fortran], [http://docs.factorcode.org/content/vocab-cocoa.html उद्देश्य-c], और [http://docs.factorcode.org/content/vocab-windows.com.html windows com]; ये सभी आयात करने और यादृच्छिक रूप से पुस्तकालयों को सक्रिय रूप से कॉल करने में सक्षम बनाते हैं।
* Fortran 2003 में एक मॉड्यूल ISO_C_BINDING है जो इंटरऑपरेबल डेटा प्रकार (आंतरिक प्रकार और POD संरचनाएं दोनों), इंटरऑपरेबल पॉइंटर्स, इंटरऑपरेबल पॉइंटर्स, इंटरऑपरेबल ग्लोबल डेटा स्टोर, और [[फोरट्रान]] से C को कॉल करने के लिए और C. Fortran को कॉल करने के लिए प्रदान करता है।<ref>{{cite web|url=https://stackoverflow.com/tags/fortran-iso-c-binding/info|title='fortran-iso-c-binding' tag wiki|website=Stack Overflow}}</ref> इसे फोरट्रान 2018 मानक में सुधार किया गया है।
* [[Fortran|फॉरटन]] 2003 में एक मापांक ISO_C_BINDING है जो अंतर-संचालित डेटा प्रकार (आंतरिक प्रकार और POD संरचनाएं दोनों), अंतर-संचालित संकेत, अंतर-संचालित वैश्विक डेटा संचय, और [[फोरट्रान]] से C को कॉल करने के लिए और C से Fortran को कॉल करने के लिए तंत्र प्रदान करता है।<ref>{{cite web|url=https://stackoverflow.com/tags/fortran-iso-c-binding/info|title='fortran-iso-c-binding' tag wiki|website=Stack Overflow}}</ref> इसे फोरट्रान 2018 मानक में सुधार किया गया है।
* [[गो (प्रोग्रामिंग भाषा)]] सीधे सी कोड को कॉल कर सकता है <code>"C"</code> छद्म-पैकेज।<ref>{{cite web |url=https://golang.org/cmd/cgo/ |title=cgo&nbsp;— The Go Programming Language |access-date=2015-08-23 }}</ref>
* [[गो (प्रोग्रामिंग भाषा)]] C कोड को सीधे  <code>"C"</code> छद्म-पैकेज के माध्यम से कॉल कर सकता है।<ref>{{cite web |url=https://golang.org/cmd/cgo/ |title=cgo&nbsp;— The Go Programming Language |access-date=2015-08-23 }}</ref>
* [[Google वेब टूलकिट]], जिसमें जावा को जावास्क्रिप्ट में संकलित किया गया है, में एक FFI है जिसे जेएसएनआई कहा जाता है जो जावा स्रोत को मनमाने ढंग से जावास्क्रिप्ट कार्यों को कॉल करने की अनुमति देता है, और जावास्क्रिप्ट के लिए जावा में वापस कॉल करने के लिए।
* [[Google वेब टूलकिट|गूगल वेब टूलकिट]], ( GVA) जिसमें जावा को जावास्क्रिप्ट में संकलित किया गया है, GVA में एक FFI है जिसे JSNI कहा जाता है जो जावा स्रोत को यादृच्छिक रूप से जावास्क्रिप्ट कार्यों को कॉल करने की अनुमति देता है, और जावास्क्रिप्ट के लिए जावा में वापस कॉल करने की अनुमति देता है।
* हास्केल (प्रोग्रामिंग भाषा)
* हास्केल (प्रोग्रामिंग भाषा)
* जावा देशी अंतरापृष्ठ , जो जावा (प्रोग्रामिंग भाषा) और C/C ++ के बीच एक अंतरापृष्ठ  प्रदान करता है, अधिकांश प्रणालियों पर पसंदीदा सिस्टम भाषाएँ जहां जावा तैनात हैं।जावा देशी एक्सेस गोंद कोड लिखने के बिना देशी पुस्तकालयों के साथ एक अंतरापृष्ठ  प्रदान करता है।एक अन्य उदाहरण है [https://github.com/jnr/jnr-ffi jnr]
* JNI , जो जावा (प्रोग्रामिंग भाषा) और C/C ++ के बीच एक अंतरापृष्ठ  प्रदान करता है, अधिकांश पद्धतियों पर पसंदीदा पद्धति भाषाएँ जहां जावा हैं। JNA गोंद कोड लिखने के बिना स्थानीय पुस्तकालयों के साथ एक अंतरापृष्ठ  प्रदान करता है। एक अन्य उदाहरण [https://github.com/jnr/jnr-ffi jnr] है।
* Luajit, एक [[जस्ट-इन-टाइम संकलन]] | Lua (प्रोग्रामिंग भाषा) का सिर्फ-इन-टाइम कार्यान्वयन, एक FFI है जो बाहरी C प्रकार्य को कॉल करने और शुद्ध Lua कोड से C डेटा संरचनाओं का उपयोग करने की अनुमति देता है।<ref name=":0">{{cite web|author=Mike Pall |url=http://luajit.org/ext_ffi.html |title=FFI Library |publisher=Luajit.org |access-date=2013-09-29}}</ref>{{r|:1|pp=35}}
* Lua (प्रोग्रामिंग भाषा) का सिर्फ-इन-टाइम कार्यान्वयन, एक FFI है जो बाहरी C प्रकार्य को कॉल करने और शुद्ध Lua कोड से C डेटा संरचनाओं का उपयोग करने की अनुमति देता है।<ref name=":0">{{cite web|author=Mike Pall |url=http://luajit.org/ext_ffi.html |title=FFI Library |publisher=Luajit.org |access-date=2013-09-29}}</ref>{{r|:1|pp=35}}
* NIM (प्रोग्रामिंग भाषा) में एक FFI है जो इसे C (प्रोग्रामिंग भाषा), C ++ (प्रोग्रामिंग भाषा) से स्रोत का उपयोग करने में सक्षम बनाता है। C ++, और ऑब्जेक्टिव-C (प्रोग्रामिंग भाषा) | ऑब्जेक्टिव-सी।यह जावास्क्रिप्ट के साथ अंतरापृष्ठ भी कर सकता है।
* NIM (प्रोग्रामिंग भाषा) में एक FFI है जो इसे C, C ++, ऑब्जेक्टिव-C  से स्रोत का उपयोग करने में सक्षम बनाता है। यह जावास्क्रिप्ट के साथ अंतरापृष्ठ भी कर सकता है।
* जावास्क्रिप्ट: जावास्क्रिप्ट समान्यतः  [[वेब ब्राउज़र]] के अंदर चलाया जाता है
* जावास्क्रिप्ट: जावास्क्रिप्ट समान्यतः  [[वेब ब्राउज़र]] के अंदर चलायाा जाता है
** Node.js पूर्व -खोलने के लिए कार्य प्रदान करता है {{Code|.node}} बदले में मॉड्यूल गैर-बिल्टिन संसाधनों तक पहुंच प्रदान कर सकते हैं।
** Node.js {{Code|.node}} पूर्व-संकलित प्रमात्रक खोलने के लिए कार्य प्रदान करता है जो बदले में प्रमात्रक गैर-निर्मित संसाधनों तक पहुंच प्रदान कर सकते हैं।
** [[डेनो (सॉफ्टवेयर)]], के माध्यम से FFI  अंतरापृष्ठ की तरह प्रदान करता है {{Code|dlopen(...)}} कार्य।<ref>{{Cite web |title=Foreign Function Interface {{!}} Manual |url=https://deno.land/manual@v1.30.3/runtime/ffi_api#foreign-function-interface-api |access-date=2023-02-08 |website=Deno |language=en}}</ref>
** [[डेनो (सॉफ्टवेयर)]],  {{Code|dlopen(...)}} कार्य के माध्यम से FFI अंतरापृष्ठ प्रदान करता है।<ref>{{Cite web |title=Foreign Function Interface {{!}} Manual |url=https://deno.land/manual@v1.30.3/runtime/ffi_api#foreign-function-interface-api |access-date=2023-02-08 |website=Deno |language=en}}</ref>
* [[जूलिया (प्रोग्रामिंग भाषा)]] है <code>ccall</code> C (और अन्य भाषाओं, उदा। Fortran) को कॉल करने के लिए कीवर्ड;<ref>{{Cite web|url=https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/|title=Calling C and Fortran Code · The Julia Language|website=docs.julialang.org|language=en|access-date=2018-02-11}}</ref> जबकि पैकेज, समान नो-बोइलरप्लेट समर्थन प्रदान करते हैं, कुछ भाषाओं के लिए उपलब्ध हैं उदा।पायथन के लिए<ref>{{Citation|title=PyCall.jl: Package to call Python functions from the Julia language|date=2018-02-08|url=https://github.com/JuliaPy/PyCall.jl|publisher=JuliaPy|access-date=2018-02-11}}</ref> (उदा। OO समर्थन और GC समर्थन [[ पीएचपी ]]्रदान करने के लिए), जावा (और अन्य JDK-Languages, जैसे SCALA का समर्थन करता है) और C ++ के साथ R. इंटरएक्टिव उपयोग CXX.JL पैकेज के साथ भी संभव है।
* [[जूलिया (प्रोग्रामिंग भाषा)]] <code>ccall</code> C (और अन्य भाषाओं, जैसे फोरट्रान) को कॉल करने के लिए संकेतशब्द है;<ref>{{Cite web|url=https://docs.julialang.org/en/v1/manual/calling-c-and-fortran-code/|title=Calling C and Fortran Code · The Julia Language|website=docs.julialang.org|language=en|access-date=2018-02-11}}</ref> जबकि पैकेज, समान नो-बोइलरप्लेट समर्थन प्रदान करते हैं, कुछ भाषाओं के लिए उपलब्ध हैं जैसे कि पायथन <ref>{{Citation|title=PyCall.jl: Package to call Python functions from the Julia language|date=2018-02-08|url=https://github.com/JuliaPy/PyCall.jl|publisher=JuliaPy|access-date=2018-02-11}}</ref> (उदाहरण के लिए OO समर्थन और GC समर्थन प्रदान करना) [[ पीएचपी | जावा]] (और अन्य JDK भाषाओं का समर्थन करता है, जैसे SCALA) और R. C ++ के साथ इंटरएक्टिव उपयोग CXX.JL पैकेज के साथ भी संभव है।
* [[PhoneGap]] (अपाचे कॉलबैक नाम से कहा गया था, लेकिन अब अपाचे कॉर्डोवा) HTML, CSS और जावास्क्रिप्ट का उपयोग करके देशी मोबाइल एप्लिकेशन बनाने के लिए एक मंच है।इसके अतिरिक्त FFI एस के माध्यम से जावास्क्रिप्ट कॉलबैक फ़ंक्शंस के माध्यम से मोबाइल फोन की मूल सुविधाओं के तरीकों और गुणों तक पहुंच के लिए प्रकार्य  है, जिसमें एक्सेलेरोमीटर, कैमरा (साथ ही फोटोलिब्ररी और सेवफोटोबम), कम्पास, स्टोरेज (एसक्यूएल डेटाबेस और लोकलस्टोरेज), अधिसूचना, मीडिया और कैप्चर (रिकॉर्डिंग और रिकॉर्डिंग या ऑडियो भी शामिल हैं।और वीडियो), फ़ाइल, संपर्क (पता पुस्तिका), ईवेंट, डिवाइस और कनेक्शन जानकारी।
* [[PhoneGap]] (अपाचे कॉलबैक नाम से कहा गया था, लेकिन अब अपाचे कॉर्डोवा) HTML, CSS और जावास्क्रिप्ट का उपयोग करके स्थानीय मोबाइल एप्लिकेशन बनाने के लिए एक मंच है।इसके अतिरिक्त FFI एस के माध्यम से जावास्क्रिप्ट कॉलबैक फ़ंक्शंस के माध्यम से मोबाइल फोन की मूल सुविधाओं के तरीकों और गुणों तक पहुंच के लिए प्रकार्य  है, जिसमें एक्सेलेरोमीटर, कैमरा (साथ ही फोटोलिब्ररी और सेवफोटोबम), कम्पास, स्टोरेज (एसक्यूएल डेटाबेस और लोकलस्टोरेज), अधिसूचना, मीडिया और कैप्चर (रिकॉर्डिंग और रिकॉर्डिंग या ऑडियो भी समिलित हैं।और वीडियो), फ़ाइल, संपर्क (पता पुस्तिका), ईवेंट, डिवाइस और कनेक्शन जानकारी।
* PHP FFI को C को प्रदान करता है।<ref>{{cite web |title=PHP: FFI - Manual |url=https://www.php.net/manual/en/book.ffi.php |publisher=The PHP Group |access-date=13 June 2019}}</ref>
* PHP FFI को C को प्रदान करता है।<ref>{{cite web |title=PHP: FFI - Manual |url=https://www.php.net/manual/en/book.ffi.php |publisher=The PHP Group |access-date=13 June 2019}}</ref>
* पायथन (प्रोग्रामिंग भाषा) [https://docs.python.org/3/library/ctypes.html ctypes] और [https://cffi.readthedocs.io/en/latest/ cffi] मॉड्यूल प्रदान करता है।उदाहरण के लिए, CTYPES मॉड्यूल साझा लाइब्रेरी/डायनेमिक-लिंक लाइब्रेरी से सी फ़ंक्शंस को लोड कर सकता है और पायथन और सी शब्दार्थ के बीच स्वचालित रूप से सरल डेटा प्रकारों का अनुवाद कर सकता है:
* पायथन (प्रोग्रामिंग भाषा) [https://docs.python.org/3/library/ctypes.html ctypes] और [https://cffi.readthedocs.io/en/latest/ cffi] मॉड्यूल प्रदान करता है।उदाहरण के लिए, CTYPES मॉड्यूल साझा लाइब्रेरी/डायनेमिक-लिंक लाइब्रेरी से सी फ़ंक्शंस को लोड कर सकता है और पायथन और सी शब्दार्थ के बीच स्वचालित रूप से सरल डेटा प्रकारों का अनुवाद कर सकता है:
Line 57: Line 57:
t = libc.time(None)                  # Equivalent C code: t = time(NULL)
t = libc.time(None)                  # Equivalent C code: t = time(NULL)
print(t)</syntaxhighlight>
print(t)</syntaxhighlight>
* P/invoke, जो Microsoft [[ सामान्य भाषा रनटाइम | सामान्य भाषारनटाइम]]  और देशी कोड के बीच एक अंतरापृष्ठ  प्रदान करता है।
* P/invoke, जो Microsoft [[ सामान्य भाषा रनटाइम | सामान्य भाषारनटाइम]]  और स्थानीय कोड के बीच एक अंतरापृष्ठ  प्रदान करता है।
* [[ रैकेट भाषा (प्रोग्रामिंग भाषा) | रैकेट भाषा(प्रोग्रामिंग भाषा)]]  में मैक्रोज़ पर एक देशी FFI  आधारित है जो मनमानी साझा पुस्तकालयों को गतिशील रूप से आयात करने में सक्षम बनाता है।<ref>{{cite web|author=Eli Barzilay |url=http://docs.racket-lang.org/foreign/ |title=The Racket Foreign Interface |publisher=Docs.racket-lang.org |access-date=2013-09-29}}</ref><ref>{{cite web |url=http://repository.readscheme.org/ftp/papers/sw2004/barzilay.pdf |title=TR600.pdf |access-date=2013-09-29 |archive-date=2009-09-02 |archive-url=https://web.archive.org/web/20090902152301/http://repository.readscheme.org/ftp/papers/sw2004/barzilay.pdf |url-status=dead }}</ref>
* [[ रैकेट भाषा (प्रोग्रामिंग भाषा) | रैकेट भाषा(प्रोग्रामिंग भाषा)]]  में मैक्रोज़ पर एक स्थानीय FFI  आधारित है जो मनमानी साझा पुस्तकालयों को सक्रिय रूप से आयात करने में सक्षम बनाता है।<ref>{{cite web|author=Eli Barzilay |url=http://docs.racket-lang.org/foreign/ |title=The Racket Foreign Interface |publisher=Docs.racket-lang.org |access-date=2013-09-29}}</ref><ref>{{cite web |url=http://repository.readscheme.org/ftp/papers/sw2004/barzilay.pdf |title=TR600.pdf |access-date=2013-09-29 |archive-date=2009-09-02 |archive-url=https://web.archive.org/web/20090902152301/http://repository.readscheme.org/ftp/papers/sw2004/barzilay.pdf |url-status=dead }}</ref>
* RAKU (प्रोग्रामिंग भाषा) [[ रूबी (प्रोग्रामिंग भाषा) ]], पायथन (प्रोग्रामिंग भाषा), [[ पर्ल (प्रोग्रामिंग भाषा) ]], [[ब्रेनफक]] (प्रोग्रामिंग भाषा), लुआ (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), C ++, GO (प्रोग्रामिंग भाषा (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा),), योजना [[GNU GUILE]]/GAMBIT (स्कीम कार्यान्वयन) और जंग (प्रोग्रामिंग भाषा)<ref>{{cite web |url=https://modules.perl6.org/s/Inline%3A%3A |title=Inline implementations |access-date=2017-08-15 }}</ref><ref>{{cite web |url=https://docs.perl6.org/language/nativecall |title=Native Call |access-date=2017-08-15 }}</ref>
* RAKU (प्रोग्रामिंग भाषा) [[ रूबी (प्रोग्रामिंग भाषा) ]], पायथन (प्रोग्रामिंग भाषा), [[ पर्ल (प्रोग्रामिंग भाषा) ]], [[ब्रेनफक]] (प्रोग्रामिंग भाषा), लुआ (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), C ++, GO (प्रोग्रामिंग भाषा (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा),), योजना [[GNU GUILE]]/GAMBIT (स्कीम कार्यान्वयन) और जंग (प्रोग्रामिंग भाषा)<ref>{{cite web |url=https://modules.perl6.org/s/Inline%3A%3A |title=Inline implementations |access-date=2017-08-15 }}</ref><ref>{{cite web |url=https://docs.perl6.org/language/nativecall |title=Native Call |access-date=2017-08-15 }}</ref>
* रूबी (प्रोग्रामिंग भाषा) या तो [https://rubygems.org/gems/ffi ffi] जेम, या स्टैंडर्ड लाइब्रेरी [https://ruby-doc.org/stdlib-2.6.6.6.6/libdoc/fiddle/rdoc/fiddle.html fiddle]।
* रूबी (प्रोग्रामिंग भाषा) या तो [https://rubygems.org/gems/ffi ffi] जेम, या स्टैंडर्ड लाइब्रेरी [https://ruby-doc.org/stdlib-2.6.6.6.6/libdoc/fiddle/rdoc/fiddle.html fiddle]।
Line 76: Line 76:
floor.call(3.14159) #=> 3.0
floor.call(3.14159) #=> 3.0
</syntaxhighlight>
</syntaxhighlight>
* जंग (प्रोग्रामिंग भाषा) विभिन्न मानक अनुप्रयोग_बिनरी_इंटरफेस के साथ कार्यों के लिए एक विदेशी प्रकार्य  अंतरापृष्ठ  को परिभाषित करता है।<ref>{{cite web |url=https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external-code |title=Using extern Functions to Call External Code |access-date=2019-06-01}}</ref> एलिक्सिर (प्रोग्रामिंग भाषा), [https://github.com/rusterlium/rustler rustler] के साथ इंटरफेसिंग के लिए एक पुस्तकालय भी है।
* जंग (प्रोग्रामिंग भाषा) विभिन्न मानक अनुप्रयोग_बिनरी_इंटरफेस के साथ कार्यों के लिए एक विस्थानीय प्रकार्य  अंतरापृष्ठ  को परिभाषित करता है।<ref>{{cite web |url=https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external-code |title=Using extern Functions to Call External Code |access-date=2019-06-01}}</ref> एलिक्सिर (प्रोग्रामिंग भाषा), [https://github.com/rusterlium/rustler rustler] के साथ इंटरफेसिंग के लिए एक पुस्तकालय भी है।
* [[ मूल दृश्य ]] में एक घोषणात्मक वाक्यविन्यास होता है जो इसे गैर-यूनिकोड सी फ़ंक्शंस को कॉल करने की अनुमति देता है।
* [[ मूल दृश्य ]] में एक घोषणात्मक वाक्यविन्यास होता है जो इसे गैर-यूनिकोड सी फ़ंक्शंस को कॉल करने की अनुमति देता है।
* [[ वोल्फ्राम भाषा | वोल्फ्राम भाषा]] WSTP (वोल्फ्राम प्रतीकात्मक स्थानांतरण प्रोटोकॉल) नामक एक तकनीक प्रदान करता है जो C ++, जावा, .NET और [[अमृत भाषा|अमृत]] भाषाके लिए बाइंडिंग के साथ अन्य भाषाओं के बीच कोड की द्विदिशीय कॉलिंग को सक्षम बनाता है।
* [[ वोल्फ्राम भाषा | वोल्फ्राम भाषा]] WSTP (वोल्फ्राम प्रतीकात्मक स्थानांतरण प्रोटोकॉल) नामक एक तकनीक प्रदान करता है जो C ++, जावा, .NET और [[अमृत भाषा|अमृत]] भाषाके लिए बाइंडिंग के साथ अन्य भाषाओं के बीच कोड की द्विदिशीय कॉलिंग को सक्षम बनाता है।
Line 87: Line 87:
कई FFI  भी मेजबान भाषामें सेवाओं को आमंत्रित करने के लिए बुलाए गए भाषाके लिए साधन भी प्रदान करते हैं।
कई FFI  भी मेजबान भाषामें सेवाओं को आमंत्रित करने के लिए बुलाए गए भाषाके लिए साधन भी प्रदान करते हैं।


विदेशी प्रकार्य  अंतरापृष्ठ  शब्द का उपयोग आम तौर पर Microsoft कॉमन भाषा रनटाइम जैसे बहु-भाषी रनटाइम्स का वर्णन करने के लिए नहीं किया जाता है, जहां एक सामान्य सब्सट्रेट प्रदान किया जाता है जो किसी भी अन्य में परिभाषित सेवाओं का उपयोग करने के लिए किसी भी CLR-Compliant भाषाको सक्षम बनाता है।(हालांकि, इस स्थितियाँ  में सीएलआर में रनटाइम के बाहर कॉल करने के लिए एक FFI , पी/इनवोक शामिल है।) इसके अलावा, कई वितरित कंप्यूटिंग आर्किटेक्चर जैसे कि जावा रिमोट विधि आह्वान (आरएमआई), आरपीसी, [[कोरबा]], [[साबुन]] और [[डी-बस]] परमिट विभिन्न भाषाओं में लिखी जाने वाली विभिन्न सेवाओं;इस तरह के आर्किटेक्चर को समान्यतः  FFI  नहीं माना जाता है।
विस्थानीय प्रकार्य  अंतरापृष्ठ  शब्द का उपयोग आम तौर पर Microsoft कॉमन भाषा रनटाइम जैसे बहु-भाषी रनटाइम्स का वर्णन करने के लिए नहीं किया जाता है, जहां एक सामान्य सब्सट्रेट प्रदान किया जाता है जो किसी भी अन्य में परिभाषित सेवाओं का उपयोग करने के लिए किसी भी CLR-Compliant भाषाको सक्षम बनाता है।(हालांकि, इस स्थितियाँ  में सीएलआर में रनटाइम के बाहर कॉल करने के लिए एक FFI , पी/इनवोक समिलित है।) इसके अलावा, कई वितरित कंप्यूटिंग आर्किटेक्चर जैसे कि जावा रिमोट विधि आह्वान (आरएमआई), आरपीसी, [[कोरबा]], [[साबुन]] और [[डी-बस]] परमिट विभिन्न भाषाओं में लिखी जाने वाली विभिन्न सेवाओं;इस तरह के आर्किटेक्चर को समान्यतः  FFI  नहीं माना जाता है।


== विशेष स्थितियाँ ==
== विशेष स्थितियाँ ==

Revision as of 11:30, 1 March 2023

एक विस्थानीय प्रकार्य अंतरापृष्ठ (FFI) एक ऐसा तंत्र है जिसके द्वारा एक प्रोग्राम लिखा गया है, समान्यतः एक व्याख्या की गई (प्रोग्रामिंग भाषाएं), जो रूटीन को कॉल कर सकती है या किसी अन्य में लिखित या संकलित सेवाओं का उपयोग कर सकती है। FFI का उपयोग प्रायः उस संदर्भ में किया जाता है जहां बाइनरी सक्रिय-लिंक लाइब्रेरी में कॉल की जाती हैं।

नामकरण

यह शब्द कामन लिस्प के लिए विनिर्देश से आता है, जो स्पष्ट रूप से प्रोग्रामिंग भाषासुविधा को संदर्भित करता है जैसे कि अंतर-भाषाकॉल के लिए सक्षम होता है;[citation needed] इस शब्द का उपयोग प्रायः हास्केल (प्रोग्रामिंग भाषा),[1] रस्ट (प्रोग्रामिंग भाषा),[2] पायथन (प्रोग्रामिंग भाषा), और लुजीत लुआ (प्रोग्रामिंग भाषा) [3][4]: 35  दुभाषिया और संकलक प्रलेखन द्वारा अधिकारिक रूप से किया जाता हैं।।[5] अन्य भाषाएं अन्य शब्दावली का उपयोग करती हैं: ADA प्रोग्रामिंग भाषा "भाषा बंधन" के बारे में बात करती है, जबकि जावा (प्रोग्रामिंग भाषा) अपने FFI को JNI (जावा नेटिव इंटरफ़ेस ) या JNA (जावा नेटिव एक्सेस) के रूप में संदर्भित करता है। ऐसी सेवाएं प्रदान करने वाले तंत्रों के लिए विस्थानीय प्रकार्य अंतरापृष्ठ समान्य शब्दावली बन गया है।

ऑपरेशन

एक विस्थानीय प्रकार्य अंतरापृष्ठ का प्राथमिक कार्य एक प्रोग्रामिंग भाषा (मेजबान भाषा, या भाषा जो FFI को परिभाषित करता है) के शब्दार्थ और सम्मेलनों (अतिथि भाषा) के शब्दार्थ और सम्मेलनों के साथ मिलना है। इस प्रक्रिया को दोनों के कार्यावधि वातावरण और/या अनुप्रयोग द्विआधारी अंतरापृष्ठ को भी ध्यान में रखना चाहिए। यह कई अभिप्रयों में किया जा सकता है:

  • यह आवश्यक है कि अतिथि-भाषा के कार्यों को मेजबान-भाषा कॉल करने योग्य होने के लिए निर्दिष्ट या कार्यान्वित किया जाए, जिसे प्रायः किसी प्रकार की एक संगतता पुस्तकालय का उपयोग किया जाता है।
  • उपयुक्त गोंद कोड के साथ अतिथि-भाषा कार्यों को स्वचालित रूप से "लपेटने" के लिए एक उपकरण का उपयोग, जो कोई भी आवश्यक अनुवाद कर सकता है।
  • आवरण पुस्तकालय का उपयोग
  • मेजबान भाषा क्षमताओं के सेट को प्रतिबंधित करना जो क्रॉस-भाषा का उपयोग किया जा सकता है। उदाहरण के लिए, C ++ को (सामान्य रूप से) C नहीं कहा जा सकता है।

FFI निम्नलिखित विचारों से जटिल हो सकता है:

  • यदि एक भाषा कचरा संग्रह (कंप्यूटर विज्ञान) (GC) का समर्थन करती है और दूसरा नहीं करता है; ध्यान रखा जाना चाहिए कि गैर-GC भाषा कोड दूसरे में GC को विफल नहीं कर सकता। JNI में, उदाहरण के लिए, C कोड जो जावा से प्राप्त होने वाले वस्तु संदर्भों को "रखता है" कि इस तथ्य को जावा आभासी मशीन (JRE) के साथ पंजीकृत करना होगा; अन्यथा, C उनके साथ समाप्त होने से पहले जावा वस्तुओं को हटा सकता है। (C कोड को भी स्पष्ट रूप से ऐसी किसी भी वस्तु के लिए अपना लिंक जारी करना चाहिए, जब C को उस वस्तु की कोई और आवश्यकता नहीं है।)
  • जटिल या गैर-तुच्छ वस्तुओं को एक वातावरण से दूसरे वातावरण में प्रतिचित्र करना मुश्किल हो सकता है।
  • उपरोक्त प्रतिचित्र समस्या के कारण, दोनों भाषाओं के लिए एक उत्परिवर्तित वस्तु के एक ही उदाहरण के संदर्भ को बनाए रखना संभव नहीं हो सकता है।
  • वास्तविक मशीन (VM) पर एक या दोनों भाषाएं चल सकती हैं; इसके अलावा, यदि दोनों हैं, तो ये संभवतः अलग-अलग VM होंगे।
  • क्रॉस-भाषा वंशानुक्रम और अन्य अंतर, जैसे कि टाइप सिस्टम या वस्तु-रचना प्रतिरूप के बीच, विशेष रूप से कठिन हो सकते हैं।

भाषा से

FFI के उदाहरणों में समिलित हैं:

  • ADA (प्रोग्रामिंग भाषा) भाषा बाइंडिंग, न केवल विस्थानीय कार्यों को कॉल करने की अनुमति देता है, बल्कि गैर-ADA कोड से इसके कार्यों और विधियों को निर्यात करने के लिए भी अनुमति देता है।[6]
  • C ++ में C (प्रोग्रामिंग भाषा) के साथ एक तुच्छ FFI है, क्योंकि भाषाएं एक महत्वपूर्ण सामान्य उपवर्ग साझा करती हैं।C ++ में extern "C" घोषणा का प्राथमिक प्रभाव C ++ नाम मैंगलिंग को अक्षम करना है।
  • स्वच्छ C (प्रोग्रामिंग भाषा) या STDCALL (प्रोग्रामिंग भाषा) कॉलिंग सम्मेलन के बाद सभी भाषाओं के साथ एक द्विदिश FFI प्रदान करता है।[7][8]
  • कॉमन लिस्प
  • संकलित स्थानीय अंतरापृष्ठ , GNU संकलनकर्ता वातावरण में उपयोग किए जाने वाले JNI का विकल्प।
  • घटक वस्तु प्रतिरूप के आधारों में से एक एक सामान्य अंतरापृष्ठ प्रारूप है, जो मूल रूप से स्ट्रिंग्स और सरणियों के लिए दृश्य आधारिक के समान प्रकार का उपयोग करता है।
  • D (प्रोग्रामिंग भाषा) इसे वैसे ही करता है जैसे C ++ करता है, बाहरी C के साथ बाहरी (C ++) के माध्यम से
  • डार्ट (प्रोग्रामिंग भाषा) में DART: FFI समिलित है[9] मोबाइल, कमांड-लाइन और सर्वर अनुप्रयोगों के लिए C (प्रोग्रामिंग भाषा) कोड को कॉल करने के लिए
  • सक्रिय भाषा, जैसे कि पायथन (प्रोग्रामिंग भाषा), पर्ल, TCL , और रूबी प्रोग्रामिंग भाषा, सभी C/C ++ (या किसी अन्य भाषा में C/C ++ कॉलिंग अधिवेशन) में लिखे गए स्थानीय कोड तक आसान पहुंच प्रदान करते हैं।
  • फैक्टर (प्रोग्रामिंग भाषा) में C के लिए FFIs है, Fortran, उद्देश्य-c, और windows com; ये सभी आयात करने और यादृच्छिक रूप से पुस्तकालयों को सक्रिय रूप से कॉल करने में सक्षम बनाते हैं।
  • फॉरटन 2003 में एक मापांक ISO_C_BINDING है जो अंतर-संचालित डेटा प्रकार (आंतरिक प्रकार और POD संरचनाएं दोनों), अंतर-संचालित संकेत, अंतर-संचालित वैश्विक डेटा संचय, और फोरट्रान से C को कॉल करने के लिए और C से Fortran को कॉल करने के लिए तंत्र प्रदान करता है।[10] इसे फोरट्रान 2018 मानक में सुधार किया गया है।
  • गो (प्रोग्रामिंग भाषा) C कोड को सीधे "C" छद्म-पैकेज के माध्यम से कॉल कर सकता है।[11]
  • गूगल वेब टूलकिट, ( GVA) जिसमें जावा को जावास्क्रिप्ट में संकलित किया गया है, GVA में एक FFI है जिसे JSNI कहा जाता है जो जावा स्रोत को यादृच्छिक रूप से जावास्क्रिप्ट कार्यों को कॉल करने की अनुमति देता है, और जावास्क्रिप्ट के लिए जावा में वापस कॉल करने की अनुमति देता है।
  • हास्केल (प्रोग्रामिंग भाषा)
  • JNI , जो जावा (प्रोग्रामिंग भाषा) और C/C ++ के बीच एक अंतरापृष्ठ प्रदान करता है, अधिकांश पद्धतियों पर पसंदीदा पद्धति भाषाएँ जहां जावा हैं। JNA गोंद कोड लिखने के बिना स्थानीय पुस्तकालयों के साथ एक अंतरापृष्ठ प्रदान करता है। एक अन्य उदाहरण jnr है।
  • Lua (प्रोग्रामिंग भाषा) का सिर्फ-इन-टाइम कार्यान्वयन, एक FFI है जो बाहरी C प्रकार्य को कॉल करने और शुद्ध Lua कोड से C डेटा संरचनाओं का उपयोग करने की अनुमति देता है।[3][4]: 35 
  • NIM (प्रोग्रामिंग भाषा) में एक FFI है जो इसे C, C ++, ऑब्जेक्टिव-C से स्रोत का उपयोग करने में सक्षम बनाता है। यह जावास्क्रिप्ट के साथ अंतरापृष्ठ भी कर सकता है।
  • जावास्क्रिप्ट: जावास्क्रिप्ट समान्यतः वेब ब्राउज़र के अंदर चलायाा जाता है
    • Node.js .node पूर्व-संकलित प्रमात्रक खोलने के लिए कार्य प्रदान करता है जो बदले में प्रमात्रक गैर-निर्मित संसाधनों तक पहुंच प्रदान कर सकते हैं।
    • डेनो (सॉफ्टवेयर), dlopen(...) कार्य के माध्यम से FFI अंतरापृष्ठ प्रदान करता है।[12]
  • जूलिया (प्रोग्रामिंग भाषा) ccall C (और अन्य भाषाओं, जैसे फोरट्रान) को कॉल करने के लिए संकेतशब्द है;[13] जबकि पैकेज, समान नो-बोइलरप्लेट समर्थन प्रदान करते हैं, कुछ भाषाओं के लिए उपलब्ध हैं जैसे कि पायथन [14] (उदाहरण के लिए OO समर्थन और GC समर्थन प्रदान करना) जावा (और अन्य JDK भाषाओं का समर्थन करता है, जैसे SCALA) और R. C ++ के साथ इंटरएक्टिव उपयोग CXX.JL पैकेज के साथ भी संभव है।
  • PhoneGap (अपाचे कॉलबैक नाम से कहा गया था, लेकिन अब अपाचे कॉर्डोवा) HTML, CSS और जावास्क्रिप्ट का उपयोग करके स्थानीय मोबाइल एप्लिकेशन बनाने के लिए एक मंच है।इसके अतिरिक्त FFI एस के माध्यम से जावास्क्रिप्ट कॉलबैक फ़ंक्शंस के माध्यम से मोबाइल फोन की मूल सुविधाओं के तरीकों और गुणों तक पहुंच के लिए प्रकार्य है, जिसमें एक्सेलेरोमीटर, कैमरा (साथ ही फोटोलिब्ररी और सेवफोटोबम), कम्पास, स्टोरेज (एसक्यूएल डेटाबेस और लोकलस्टोरेज), अधिसूचना, मीडिया और कैप्चर (रिकॉर्डिंग और रिकॉर्डिंग या ऑडियो भी समिलित हैं।और वीडियो), फ़ाइल, संपर्क (पता पुस्तिका), ईवेंट, डिवाइस और कनेक्शन जानकारी।
  • PHP FFI को C को प्रदान करता है।[15]
  • पायथन (प्रोग्रामिंग भाषा) ctypes और cffi मॉड्यूल प्रदान करता है।उदाहरण के लिए, CTYPES मॉड्यूल साझा लाइब्रेरी/डायनेमिक-लिंक लाइब्रेरी से सी फ़ंक्शंस को लोड कर सकता है और पायथन और सी शब्दार्थ के बीच स्वचालित रूप से सरल डेटा प्रकारों का अनुवाद कर सकता है:
    import ctypes
    libc = ctypes.CDLL('/lib/libc.so.6')  # Under Linux/Unix
    t = libc.time(None)                   # Equivalent C code: t = time(NULL)
    print(t)
    
  • P/invoke, जो Microsoft सामान्य भाषारनटाइम और स्थानीय कोड के बीच एक अंतरापृष्ठ प्रदान करता है।
  • रैकेट भाषा(प्रोग्रामिंग भाषा) में मैक्रोज़ पर एक स्थानीय FFI आधारित है जो मनमानी साझा पुस्तकालयों को सक्रिय रूप से आयात करने में सक्षम बनाता है।[16][17]
  • RAKU (प्रोग्रामिंग भाषा) रूबी (प्रोग्रामिंग भाषा) , पायथन (प्रोग्रामिंग भाषा), पर्ल (प्रोग्रामिंग भाषा) , ब्रेनफक (प्रोग्रामिंग भाषा), लुआ (प्रोग्रामिंग भाषा), सी (प्रोग्रामिंग भाषा), C ++, GO (प्रोग्रामिंग भाषा (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा), C (प्रोग्रामिंग भाषा),), योजना GNU GUILE/GAMBIT (स्कीम कार्यान्वयन) और जंग (प्रोग्रामिंग भाषा)[18][19]
  • रूबी (प्रोग्रामिंग भाषा) या तो ffi जेम, या स्टैंडर्ड लाइब्रेरी fiddle
    require 'fiddle'
    
    libm = Fiddle.dlopen('/lib/libm.so.6')
    
    # Equivalent to: double floor(double x);
    floor = Fiddle::Function.new(
      libm.sym('floor'),     # ptr is a referenced function(, or symbol), of a Fiddle::Handle.
      [Fiddle::TYPE_DOUBLE], # args is an Array of arguments, passed to the ptr function.
      Fiddle::TYPE_DOUBLE    # ret_type is the return type of the function
    )
    
    # Equivalent to: floor(3.14159);
    floor.call(3.14159) #=> 3.0
    
  • जंग (प्रोग्रामिंग भाषा) विभिन्न मानक अनुप्रयोग_बिनरी_इंटरफेस के साथ कार्यों के लिए एक विस्थानीय प्रकार्य अंतरापृष्ठ को परिभाषित करता है।[20] एलिक्सिर (प्रोग्रामिंग भाषा), rustler के साथ इंटरफेसिंग के लिए एक पुस्तकालय भी है।
  • मूल दृश्य में एक घोषणात्मक वाक्यविन्यास होता है जो इसे गैर-यूनिकोड सी फ़ंक्शंस को कॉल करने की अनुमति देता है।
  • वोल्फ्राम भाषा WSTP (वोल्फ्राम प्रतीकात्मक स्थानांतरण प्रोटोकॉल) नामक एक तकनीक प्रदान करता है जो C ++, जावा, .NET और अमृत भाषाके लिए बाइंडिंग के साथ अन्य भाषाओं के बीच कोड की द्विदिशीय कॉलिंग को सक्षम बनाता है।
  • ZIG (प्रोग्रामिंग भाषा) बिलिन का उपयोग करके C को FFI प्रदान करता है cImport समारोह।[21]

इसके अलावा, कई FFI को स्वचालित रूप से उत्पन्न किया जा सकता है: उदाहरण के लिए, SWIG।हालांकि, एक एक्सटेंशन भाषाके स्थितियाँ में अतिथि और मेजबान के रिश्ते का एक शब्दार्थ उलटा हो सकता है, जब एक्सटेंशन भाषाका एक छोटा शरीर मेजबान भाषाके बड़े शरीर में अतिथि आमंत्रित सेवाएं हैं, जैसे कि एक छोटा प्लगइन लिखना[22] जिम्प के लिए।[23] कुछ FFI मुक्त खड़े सबरूटीनों तक सीमित हैं, जबकि अन्य किसी वस्तु या वर्ग में एम्बेडेड कार्यों की कॉल की भी अनुमति देते हैं (जिसे प्रायः विधि कॉल कहा जाता है);कुछ भी जटिल डेटाटाइप्स और/या वस्तुओं की भाषासीमा के पार की अनुमति देते हैं।

ज्यादातर मामलों में, एक FFI को एक उच्च-स्तरीय भाषाद्वारा परिभाषित किया जाता है, ताकि यह निचले स्तर की भाषामें परिभाषित और कार्यान्वित सेवाओं को नियोजित कर सके, समान्यतः एक सिस्टम भाषाजैसे सी (प्रोग्रामिंग भाषा) या सी ++।यह समान्यतः उस भाषामें ओएस सेवाओं तक पहुंचने के लिए किया जाता है जिसमें ओएस 'एपीआई को परिभाषित किया गया है, या प्रदर्शन के विचारों के लिए।

कई FFI भी मेजबान भाषामें सेवाओं को आमंत्रित करने के लिए बुलाए गए भाषाके लिए साधन भी प्रदान करते हैं।

विस्थानीय प्रकार्य अंतरापृष्ठ शब्द का उपयोग आम तौर पर Microsoft कॉमन भाषा रनटाइम जैसे बहु-भाषी रनटाइम्स का वर्णन करने के लिए नहीं किया जाता है, जहां एक सामान्य सब्सट्रेट प्रदान किया जाता है जो किसी भी अन्य में परिभाषित सेवाओं का उपयोग करने के लिए किसी भी CLR-Compliant भाषाको सक्षम बनाता है।(हालांकि, इस स्थितियाँ में सीएलआर में रनटाइम के बाहर कॉल करने के लिए एक FFI , पी/इनवोक समिलित है।) इसके अलावा, कई वितरित कंप्यूटिंग आर्किटेक्चर जैसे कि जावा रिमोट विधि आह्वान (आरएमआई), आरपीसी, कोरबा, साबुन और डी-बस परमिट विभिन्न भाषाओं में लिखी जाने वाली विभिन्न सेवाओं;इस तरह के आर्किटेक्चर को समान्यतः FFI नहीं माना जाता है।

विशेष स्थितियाँ

कुछ विशेष स्थितियाँ हैं, जिनमें भाषाएं एक ही बाइटकोड VM में संकलित होती हैं, जैसे कि क्लोजर (प्रोग्रामिंग भाषा) और जावा (प्रोग्रामिंग भाषा), साथ ही एलिक्सिर (प्रोग्रामिंग भाषा) और एर्लांग (प्रोग्रामिंग भाषा)। चूंकि कोई अंतरापृष्ठ नहीं है, यह एक FFI नहीं है, सख्ती से बोलना, जबकि यह उपयोगकर्ता को समान कार्यक्षमता प्रदान करता है।

यह भी देखें

संदर्भ

  1. "FFI Introduction". HaskellWiki. Retrieved 19 June 2015. Haskell's FFI is used to call functions from other languages (basically C at this point), and for C to call Haskell functions.
  2. "std::ffi - Rust". Retrieved 1 April 2021. This module provides utilities to handle data across non-Rust interfaces, like other programming languages and the underlying operating system. It is mainly of use for FFI (Foreign Function Interface) bindings and code that needs to exchange C-like strings with other languages.
  3. 3.0 3.1 Mike Pall. "FFI Library". Luajit.org. Retrieved 2013-09-29.
  4. 4.0 4.1 Heintz, Joachim (2013). Ways Ahead : Proceedings of the First International Csound Conference. Alex Hofmann, Iain McCurdy. Newcastle upon Tyne: Cambridge Scholars Publishing. ISBN 978-1-4438-5122-0. OCLC 855505215.
  5. "CFFI documentation". Retrieved 19 June 2015. C Foreign Function Interface for Python. The goal is to provide a convenient and reliable way to call compiled C code from Python using interface declarations written in C.
  6. "Interface to Other Languages". Adaic.org. Retrieved 2013-09-29.
  7. "Foreign Export". Retrieved 2020-05-25.
  8. "Calling C From Clean". Retrieved 2018-04-25.
  9. "dart:ffi library". Retrieved 2020-01-01.
  10. "'fortran-iso-c-binding' tag wiki". Stack Overflow.
  11. "cgo — The Go Programming Language". Retrieved 2015-08-23.
  12. "Foreign Function Interface | Manual". Deno (in English). Retrieved 2023-02-08.
  13. "Calling C and Fortran Code · The Julia Language". docs.julialang.org (in English). Retrieved 2018-02-11.
  14. PyCall.jl: Package to call Python functions from the Julia language, JuliaPy, 2018-02-08, retrieved 2018-02-11
  15. "PHP: FFI - Manual". The PHP Group. Retrieved 13 June 2019.
  16. Eli Barzilay. "The Racket Foreign Interface". Docs.racket-lang.org. Retrieved 2013-09-29.
  17. "TR600.pdf" (PDF). Archived from the original (PDF) on 2009-09-02. Retrieved 2013-09-29.
  18. "Inline implementations". Retrieved 2017-08-15.
  19. "Native Call". Retrieved 2017-08-15.
  20. "Using extern Functions to Call External Code". Retrieved 2019-06-01.
  21. "Import from C Header File". Zig Software Foundation. Retrieved 2021-03-11.
  22. "4. A sample script". Gimp.org. 2001-02-04. Retrieved 2013-09-29.
  23. "Script-Fu and plug-ins for The GIMP". Gimp.org. Retrieved 2013-09-29.


बाहरी संबंध