में INLINE_FUSED pragma मैं वेक्टर लाइब्रेरी पर जा रहा हूं और {-# INLINE_FUSED transform #-}
पर ध्यान दिया और मैं सोच रहा था कि यह क्या करता है? मैं इसे vector.h
में परिभाषित करता हूं लेकिन कहीं और नहीं।Haskell
Haskell
उत्तर
परिभाषा का अर्थ है कि INLINE_FUSED
INLINE [1]
जैसा ही है; INLINE_INNER
INLINE [0]
जैसा ही है। [1]
और [0]
इनलाइनिंग के चरणों को ऑर्डर करने के लिए मानक ghc हैं। शीर्षक 7.13.5.5 के तहत चर्चा देखें। चरण नियंत्रणhttp://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html
vector
में चरणों को नियंत्रित करने की जरूरत है जो ghc
inlines विभिन्न परिभाषाओं पर। सबसे पहले यह stream
और unstream
कार्यों के सभी उपयोगों को उजागर करने के लिए चाहता है, ताकि (सभी के ऊपर) stream.unstream
को id
द्वारा प्रतिस्थापित किया जा सके, और इसी तरह अन्य मामलों में, (पुनः लिखने) RULE प्रागमाओं के अनुसार वितरित किया जा सकता है।
वेक्टर फ़ंक्शंस के विशिष्ट वेक्टर unstream . f . stream
के रूप में लिखे गए हैं, जहां f स्ट्रीम स्ट्रीम स्ट्रीम करने के लिए स्ट्रीम है। unstream
Stream
से स्मृति में वास्तविक वेक्टर बनाता है; stream
एक वास्तविक वेक्टर को Stream
में पढ़ता है। खेल का उद्देश्य निर्मित वास्तविक वैक्टरों की संख्या को कम करना है। तो तीन वेक्टर की संरचना कार्यों
f_vector . g_vector . h_vector
सदिश करने के लिए वास्तव में
unstream . f_stream . stream . unstream . g_stream . stream . unstream . h_stream . stream
है जो अपने
unstream . f_stream . g_stream . h_stream . stream
और इतने पर करने के लिए फिर से लिखा। तो हम तीन के बजाय एक नया वेक्टर लिखते हैं।
transform
के लिए नियमों को इस की तुलना में थोड़ा अधिक सजावटी रहे हैं, लेकिन आदेश के एक ही सूक्ष्म प्रणाली के साथ हैं:
में
transform f g (unstream s) = unstream (Bundle.inplace f g s)
transform f1 g1 (transform f2 g2 p) = transform (f1 . f2) (g1 . g2) p
ताकि आप देख सकते हैं कि कुछ के रूप में inlined:
unstream . h_stream . stream . transform f1 g1 . transform f2 g2
. unstream . j_stream . stream $ input_vector
फिर से लिखा जाएगा।
- 1. Haskell
- 2. Haskell
- 3. Haskell
- 4. Haskell
- 5. Haskell
- 6. Haskell
- 7. Haskell
- 8. Haskell
- 9. नक्शा। Haskell
- 10. नक्शा Haskell
- 11. \ r \ n Haskell
- 12. मेरी पहली Haskell कार्यक्रम
- 13. Haskell regex प्रतिस्थापन
- 14. Haskell बहुरूपता और सूचियों
- 15. Haskell, चेनिंग फिल्टर
- 16. `forM_` idiomatic Haskell है?
- 17. जब Coq Haskell को
- 18. Haskell गुना आपरेशन
- 19. Emacs Haskell Mode Flymake
- 20. Haskell और स्ट्रिंग लंबाई
- 21. Haskell नेस्ट खाली सूचियों
- 22. Haskell से F # - F #
- 23. कैसे withFile Haskell
- 24. टर्मिनल चौड़ाई प्राप्त करें Haskell
- 25. गणित पैटर्न कानूनी Haskell हैं?
- 26. Haskell जादुई कोड, यहाँ क्या
- 27. Haskell के लिए GLUT विकल्प?
- 28. Haskell "अमान्य प्रकार हस्ताक्षर त्रुटि"
- 29. Emacs अवर-Haskell-लोड फ़ाइल कॉल के साथ Haskell मोड में लटकी हुई है
- 30. GHC/FFI: बुला Haskell मॉड्यूल जो सी
धन्यवाद आर्थर, आपने इसे स्पष्ट रूप से समझाया है। – jap