2010-07-25 31 views
27

जबकि भाषाएं एफ # और आयरनपीथन तकनीकी रूप से भिन्न हैं, मेरी राय में उनके संभावित उपयोगों के बीच बड़ी ओवरलैप है। दूसरे की तुलना में एक और लागू कब होता है?एफ # बनाम आयरनपीथन: दूसरे को कब पसंद किया जाता है?

अब तक मुझे लगता है कि एफ # कम्प्यूटेशनल रूप से अधिक कुशल है जबकि आयरनपीथन को पायथन से बेहतर पुस्तकालय प्राप्त होता है। मुझे सही होने में खुशी है।

कुछ हद तक प्रासंगिक प्रश्न is F# to IronPython/IronRuby as C# is to VB.NET? है लेकिन अधिकांश उत्तर उनके वास्तविक प्रयोज्यता के बजाय भाषा प्रतिमानों के बारे में हैं।

संपादित करें: मुझे लगता है कि मुझे थोड़ा और पृष्ठभूमि जोड़नी चाहिए। मेरे पास पाइथन के साथ सामान्य अनुभव है, और मुख्य रूप से एरलांग में पहले कुछ संकोचजनक कार्यात्मक प्रोग्रामिंग चरणों के बाद एफ # सीखा है। मैं वर्तमान में भविष्य में पाइथन या एफ # का उपयोग जारी रखने में सक्षम महसूस करता हूं। मैं यह तय करना चाहता हूं कि मुझे किसके लिए उपयोग करना चाहिए और कहां जाना चाहिए। उदाहरण के लिए:

  1. मानक लाइब्रेरी के हिस्से के रूप में पायथन के पास बहुत अच्छी डेटा संरचनाएं हैं। दूसरे दिन मुझे पाइथन के heap मॉड्यूल के बराबर की आवश्यकता थी और यह मानक एफ #/नेट लाइब्रेरी में उपलब्ध नहीं है। आयरनपीथन के लिए प्वाइंट।
  2. एफ # का उपयोग अन्य सुविधाजनक पुस्तकालयों को बनाने के लिए किया जा सकता है, अन्य नेट भाषाओं से एक्सेस करना आसान है। तो एक .NET निवास पुस्तकालय के लिए मैं एफ # पसंद करेंगे।
  3. क्रॉस-प्लेटफ़ॉर्म विकास। आयरनपीथन यहां बेहतर है। एफ #/मोनो प्रयोग योग्य है प्लेटफ़ॉर्म का एक बहुत छोटा सेट और एफ #/ओकैमल संगतता विशेष रूप से पुस्तकालयों के संदर्भ में बनाए रखना आसान नहीं है।
  4. आयरनपीथन इंटरैक्टिव खोल मुझे एफएसआई से आसान लगता है। YMMV।

तो सवाल करने पर निर्भर करता: वहाँ कोई कारण एक से दूसरे प्रतिमान की एक वरीयता या कुछ टीम या कंपनी वरीयताओं से अलग कर रहे हैं, यह है कि आप IronPython एफ # के बजाय लेने या ठीक इसके विपरीत होगा? मान लीजिए कि आप दोनों में समान रूप से आत्मविश्वास हैं? या वे बिल्कुल सभी व्यावहारिक उद्देश्यों के बराबर हैं?

संपादित: ठीक है दोस्तों, यह आप इस निर्णय पर पहुंचे हैं एक बेवकूफ सवाल लग रहा है यह और जवाब downvoting। लेकिन कम से कम यह ईमानदार है। तो कृपया एक संकेत दें। क्या यह सवाल पूछकर दोनों के बीच अंतर करना असंभव है या क्या मैं कुछ गुप्त वर्जित में प्रवेश कर रहा हूं? अगर यह एक ट्रोल की तरह दिखता है तो कृपया मुझे सूचित कर सकते हैं?

+0

का कार्यात्मक प्रतिमान चेहरा के रूप में कार्य करता है जो आप अधिक पसंद करते हैं (आपके कार्यात्मक - और राजनीतिक - आवश्यकताओं के भीतर)? –

+4

मुझे नहीं लगता कि यह एक बेवकूफ सवाल है, लेकिन यह एक विचित्र है। वे विकसित करने के लिए बहुत अलग भाषाएं हैं, साथ ही साथ भी विशिष्ट हैं, और मुझे उम्मीद नहीं है कि ग्रह पर दो से अधिक लोगों को कभी भी यह विकल्प बनाना होगा। कोई भी जो शायद संभवतः उस भाषा के साथ चला गया जहां वे अधिक परिचित थे। – Kylotan

+0

यदि आपका प्रश्न "ईमानदार" था, तो आपने इस तथ्य को स्वीकार किया होगा कि मैंने आपको F # की अंतर्निर्मित 'सेट' डेटा संरचना का संदर्भ देकर दो बार अपना पहला बिंदु अस्वीकार कर दिया है। –

उत्तर

23

तो सवाल करने पर निर्भर करता: वहाँ कोई कारण, के अलावा एक और करने के लिए एक प्रतिमान की एक वरीयता या कुछ टीम या कंपनी वरीयताओं, कि बनाना होगा से कर रहे हैं आप एफ # बल्कि लेने IronPython या उपाध्यक्ष से विपरीत? मान लीजिए कि आप दोनों में समान रूप से आत्मविश्वास रखते हैं? या वे सभी व्यावहारिक उद्देश्यों के लिए बिल्कुल समकक्ष हैं?

के रूप में आम तौर पर मामला है, "यह आप क्या कर रहे पर निर्भर करता है" लेकिन जब से तुम से पूछा, यहां शुरू:

टूलसेट विविधता

देखने की मेरी बात में, IronPython है अनिवार्य रूप से सी # के समान ही सिंटैक्स के साथ - मुझे पता है, यह पूरी तरह से भिन्न प्रकार के सिस्टम के साथ दो भाषाओं के लिए एक व्यापक सामान्यीकरण है, लेकिन वे अभी तक एक और अनिवार्य, ओओ भाषा के बारे में और कुछ नहीं कह सकते हैं। चाहे उसका सी #, या जावा, या सी ++, या पायथन, आप लगभग उसी तकनीक, मुहावरे, रणनीतियों, शैली इत्यादि का उपयोग करके भाषाएं हल करते हैं। यदि आप .NET डेवलपर हैं, तो आपने लगभग निश्चित रूप से सी # या वीबी के साथ काम किया है। नेट, और जब तक आप भाषाओं का उपयोग कर रहे हैं, तब तक आप एक अनिवार्य शैली में कोड लिख रहे हैं।

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

अनुमोदित, आप सी # और पायथन में कार्यात्मक शैली लिख सकते हैं, लेकिन कार्यात्मक सुविधाओं को बाद में विचार के रूप में तैयार किया गया है। पाइथन में मल्टीलाइन लैम्बडास की कमी है, और सी # बहुत वर्बोज़ है और कभी-कभी buggy उन जगहों पर कार्यात्मक शैली का उपयोग करने के लिए जहां आप इसका उपयोग करना चाहते हैं, सी # विशेष रूप से पूरे boatload of gotchas प्रतिनिधियों के संबंध में और स्थानीय चर को कैप्चर करने के लिए दोनों भाषाओं में पूंछ-कॉल अनुकूलन की कमी है लगभग हर जगह जहां आप उनका उपयोग करना चाहते हैं, सी # के प्रकार की अनुमान एफ # की तुलना में एक मजाक है। मैंने सी # को एक कार्यात्मक भाषा के रूप में उल्लसित रूप से खराब परिणामों के साथ उपयोग करने का प्रयास किया है :)

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

एफ # के पक्ष में सबसे अच्छा तर्क आवश्यक रूप से कार्यात्मक प्रोग्रामिंग नहीं है, बल्कि आपके टूलसेट की वास्तव में विविधता है। आयरनपीथन और सी # (समान प्रोग्रामिंग प्रतिमान और विभिन्न प्रकार की प्रणाली) को जोड़ने की तुलना में आपको एक बड़ी आरओआई मिलती है F # और C# (विभिन्न प्रोग्रामिंग प्रतिमान और समान प्रकार की प्रणाली)।

ठीक है मेरी कंपनी के

मामले का अध्ययन, के साथ ऐसा ही कहा जा रहा, मैं अपनी कंपनी में एफ # के लिए पुश करने के लिए कोशिश कर रहा हूँ। हम जो भी करते हैं उस पर मैं बड़ी मात्रा में विस्तार नहीं करूंगा, लेकिन अनिवार्य रूप से मेरी टीम टाइम वार्नर, कॉमकास्ट और अन्य केबल प्रदाताओं जैसी कंपनियों के लिए केबल और फोन सेवाओं को ऑर्डर करने की प्रक्रिया के माध्यम से उपयोगकर्ताओं को मार्गदर्शन करती है।

यह वास्तव में इसकी तुलना में अधिक शामिल प्रक्रिया है। शुरुआत के लिए, एक जटिल नियम इंजन है जो उत्पादों, निर्भरताओं और उत्पादों के बीच बहिष्कारों की उपलब्धता निर्धारित करता है। हम नियम इंजन ग्राफ पर चलते हैं और इसके बाहर एक निर्णय पेड़ बनाते हैं, फिर हम पेड़ को एक ग्राहक को सौंप देते हैं ताकि वे कर सकें इसे उपयोगकर्ता को प्रदर्शित करें और उपयोगकर्ता इनपुट, क्लाइंट मैप्स जीयूआई को हमारे निर्णय वृक्ष संरचना में वापस इकट्ठा करें, हम पेड़ पर चलते हैं और नियम इंजन, आदि के खिलाफ सबकुछ मान्य करते हैं।

मैं कहूंगा कि हमारा 9 5% कोड बस नेविगेट कर रहा है , पेड़ की तरह डेटा संरचनाओं में हेरफेर, और प्रसंस्करण। अभी, हम जो कुछ भी लिखते हैं वह सी # है और इसकी तरह एक गड़बड़ है। संयोग से, एफ # की शक्तियों में से एक एएसटी और प्रतीकात्मक प्रसंस्करण में हेरफेर कर रहा है (C# and F# code for processing ASTs की तुलना देखें), और यह सब संभव है क्योंकि पैटर्न मिलान अद्भुत है।

पैटर्न मिलान एक असली हत्यारा सुविधा है, यह ठीक है कि हमारे सी # कोड को इसे साफ करने की ज़रूरत है, और यही कारण है कि हमें एफ # की आवश्यकता है। हमारे पास आयरनपीथन के लिए कोई उपयोग नहीं है क्योंकि यह सी # की तुलना में प्रतीकात्मक प्रसंस्करण पर बेहतर नहीं है।

सारांश

कार्यात्मक प्रोग्रामिंग प्रतिमान और पैटर्न मिलान दो हत्यारा सुविधाओं मैं एफ # हर रोज के साथ का आनंद कर रहे हैं। मैं एफ # के async थ्रेडिंग मॉडल, संदेश पास करने वाले संदेश, प्राणियों का समर्थन, सक्रिय पैटर्न जैसे उपन्यास सुविधाओं, और इसी तरह के बारे में जा सकता हूं, लेकिन वे सभी बुलेट बिंदु टिप्पणियां हैं। मेरे लिए, यह उन दो हत्यारा विशेषताएं हैं जो कम से कम अपनी परियोजनाओं के लिए पाइथन पर एफ # के मामले का मामला बनाते हैं।

+0

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

+0

पायथन में मल्टीलाइन लैम्बडास, सच है। हालांकि, मुझे अभी तक एफ # में अज्ञात मल्टीलाइन फ़ंक्शंस का उपयोग करने की आवश्यकता नहीं है। तो मैं इसे मुख्य समस्या के रूप में नहीं मानूंगा। मेरे लिए करीबी और पाइपलाइनिंग के लिए बहुत अधिक समस्याग्रस्त है, जिनमें से दोनों सीधे एफ # में उपलब्ध हैं। –

+0

सारांश शानदार है, यद्यपि। शायद सबसे मूल्यवान हिस्सा। –

1

आप कौन सा अधिक पसंद करते हैं (आपके कार्यात्मक - और राजनीतिक - आवश्यकताओं के भीतर)? किसके लिए अधिक प्रारंभिक निवेश की आवश्यकता है? आप कौन सा बनाए रखना चाहते हैं (दीर्घकालिक निवेश)? और कौन सा आपकी समस्या को हल करने में आपकी मदद करेगा?

आयरनपीथन, ठीक है, पायथन। इसका मतलब यह भी है कि यह काफी गतिशील है - जो एफ # की तुलना में रन-टाइम ओवरहेड जोड़ता है। यदि आप एफ # पर पाइथन पसंद करते हैं, और यह आपके लिए पर्याप्त तेज़ चलता है, तो इसका उपयोग क्यों न करें? जैसा कि आपने बताया है, इसमें बेहतर 'पायथन लाइब्रेरी' समर्थन है, इसलिए यदि आप अपने लाभ के लिए इसका लाभ उठा सकते हैं, तो आयरनपीथन स्कोर करें।

दूसरी ओर, "बस" .NET (और F #-friendly) पुस्तकालयों के लिए बाध्य होना वास्तव में F # जैसी भाषा के लिए इतना बुरा नहीं है, जब तक पुस्तकालयों को ऐसा करने की ज़रूरत होती है जो आपको करने की ज़रूरत है या हाशिए पर किया जा सकता है।

हालांकि, यह वास्तव में पैराडाइम के साथ-साथ डेवलपर्स की वरीयता और अनुभव के लिए नीचे आ गया है।

मैं व्यक्तिगत रूप से गतिशील भाषाओं से बचने जहाँ मैं कर सकते हैं :-)

+0

@pst: मेरा संपादित प्रश्न देखें। मुझे पता है कि प्रतिमान इसका एक बड़ा हिस्सा है, और मैंने बोलने के लिए कार्यात्मक रूप से बातचीत करने के लिए एफ # सीखा है। क्या इसके अलावा _no अंतर नहीं है? –

4

एफ # और IronPython बीच सबसे बड़ा अंतर यह है कि:

एफ # एक स्थिर भाषा

और

IronPython गतिशील है ।

छोटे स्तरों (जैसे। 100-पंक्ति स्क्रिप्ट) पर, गतिशील और स्थैतिक भाषाओं में बहुत अंतर नहीं होता है। जब सॉफ्टवेयर डिजाइन/घटक डिजाइन की बात आती है, तो इन दो भाषाओं में दो अलग-अलग सोच पैटर्न होते हैं। एफ # में टाइप सिस्टम पाइथन की तुलना में भी बहुत शक्तिशाली है।

+4

मैं थोड़ा उत्सुक हूं जिसका मतलब है "एफ # में टाइप सिस्टम पाइथन की तुलना में बहुत शक्तिशाली है।" क्या आप विस्तार से समझा सकते हैं? –

+3

पायथन में एक गैर-मुद्दे के प्रकार हैं; ईएएफपी का मतलब है कि आप मूल रूप से उन्हें अनदेखा कर सकते हैं। यह कुछ शक्तिशाली बहुरूपता की ओर जाता है (फैंसी 'स्ट्रिंग्स' चाहते हैं? बस वारिस करें, सबकुछ अभी भी काम करेगा!), लेकिन कुछ सुंदर गड़बड़ों के लिए भी (ओह, मैं दो पूर्णांक गुणा करना चाहता था लेकिन ओह, वास्तव में एक सूची है, और अब मदद मेरी सूची वास्तव में बड़ी हो गई है!)। दूसरी ओर, एफ #, एमएल की शक्तिशाली प्रकार प्रणाली का उपयोग करता है। इसका मतलब है कि यह उन प्रकारों को काम करता है जो चीजें आपके लिए होनी चाहिए, और * संकलन-समय * पर जांच करें कि सब कुछ ठीक है। यह कई कीड़े को रोकता है, लेकिन कई बार परेशान हो सकता है। – katrielalex

+0

इन दिनों यह "स्थैतिक" बनाम "गतिशील" से अधिक जटिल हो रहा है। बहुत सारी भाषाएं निरंतरता पर कहीं मौजूद हैं, न कि एक या दूसरे चरम पर। उदाहरण के लिए, यदि आप केवल एक ही गतिशील भाषा सुविधा की देखभाल करते हैं, तो बतख टाइपिंग है, एफ # इसे अपने समृद्ध प्रकार की बाधा प्रणाली के माध्यम से संभाल सकता है। – sblom

4

दो एफ # और आयरन पायथन के बीच मुख्य अंतर हैं:

  1. एफ # स्थिर, आपके द्वारा लिखा गया है, जबकि आयरन पायथन नहीं है।
  2. एफ # की नींव कार्यात्मक प्रोग्रामिंग है जबकि आयरन पायथन की नींव ऑब्जेक्ट उन्मुख प्रोग्रामिंग है। (दोनों को अन्य प्रतिमानों के लिए अच्छा समर्थन है।)

ये अपेक्षाकृत प्रमुख अंतर हैं, और वे सीधे एक दूसरे को प्राथमिकता देने के मुख्य व्यावहारिक कारणों का नेतृत्व करते हैं।

जैसा कि आपने कहा था, स्थिर टाइपिंग की कमी के कारण आयरन पायथन एफ # से धीमी है। कंप्यूटर भाषा बेंचमार्क में, आयरन पायथन औसत में 25x है, और सबसे खराब मामले में 120x धीमा है।तो यदि रनटाइम प्रदर्शन एक विचार है, तो एफ # संभवतः बेहतर है।
http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=ironpy&lang2=fsharp

चूंकि दोनों .NET हैं, प्रत्येक दूसरे के पुस्तकालयों का उपयोग केवल थोड़ी सी काम के साथ कर सकते हैं। तो मुझे यह एक प्रमुख मुद्दा के रूप में नहीं दिख रहा है, हालांकि मुझे लगता है कि आयरनपीथन में साइपी का उपयोग करना संभव है, जबकि यह एफ # से थकाऊ होगा, और एफ # के लिए इसी तरह की सर्वश्रेष्ठ मुफ्त लाइब्रेरी उतनी अच्छी नहीं है।

कार्यात्मक प्रोग्रामिंग एक बहुत ही शक्तिशाली शैली हो सकती है, और एफ # को वर्कफ़्लोज़ जैसी कुछ शक्तिशाली सुविधाएं मिलती हैं, जिनमें एसिंक्रोनस वर्कफ़्लोज़ शामिल हैं जो F # पुस्तकालयों द्वारा समर्थित हैं। आप आयरन पायथन में ऐसी चीजों का लगभग अनुकरण कर सकते हैं, लेकिन पुस्तकालयों में समर्थन की कमी के कारण यह आसानी से काम नहीं करेगा।

ऑब्जेक्ट ओरिएंटेशन कई प्रोग्रामर से अधिक परिचित है, और वे उस कारण से पाइथन पसंद कर सकते हैं।

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

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

0

आयरनपीथॉन की गतिशील व्याख्या क्लाइंट ब्राउज़र उपयोगकर्ता-एजेंटों में एकान्त जावास्क्रिप्ट वाक्यविन्यास के विकल्प के रूप में चमकता है। एफ # की स्थिर प्रकार की जांच कस्टम प्रकारों को कवर करने के लिए एसआई, या ऐसी कोई माप प्रणाली पोर्टेबल लाइब्रेरी की अनुमति देती है, इसलिए बादलों से डेटा लाने वाले बैक-एंड टियर इसे उपयोगी जानकारी के रूप में अधिक अर्थपूर्ण रूप से पुनर्निर्मित कर सकते हैं। अधिकांश प्रोग्रामिंग भाषाओं की तरह उन्हें इन और अधिक चीजों के लिए एक दूसरे के लिए इस्तेमाल किया जा सकता है, ये उद्धरण क्लाइंट ऐप्स के भीतर दोनों की पूरी तरह से अलग ताकत प्रदर्शित करते हैं। एफ # समग्र ऐप में महत्वपूर्ण भूमिका निभाता है, जबकि आयरनपीथॉन उपयोगकर्ता-एजेंट ब्राउज़र आधारित इंटरैक्शन के अंदर भूमिका निभाता है।
एफ # की स्थैतिक प्रकार की जांच और लैम्बडा क्लासिक एएसपी के स्तर के करीब कई ऑब्जेक्ट ओरिएंटेड अवसरों पर ASP.net को सरल बना सकता है। Ironpython उपयोगकर्ता संशोधित स्क्रिप्ट द्वारा एप्लिकेशन एक्स्टेंसिबिलिटी की अनुमति देता है जो तीसरे पक्ष के प्लग-इन एक्सटेंशन करता है जो न केवल ब्राउज़र के साथ लोकप्रिय हैं, बल्कि मीडिया प्लेयर, और सपने-वीवर और अन्य संपादक हैं।
आयरनपीथॉन शायद शुद्ध पायथन और .NET आश्रित भागों में फिर से फैक्टर किया जा सकता है फिर से उपयोगिता उपयोग-मामलों को दूर करता है। एफ # अब तक अन्य-ऑब्जेक्ट ऑब्जेक्ट-ओरिएंटेड प्रतिमान आधारित .net

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