डी में, अधिकांश भाग के लिए, मेटा-प्रोग्रामिंग सिर्फ प्रोग्रामिंग है। बूस्ट.एमपीएल
जैसी लाइब्रेरी की वास्तव में कोई ज़रूरत नहीं है उदाहरण के लिए, संकलन समय पर संख्याओं की सरणी को सॉर्ट करने के लिए आपको सी ++ में लम्बाई पर जाना होगा। डी में, आप बस कर स्पष्ट बात: का उपयोग std.algorithm.sort
import std.algorithm;
int[] sorted(int[] xs)
{
int[] ys = xs.dup;
sort(ys);
return ys;
}
pragma(msg, sorted([2, 1, 3]));
यह [1, 2, 3]
बाहर प्रिंट संकलन समय पर। नोट: sort
भाषा में नहीं बनाया गया है और संकलन समय पर काम करने के लिए बिल्कुल कोई विशेष कोड नहीं है।
यहां एक और उदाहरण है जो संकलन समय पर फिबोनाची अनुक्रम के लिए एक लुकअप टेबल बनाता है।
int[] fibs(int n)
{
auto fib = recurrence!("a[n-1] + a[n-2]")(1, 1);
int[] ret = new int[n];
copy(fib.take(n), ret);
return ret;
}
immutable int[] fibLUT = fibs(10).assumeUnique();
यहाँ, fibLUT
जरूरत किसी विशेष संकलन समय कोड के बिना संकलन समय पर पूरी तरह से निर्माण किया है, फिर से।
यदि आप प्रकारों के साथ काम करना चाहते हैं, तो std.typetuple
में कुछ प्रकार के मेटा फ़ंक्शंस हैं। उदाहरण के लिए:
static assert(is(Filter!(isUnsigned, int, byte, ubyte, dstring, dchar, uint, ulong) ==
TypeTuple!(ubyte, uint, ulong)));
पुस्तकालय यही कारण है, मुझे विश्वास है, कार्यक्षमता आप फ्यूजन से प्राप्त कर सकते हैं का सबसे शामिल हैं। याद रखें, आपको वास्तव में सी ++ में जितना अधिक करते हैं, उतना ही डी में टेम्पलेट मेटा-प्रोग्रामिंग सामान का उपयोग करने की आवश्यकता नहीं है, क्योंकि अधिकांश भाषा संकलित समय पर उपलब्ध है।
मैं वास्तव में प्रदर्शन पर टिप्पणी नहीं कर सकता क्योंकि मेरे पास दोनों के साथ बड़ा अनुभव नहीं है। हालांकि, मेरा वृत्ति यह होगा कि डी संकलन समय निष्पादन तेज है क्योंकि आपको आम तौर पर कई टेम्पलेट्स को तुरंत चालू करने की आवश्यकता नहीं होती है। बेशक, सी ++ कंपाइलर अधिक परिपक्व हैं, इसलिए मैं यहां गलत हो सकता हूं। एकमात्र तरीका आपको वास्तव में पता चल जाएगा कि यह आपके विशेष उपयोग के मामले की कोशिश कर रहा है।
आपको वास्तव में * टेम्पलेट * मेटाप्रोग्रामिंग की आवश्यकता नहीं है; डी संकलन समय समारोह मूल्यांकन है। – Mehrdad
@Mehrdad सब कुछ के लिए? आप टेम्पलेट पैरामीटर पर find_if या ट्रांसफॉर्म कर सकते हैं? –
सबकुछ के लिए नहीं (अभी भी बग तय किए जा रहे हैं), लेकिन बहुत सी चीजों के लिए। सामान्य जवाब देना मुश्किल है, लेकिन यदि आपके पास कोई विशेष उदाहरण है तो कृपया इसे पोस्ट करें और मैं देखूंगा कि मुझे इसका एक सीटीएफई संस्करण मिल सकता है और आपको दिखाया जा सकता है। – Mehrdad