तो मैं एफ # सीखने की कोशिश कर रहा हूं और जैसे ही मैं नई चीजें सीखता हूं, मैं कवर के तहत क्या हो रहा है यह देखने के लिए आईएल को देखना पसंद करता हूं। मैंने हाल ही में करी के बारे में पढ़ा है, जो भाषा का एक स्पष्ट मौलिक है।क्यों एफ # संकलित अलग कार्यों में संकलन नहीं करता है?
F# for fun and Profit जब आप नीचे समारोह बनाने के अनुसार:
let addItems x y = x + y
क्या वास्तव में हो रहा है वहाँ दो एकल तर्क कार्यों बनाया जा रहा है।
let addItems x =
let subFunction y =
x + y
subFunction
और जब आप addItems 5 6 आपरेशन के आदेश के साथ समारोह आह्वान के रूप में
addItems इस प्रकार तर्क 5
addItems साथ कहा जाता है देता है subFunction
- subFunction तर्क के साथ कहा जाता है 6
- उपखंड में दायरे में तर्क 5 है o यह 5 और 6
की योग जोड़ता है और यह सब सतह पर ठीक लगता है। हालांकि, जब आप इसके लिए आईएल देखते हैं तो यह एक अलग कहानी बताता है।
.method public static int32 testCurry(int32 x,
int32 y) cil managed
{
.custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationArgumentCountsAttribute::.ctor(int32[]) = (01 00 02 00 00 00 01 00 00 00 01 00 00 00 00 00)
// Code size 5 (0x5)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldarg.1
IL_0003: add
IL_0004: ret
} // end of method Sandbox::testCurry
हम स्पष्ट रूप से आईएल कि एक स्थिर समारोह है कि दो तर्क लेता है और रिटर्न कोई Int32 बनाई गई है में देख सकते हैं।
तो मेरा सवाल है, विसंगति क्यों? यह पहली बार नहीं है जब मैंने आईएल देखा है जो दस्तावेज के साथ जैव नहीं करता है ...
मैं मानता हूं कि इसे यथासंभव अनुकूलित किया जाना चाहिए। हालांकि, जब आप मुझे एक बात बताते हैं और कुछ और हो रहा है, तो क्या यह बड़े कोड अड्डों में प्रदर्शन समस्याओं के लिए एक बड़ा अवसर नहीं छोड़ता है, या बग खोजने में मुश्किल नहीं है? –
@ एंथनी रसेल आपको व्यवहारिक अनुबंध बताया जाता है - जो नहीं बदला जा सकता है। यदि कंपाइलर व्यवहार में भिन्न होने के कारण बग का कारण बनता है, तो यह एक कंपाइलर बग है (और तय किया जाना चाहिए)। इसी तरह की चीजें सबसे अधिक (सभी उत्पादन गुणवत्ता?) संकलित भाषाओं में होती हैं - संकलक आम तौर पर "बेहतर" तरीके से बहुत सारे कोड को फिर से लिखता है लेकिन समान रनटाइम व्यवहारिक गारंटी और उपयोग विशेषताओं को रखता है। –
ठीक है, सब ठीक लगता है। त्वरित प्रतिक्रिया के लिए धन्यवाद! –