2013-02-08 61 views
32

यह सवालयदि एसएमएल.नेट में मज़ेदार थे तो एफ # क्यों नहीं हो सकता?

  1. एफ # करने के लिए एल सी पॉलसन द्वारा "ML for the Working Programmer" (WorldCat) का मेरा अनुवाद जो उदाहरण के लिए functors का उपयोग करता है से बाहर शुरू कर दिया।
  2. क्रिस ओकासाकी द्वारा "Purely Functional Data Structures" (WorldCat) का अनुवाद करने की अंतिम इच्छा जो फ़ैक्टर का उपयोग करती है।
  3. एंड्रिया एस्पर्टी और जिएसेपे लोंगो द्वारा "CATEGORIES TYPES AND STRUCTURES - An Introduction to Category Theory for the working computer scientist" (WorldCat) पढ़ना।
  4. यह सब समझ नहीं रहा, ज्यादातर श्रेणी सिद्धांत।

SML.NET functors करते हैं और Microsoft .NET के साथ काम किया जा सकता है।
* देखें: SML.NET User Guide धारा 4.8.2 कक्षा के प्रकार और मज़दूर?

मैं देख रहा हूं कि F # माइक्रोसॉफ्ट .NET में कुछ सीमा के कारण वास्तविक मजेदार नहीं कर सकता।
* Can ML functors be fully encoded in .NET (C#/F#)?
* Any workaround for functor?

तो SML.NET तो नेट पर functors कर सकता है, तो क्यों नहीं कर सकते हैं एफ #? एसएमएल.NET ने क्या किया है कि एफ # नहीं कर सकता?

जितना अधिक मैं श्रेणी सिद्धांत से आने वाले मकसद के बारे में सीखता हूं, उतना ही मैं उनकी सुंदरता देखता हूं और उन्हें F # में रखना चाहता हूं।

संपादित

एक पीछा बेहतर के बीच श्रेणी सिद्धांत और कार्यात्मक प्रोग्रामिंग संबंध को समझने के लिए CS:StackExchange पर इन Q&A देखते हैं।

+0

चूंकि लोगों के पास यह प्रश्न देखा गया है, इसलिए मैं इस पेपर को एक लिंक जोड़ रहा हूं क्योंकि उन्हें रुचि का पेपर मिल सकता है। [भौतिकी, टोपोलॉजी, तर्क और गणना: ए रोजेटा स्टोन] (http://arxiv.org/pdf/0903.0340v3.pdf) –

+0

ब्याज की: [उच्च प्रकार की जेनिक्स] (http: //adriaanm.github। आईओ/फाइल/उच्च पीडीएफ) और [स्कैला में एक उच्च प्रकार का प्रकार क्या है?] (http://stackoverflow.com/questions/6246719/what-is-a-higher-kinded-type-in-scala) और [एफ # के लिए उच्च ऑर्डर जेनेरिक जोड़ें - (कक्षाएं टाइप करें)] (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2228766-add-higher-order-generics-to-f-type- कक्षा-) –

+0

ब्याज की: [वैश्विक ऑपरेटर ओवरलोडिंग एफ #] (http://stackoverflow.com/questions/19682432/global-operator-overloading-in-f) और [FsControl - मानक विज्ञापन-प्रसार के साथ एक एफ # बेस लाइब्रेरी आदिम प्रकारों पर पॉलिमॉर्फिक फ़ंक्शन।] (https://github.com/gmpl/FsControl) –

उत्तर

39

.NET की कोई मौलिक सीमा नहीं है जो F # में कार्यान्वित होने से म्यूटर्स को रोकती है। सच है, उन्हें सीधे .NET मेटाडेटा में प्रदर्शित नहीं किया जा सकता है, लेकिन न ही अन्य F # भाषा सुविधाएं संघ प्रकारों की तरह हो सकती हैं। मज़दूरों के साथ भाषाओं के लिए कंपाइलर्स (उदाहरण के लिए, मानक एमएल, ओकैमल) पास defunctorize नामक पास है; यह सी ++ टेम्पलेट विस्तार की तरह ही काम करता है, जिसमें यह सामान्य मॉड्यूल में विशेषज्ञता करके मकानों को "flattens" करता है।

एफ # कंपाइलर एक ही काम कर सकता है, लेकिन फिर आपको यह पूछना होगा: यह अन्य .NET भाषाओं के संपर्क में कैसे होगा? चूंकि मज़ेदार सीधे .NET प्रकार सिस्टम में एन्कोड नहीं किए जा सकते हैं, इसलिए आपको उनका प्रतिनिधित्व करने के लिए कुछ तरीके से आने की आवश्यकता होगी; और यदि वह प्रतिनिधित्व सी # या वीबी.नेट से उपयोग करना मुश्किल/असंभव है, तो क्या यह अभी भी एफ # म्यूटर्स को शामिल करने के लिए समझ में आता है? एफ # की सफलता का एक गैर-मामूली हिस्सा सी # और वीबी.नेट के साथ आसानी से (दोनों दिशाओं में) इंटरऑप करने की क्षमता से आता है।

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

संपादित करें 2: MLton की defunctorize पारित करने के लिए कोड: defunctorize.fun

अद्यतन: मैं कैसे functors वास्तव में नेट प्रकार प्रणाली के भीतर व्यक्त किया जा सकता के बारे में सोचा था, तो मैं एक साथ रखा थोड़ा प्रयोग यह सुंदर नहीं है, लेकिन यह काम करता है - इसलिए अब हम जानते हैं कि यह कम से कम व्यावहारिक है कि एफ # एक दिन मज़ेदारों का समर्थन कर सकता है। व्यावहारिक रूप से, आपके प्रयोगात्मक कोड में जो जटिलता आप देखते हैं वह सभी संकलक/भाषा से छिपी जाएगी। यदि आप इसे देखना चाहते हैं: experimental-functors

+1

+1 - आप संभवतः इंटरऑप के साथ सिर पर नाखून मारा। कोई विचार है कि SML.NET में फ़ैक्टर अन्य .NET भाषाओं में कैसे दिखाई दिए? – Daniel

+0

@Daniel क्या यह मदद करता है? [इंटरऑपरेबिलिटी में एडवेंचर्स: एसएमएल.नेट अनुभव] (http://research.microsoft.com/pubs/67332/p53-benton.pdf) –

+0

@GuyCoder: धन्यवाद, लेकिन मुझे कुछ नहीं दिख रहा है कि कैसे फ़ैक्टर का प्रतिनिधित्व किया जाता है वहां सीआईएल में। जैक ने जो कहा, उसके आधार पर, क्या मुझे लगता है कि एक मज़ेदार कई मानक मॉड्यूल में "defunctorized" है और इस तरह अन्य .NET भाषाओं में दिखाई देते हैं? – Daniel