क्या एफ # के डिजाइन या विचारधारा के बारे में कुछ भी अलग है जो इसका कारण बन रहा है?
हां। एफ # संरचनात्मक टाइपिंग के बजाय नाममात्र का उपयोग करता है क्योंकि यह सरल है और इसलिए, केवल प्राणियों के उपयोग के लिए आसान है।
इस एफ # उदाहरण पर विचार करें:
let lengths (xss: _ [] []) = Array.map (fun xs -> xs.Length) xss
let lengths (xss: _ [] []) = xss |> Array.map (fun xs -> xs.Length)
पूर्व संकलन नहीं है क्योंकि गुमनाम समारोह अंदर xs
के प्रकार का पता नहीं लगाया जा सकता है एफ # प्रकार "एक Length
सदस्य के साथ कुछ वर्ग" व्यक्त नहीं कर सकते क्योंकि।
इसके विपरीत, OCaml प्रत्यक्ष समकक्ष व्यक्त कर सकते हैं:
let lengths xss = Array.map (fun xs -> xs#length) xss
क्योंकि OCaml (यह <length: 'a ..>
लिखा है) कि प्रकार व्यक्त कर सकते हैं। ध्यान दें कि वर्तमान में F # या Haskell की तुलना में इसके लिए अधिक शक्तिशाली प्रकार अनुमान की आवश्यकता है, उदा। ओकैमल योग प्रकार का अनुमान लगा सकता है।
हालांकि, यह सुविधा उपयोगिता समस्या के रूप में जाना जाता है। उदाहरण के लिए, यदि आप कोड में कहीं और स्क्रू करते हैं तो कंपाइलर ने अभी तक अनुमान नहीं लगाया है कि xs
का प्रकार एक सरणी माना जाता था, इसलिए यह कोई त्रुटि संदेश दे सकता है जैसे कि "कुछ प्रकार के लम्बे सदस्य के साथ" नहीं "एक सरणी"। केवल थोड़ी अधिक जटिल कोड के साथ, यह जल्दी से नियंत्रण से बाहर हो जाता है क्योंकि आपके पास कई संरचनात्मक रूप से अनुमानित सदस्यों के साथ बड़े प्रकार के होते हैं जो काफी एकीकृत नहीं होते हैं, जिससे समझ में नहीं आता है (सी ++/एसटीएल-जैसे) त्रुटि संदेश।
स्रोत
2010-07-02 01:56:28
मैं वास्तव में प्रश्न को नापसंद करता हूं, लेकिन यह पहले से ही कुछ शानदार और रोशनीपूर्ण प्रतिक्रियाओं को नेट करता है, इसलिए मैं भी बदनाम हो रहा हूं :) – Brian
@J कूपर: "हास्केल (उदाहरण के लिए) में समान रूप से शक्तिशाली अनुमान के साथ ऐसी कोई सीमा नहीं है"। जब आप अशुद्धता या प्रदर्शन पर विचार करते हैं तो हास्केल समान शक्तिशाली प्रकार के अनुमान के करीब कहीं नहीं है। उदाहरण के लिए, हास्केल का 'फर्श' फ़ंक्शन आम तौर पर किसी भी अन्य संकलित भाषा की तुलना में तीव्रता के आदेश चलाता है क्योंकि सही स्थिर प्रकार का अनुमान लगाने में विफलता इसे रन-टाइम प्रेषण का उपयोग करती है। साथ ही, अगर मैं 'रैंडइन्टलिस्ट' फ़ंक्शन से शीर्ष-स्तरीय प्रकार की एनोटेशन को हटा देना बंद करता हूं तो मेरे पास यहां कुख्यात 'संदिग्ध प्रकार चर' त्रुटि के साथ संकलन बंद हो जाता है। –
मुझे सवाल पसंद है क्योंकि मुझे लगता है कि लगभग हर कोई जिसने अभी सीखना शुरू किया है # में दो विचार हैं: "वाह, एफ # इतना शक्तिशाली है!" और "डब्ल्यूटीएफ, क्यों एफ # इस मूर्खतापूर्ण अनुमान नहीं कर सकता ?!" :) –