जूलिया में, वाक्य रचना एक स्वरूपित स्ट्रिंग मुद्रित करने के लिए इस प्रकार है? क्या ऐसा है कि यह विभिन्न तर्कों को स्वीकार कर सकता है?जूलिया में, @printf एक फ़ंक्शन के बजाय मैक्रो क्यों है?</p> <pre><code>@printf("Hello %dn", 5) </code></pre> <p>क्यों <code>@printf</code> एक समारोह के बजाय एक मैक्रो है:
उत्तर
तर्क के परिवर्तनशील लेते हुए सामान्य जूलिया कार्यों [1] के लिए एक समस्या नहीं है। @printf
एक मैक्रो है ताकि यह संकलन समय पर प्रारूप स्ट्रिंग को पार्स और व्याख्या कर सके और उस विशिष्ट प्रारूप स्ट्रिंग के लिए कस्टम कोड जेनरेट कर सके। लोग एहसास नहीं हो सकता है कि सी printf
समारोह फिर से पार्स करता है और फिर से व्याख्या प्रारूप स्ट्रिंग हर बार जब आप printf
कहते हैं। तथ्य यह है कि यह तेज़ है क्योंकि यह पागल सूचक प्रोग्रामिंग के एक मामूली चमत्कार का प्रतिनिधित्व करता है। गंभीरता से, बस अपने निकटतम libc के printf
कार्यान्वयन को देखें। यह पूरी तरह से पागल है।
जूलिया एक अलग दृष्टिकोण का उपयोग करता है: @printf
एक मैक्रो जो कुशल कोड है कि प्रारूप विनिर्देश के लिए विशिष्ट में प्रारूप तार तब्दील है। यदि आप इसके बारे में सोचते हैं, तो एक printf-style प्रारूप स्ट्रिंग वास्तव में एक ऐसा फ़ंक्शन व्यक्त करने का एक तरीका है जो निश्चित संख्या और तर्कों का प्रकार लेता है और उन्हें किसी विशेष तरीके से प्रिंट करता है। ध्यान दें कि मैंने कहा है कि प्रारूप स्ट्रिंग एक फ़ंक्शन है, प्रिंटफ स्वयं नहीं है, जो अवधारणात्मक रूप से एक फ़ंक्शन जनरेटर है, प्रारूपों को स्वरूपण में बदल रहा है। तथ्य यह है कि सी में रन-टाइम फ़ंक्शन में यह सब कुछ खराब हो गया है क्योंकि यह सी में एकमात्र उचित विकल्प है क्योंकि वास्तव में, इस वजह से, हाल ही में, अपने आप को शूट करना आसान था सी के printf को गलत संख्या या तर्क के प्रकार गुजरकर पैर में। यह अब बेहतर है क्योंकि प्रिंटर को प्रिंटफ प्रारूपों के अर्थशास्त्र को समझने के लिए विशेषीकृत किया गया है।
सिद्धांत रूप में, जूलिया के @printf
को सी से अधिक तेज़ बनाया जा सकता है क्योंकि यह कस्टम कोड उत्पन्न करता है, लेकिन व्यावहारिक रूप से, मुझे सी से मेल खाने में काफी मुश्किल होती है, इसे अकेले मारने दें। लेकिन मुझे लगता है कि यह हमारे आई/ओ सिस्टम के वर्तमान डिजाइन और मैं इसका उपयोग कैसे कर रहा हूं, एक अंतर्निहित सीमा के कारण नहीं है। आई/ओ सामान हालांकि ओवरहाल के कारण है, और जब ऐसा होता है, तो हम वास्तव में इस तथ्य का लाभ उठाकर फॉर्मेटेड प्रिंटिंग पर सी को हरा सकते हैं कि @printf
एक मैक्रो है।
यह प्रदर्शन के लिए है। printf
मैक्रो एक निरंतर प्रारूप स्ट्रिंग लेता है (उदाहरण के लिए "Hello %d\n"
) और उस स्ट्रिंग के लिए अनुकूलित कोड जेनरेट करता है।
- 1. <? के बजाय php <?
- 2. <<बजाय << स्ट्रीम आउटपुट में संकलन क्यों करता है?
- 3. एक <br> के बजाय <div></div> दबाकर एक contenteditable
- 4. क्यों <object> एक समारोह है?
- 5. <% $, <% @, <% =, <% # ... सौदा क्या है?
- 6. क्यों std :: string s ("?? <") आउटपुट के बजाय {? की बजाय ?? <आउटपुट करेगा?
- 7. रीडायरेक्टर "<<<"?
- 8. 'ऑपरेटर <<' के लिए 'std :: cout <<' में अस्पष्ट अधिभार <<
- 9. GIT भ्रष्ट फ़ाइलें (<<<<<<<< HEAD)
- 10. टाइप (3,) पायथन में एक ट्यूपल के बजाय एक पूर्णांक देता है, क्यों? जबकि</p> <pre><code>t = 3, type(t) </code></pre> <p>टपल प्रकार रिटर्न
- 11. एनालॉग के `<<% ~` Traversal
- 12. मुझे पर्ल में <ARGV> या <के बजाय <> का उपयोग क्यों करना चाहिए?
- 13. आम लिस्प: क्यों प्रोन एक विशेष रूप है?</p> <pre><code>(defun progn2 (&rest body) (first (last body))) </code></pre> विशेष रूप के बजाय <p>:
- 14. जावास्क्रिप्ट में isNaN() फ़ंक्शन क्यों है लेकिन कोई भी परिभाषित नहीं है()?</p> <pre><code>typeof(...) != "undefined" </code></pre> <p>एक बात मैं नहीं दिख रहा है:
- 15. ओवरलोडिंग ऑपरेटर << एक टेम्पलेटेड क्लास
- 16. एक म्यूटेक्स <Option<>>
- 17. हास्केल मानक पुस्तकालय में कोई << क्यों नहीं है?
- 18. क्यों (?! ^) बराबर है (? <! ^)?
- 19. {} <function() {} क्यों है?
- 20. PHP क्या <<< मतलब है?
- 21. डेटा.table परिभाषित क्यों किया गया है: = ओवरलोडिंग के बजाय <-?
- 22. क्यों अमरूद के TypeToken <T> .getRawType() वापसी कक्षा <? super T> बजाय कक्षा <T>
- 23. <*> हास्केल में एक इंफिक्स फ़ंक्शन क्यों है?
- 24. विचारों में <% और <% = दोनों का उपयोग क्यों करें?
- 25. एंड्रॉइड मैनिफेस्ट: कभी-कभी "<classname>" के बजाय "<classname>" क्यों?
- 26. cout << "привет"; या wcout << एल "привет";
- 27. <algorithm> एक मैक्रो एक्स परिभाषित करता है?
- 28. मानक सी लाइब्रेरी फ़ंक्शन नामों में "स्ट्रिंग" को "ए" में क्यों संक्षिप्त किया गया है?</p> <p>(के रूप में 'एक' स्ट्रिंग):</p> <ul> <li>atof</li> <li>atoi</li> <li>itoa</li> </ul> <p>('str के रूप में स्ट्रिंग
- 29. कैसे मैं अदालत शैली इंटरफेस के साथ एक लकड़हारा वर्ग लिख सकता हूँ (लकड़हारा << "त्रुटि:" << वैल << endl;)
- 30. सामान्यीकृत कंटेनर_व्यू <T> के बजाय string_view क्यों?
@lucacerone 'कर एक्स = @sprintf 42'" मेरी भाग्यशाली संख्या% d है। " – Adobe
प्रत्येक printf कॉल के लिए कस्टम कोड उत्पन्न करने से बहुत सारे कोड ब्लोट का कारण बन सकता है। – vitaut
@StefanKarpinski आईओ ओवरहाल के बाद से कोई अपडेट? @StefanKarpinski से –