2010-11-15 7 views
5

मेरे पास वर्तमान में पाइथन में लिखा गया एक सिस्टम है जिसे बैकएंड और फ्रंटेंड परतों में विभाजित किया जा सकता है। पायथन बहुत धीमी है, इसलिए मैं बैकएंड में फ्रंटेंड को रखते हुए बैकएंड को एक तेज़ संकलित भाषा में फिर से लिखना चाहता हूं, जिससे बैकएंड कार्यक्षमता को पायथन से बुलाया जा सके। ऐसा करने के लिए सबसे अच्छे विकल्प क्या हैं?पाइथन के साथ इंटरफेसिंग बहुत तेज़ अबास्ट्रक्शन लिखने के लिए भाषा विकल्प?

मैंने साइथन माना है लेकिन यह लिखने के लिए बहुत ही सीमित और बोझिल है, और इतना तेज़ नहीं। सी ++ के लिए बूस्ट पायथन के बारे में मुझे क्या याद है, यह भाषाओं के बीच पुल को बनाए रखने के लिए बहुत परेशान है। क्या बेहतर विकल्प हैं?

मेरा मुख्य कारक हैं:

  • निष्पादन की गति संकलन की
  • गति
  • भाषा कथात्मक
+2

आप साइथन को कितनी तेजी से नहीं समझते हैं? क्या आप प्रकार घोषित कर रहे हैं? यही वह जगह है जहां प्रमुख गति है। – aaronasterling

+0

साइथन वास्तव में पाइथन और "सी कोड" को एकीकृत करने के लिए एक बहुत ही सुविधाजनक टूल है। यह बिल्कुल बोझिल नहीं है। बस, उन कार्यों को लिखें जो गतिशीलता में मदद करेंगे और साइथन का उपयोग करके लाइब्रेरी के रूप में उन्हें बेनकाब करेंगे। – pyfunc

उत्तर

7

सी ++ SWIG साथ है गोंद कोड की जरूरत के सभी उत्पन्न कर सकते हैं। जब तक आप सी ++ और पायथन के बीच अत्यधिक कूद से बचें, यह आपके सी ++ जितना तेज़ होगा। एसडब्ल्यूआईजी इंटरफेस आम तौर पर उत्पन्न करने के लिए काफी सरल होते हैं जबतक कि आप कुछ "अजीब" नहीं कर रहे हैं।

+1

+1 मैं भी SWIG की सलाह देते हैं। यह _very_ उपयोग करने में आसान है। समर्थित सुविधा नहीं है ** 1/** कुछ ऑपरेटरों के अधिभारित संस्करण (नया, हटाएं, इत्यादि) ** 2/** नेस्टेड कक्षाएं, और कुछ अन्य चीजें, लेकिन कामकाज हैं और आपको स्पष्ट चेतावनियां मिलेंगी। – log0

2

यदि आपने ज्योथन का उपयोग किया है तो आप जावा बैक-एंड रूटीन को आसानी से (trivially) में कॉल कर सकते हैं। आखिरी बार जब मैंने चेक किया था, तो जावा के बारे में दो गुना धीमी गति से और पाइथन की तुलना में 10x तेज है।

+0

समस्या यह है कि आखिरी बार जब मैं जांचता हूं, तो जेथन पाइथन का एक काफी पुरातन संस्करण का उपयोग कर रहा था। क्या इसमें अभी तक संदर्भ प्रबंधक भी हैं? – aaronasterling

+0

@Aaronasterling - यह वास्तव में एक पुराना संस्करण है, 2.5.2 आरसी 2 नवीनतम रिलीज है। इसमें संदर्भ प्रबंधक हैं (मेरे पास अभी एक प्रति इंस्टॉल है), लेकिन इसमें अभी भी बहुत सारी सुविधाओं की कमी है जो 2.6 और 2.7 में शामिल थे, पर्याप्त है कि मैं पुरानी रिलीज का उपयोग करने के बजाय बूस्ट-पायथन बाइंडिंग को बनाए रखने से निपटना पसंद करता हूं । : डी –

1

मैं बूस्ट :: पायथन के बारे में असहमत हूं। यह मौजूदा C++ - केंद्रित पुस्तकालय को लपेटने और इंटरफ़ेस को बदलने की कोशिश नहीं करते समय बोझिल हो सकता है। लेकिन यह वह नहीं है जिसे आप करना चाहते हैं।

आप एक मौजूदा पायथन समाधान को भारी भाषा में भारी उठाने के लिए देख रहे हैं। इसका मतलब है कि आप इंटरफ़ेस को नियंत्रित कर सकते हैं।

आप अंतरफलक के नियंत्रण में हैं, तो आप यह अजगर के अनुकूल रख सकते हैं, और बीपी के अनुकूल:

उस मामले में, बूस्ट (आईई संकेत और एल-मूल्यों के रूप में अपरिवर्तनीय प्रकार की तरह समस्याग्रस्त बातें बचने के लिए) :: पाइथन यह कहने के रूप में सरल हो सकता है कि आप कौन से फ़ंक्शन को पायथन से कॉल करना चाहते हैं।

संबंधित मुद्दे