क्या यह संभव है कार्यों में (declare (type ...))
घोषणाओं का उपयोग करने पर भी प्रकार की जाँच समारोह तर्क पर तेजी से निर्माण करने के लिए करते हैं, क्रम में, लेकिन अभी भी सुरक्षित कोड?का उपयोग करना (घोषित (प्रकार ...)) 'सुरक्षित' कार्यों लेकिन अभी भी है
,
(defun add (x y)
(declare (type fixnum x y))
(the fixnum x y))
जब (add 1 "a")
के रूप में बुलाया अपरिभाषित व्यवहार में परिणाम होगा, तो अधिमानतः मैं
(defun add (x y)
(declare (type fixnum x y))
(check-type x fixnum)
(check-type y fixnum)
(the fixnum x y))
के रूप में यह संशोधन करना चाहते हैं लेकिन मुझे चिंता है कि संकलक करने के लिए अनुमति दी है मान लेते हैं कि check-type
हमेशा से गुजरता है और इस तरह की जांच को छोड़ देते हैं।
तो मेरा सवाल यह है कि उपरोक्त उदाहरण गलत है जैसा कि मैं उम्मीद करता हूं, और दूसरा, क्या कोई सामान्य मुहावरे * अनुकूलित कोड के साथ टाइप-सुरक्षा प्राप्त करने के लिए उपयोग में है?
*) मैं उदाहरण के लिए कल्पना कर सकते हैं, एक अनुकूलित लैम्ब्डा का उपयोग कर और बुला उस प्रकार-जाँच करने के बाद, लेकिन मुझे आश्चर्य है कि यह है कि अगर सबसे खूबसूरत तरीका है।
मुझे आपके द्वारा लाए जाने वाले साधारण मामले को नहीं मिलता है। स्थैतिक रूप से टाइप की गई भाषाएं संकलित समय पर उनके '(पढ़े गए) समकक्ष के प्रकार को कैसे जानती हैं? –
अच्छा, वास्तव में वे नहीं कर सकते हैं। इस अर्थ में आम लिस्प "अधिक गतिशील" है (कोई "अधिक शक्तिशाली" कहता है)। उनमें से कुछ के पास 'रीड' के बराबर नहीं है, जबकि अन्य स्थिर प्रकार की जांच के लाभों को रद्द करते हुए गतिशील प्रकार कास्टिंग का उपयोग कर सकते हैं। – Renzo
मैं आम लिस्प की प्रकार प्रणाली को समझता हूं, लेकिन मुझे चिंता है कि जैसे ही आप कंपाइलर ऑप्टिमाइज़ेशन के साथ शुरू करते हैं, तो अचानक चीजें गतिशील टाइपिंग के शांत क्षेत्र को छोड़ सकती हैं और मशीन भाषा की नीची-किरकिरा दर्ज कर सकती हैं। मेरी चिंता बिल्कुल ठीक है जब व्यवहार आपके बिंदु पर जाता है 3) '(घोषित करें (प्रकार ...))' कि मेरा उदाहरण कोड अपरिभाषित व्यवहार प्रदर्शित कर सकता है। – MicroVirus