2010-06-01 5 views
23

अधिकांश लिस्प और योजनाएं गतिशील रूप से टाइप कैसे की जाती हैं? क्या स्थिर टाइपिंग उनकी कुछ सामान्य विशेषताओं के साथ मिश्रण नहीं करती है?अधिकांश एस-अभिव्यक्ति भाषाएं गतिशील रूप से टाइप क्यों की जाती हैं?

उत्तर

15

टाइपिंग और एस-एक्सप्रेशन एक साथ काम करने के लिए किए जा सकते हैं, typed scheme देखें।

आंशिक रूप से यह एक ऐतिहासिक संयोग है कि एस-अभिव्यक्ति भाषाएं गतिशील रूप से टाइप की जाती हैं। ये भाषाएं मैक्रोज़ पर अधिक भारी निर्भर करती हैं, और एस-एक्सप्रेशन पर पार्सिंग और पैटर्न-मिलान की आसानी मैक्रो प्रोसेसिंग को अधिक आसान बनाती है। परिष्कृत मैक्रोज़ पर अधिकतर शोध एस-अभिव्यक्ति भाषाओं में होता है।

Typed Hygienic Macros कठिन हैं।

+3

टाइप की गई योजना स्थाई रूप से टाइप नहीं की गई है, यह प्रकारों को त्रुटि जांच के रूप में प्रदान करती है। स्टेटिक टाइपिंग संकलित करने से इनकार कर रही है जब तक कि संकलक प्रोग्राम को साबित नहीं कर सकता है पूरी तरह से सुरक्षित टाइप किया गया है। टाइप की गई योजना अभी भी रनटाइम प्रकार त्रुटियों का उत्पादन करती है, स्थिर टाइपिंग में यह संभव नहीं है। – Zorf

+2

@ लाजला, हाँ, हालांकि मैंने यह नहीं कहा कि टाइप की गई योजना स्थाई रूप से टाइप की गई थी। –

+6

टाइपेड रैकेट ** ** स्थिर रूप से टाइप किया गया है: टाइपशेकिंग संकलन समय पर होती है। यदि आप टाइप किए गए रैकेट टाइपकेकर को पास नहीं करते हैं, तो यह जारी रखने से इंकार कर देता है। सामान्य संचालन के तहत, टाइपशेकिंग पास होने के बाद, टाइपेड रैकेट ऑप्टिमाइज़ेशन (http://docs.racket-lang.org/ts-reference/Optimization_in_Typed_Racket.html) लागू करेगा जो टाइपशेकिंग से ज्ञात प्रकार की गारंटी के बिना असुरक्षित होगा। – dyoo

13

जब लिस्प का आविष्कार 1 9 58 से 1 9 60 तक हुआ था, तो उसने भाषा और कार्यान्वयन (कचरा संग्रह, एक स्वयं-होस्टिंग कंपाइलर, ...) दोनों के रूप में कई सुविधाएं पेश कीं। कुछ विशेषताओं को विरासत में मिला (कुछ सुधारों के साथ) अन्य भाषाओं (सूची प्रसंस्करण, ...) से। भाषा कार्यों के साथ गणना गणना लागू की। एक भाषा सुविधा की तुलना में एस-एक्सप्रेशन अधिक कार्यान्वयन विस्तार (उस समय) थे। एक प्रकार की प्रणाली भाषा का हिस्सा नहीं थी। एक इंटरेक्टिव तरीके से भाषा का उपयोग करना प्रारंभिक कार्यान्वयन सुविधा भी थी।

कार्यात्मक भाषाओं के लिए उपयोगी प्रकार की प्रणाली का अभी तक आविष्कार नहीं किया गया था। अभी तक आज भी एक इंटरैक्टिव तरीके से स्थाई रूप से टाइप की गई भाषाओं का उपयोग करना अपेक्षाकृत मुश्किल है। स्थाई रूप से टाइप की गई भाषाओं के कई कार्यान्वयन हैं जो कुछ इंटरैक्टिव इंटरफ़ेस भी प्रदान करते हैं - लेकिन अधिकांशतः वे एक विशिष्ट लिस्प प्रणाली के रूप में इंटरैक्टिव उपयोग के समान स्तर की सहायता नहीं देते हैं। एक इंटरैक्टिव लिस्प प्रणाली में प्रोग्रामिंग का मतलब है कि फ्लाई पर कई चीजें बदल दी जा सकती हैं और यदि समस्याएं पूरी तरह से इंटरैक्टिव लिस्प सिस्टम में डेटा और डेटा के माध्यम से प्रचारित की जाती हैं तो यह समस्याग्रस्त हो सकती है। ध्यान दें कि कुछ स्कैमर के पास इन चीजों के बारे में एक अलग विचार है। आर 6 आरएस ज्यादातर आम तौर पर एक बैच भाषा नहीं है जो लिस्प की भावना में बहुत अधिक है ...

कार्यात्मक भाषाओं को बाद में स्थैतिक प्रकार प्रणालियों के साथ आविष्कार किया गया, फिर भी एक गैर-अभिव्यक्ति वाक्यविन्यास मिला - उन्होंने समर्थन नहीं दिया मैक्रोज़ या संबंधित विशेषताएं। बाद में इनमें से कुछ भाषाओं/कार्यान्वयन ने वाक्य रचनात्मक विस्तार के लिए एक प्रीप्रोसेसर का उपयोग किया।

+2

दिलचस्प, आप क्यों कहते हैं कि आर 6 आरएस ज्यादातर बैच भाषा है? –

+5

भाषा के इंटरैक्टिव उपयोग के लिए आर 6 आरएस में वर्णित कोई अर्थशास्त्र नहीं है। उदाहरण के लिए ईवीएएल एक लाइब्रेरी फ़ंक्शन है और पूरी तरह से अंडरस्पेस्फीड है। कार्यान्वयन इसके आसपास काम करने की कोशिश कर सकते हैं, लेकिन ऐसा लगता है कि R6RS के लेखकों को इंटरैक्टिव उपयोग में रूचि नहीं थी। तो उदाहरण के लिए पुस्तकालयों और आरईपीएल के बारे में बात करने की कोई बात नहीं है। आम तौर पर वर्णित भाषा की तकनीकी सीमाओं के अलावा, मैं R6RS मानक की गुणवत्ता से पूरी तरह से अभिभूत हूं। मुझे उम्मीद है कि आर 7 आरएस बेहतर हो जाएगा। –

5

स्टेटिक टाइपिंग शब्दावली है, इसका मतलब है कि किसी भी अभिव्यक्ति का मूल्यांकन किए बिना या किसी भी चीज की गणना किए बिना प्रकार के बारे में सभी जानकारी को स्रोत कोड पढ़ने से अनुमानित किया जा सकता है, सशर्त यहां सबसे महत्वपूर्ण हैं। एक स्थाई रूप से टाइप की गई भाषा को डिज़ाइन किया गया है ताकि यह हो सके, एक बेहतर शब्द 'लेक्सिकली टाइपेड' होगा, जैसा कि एक कंपाइलर अकेले स्रोत को पढ़ने से साबित कर सकता है कि कोई भी प्रकार की त्रुटियां नहीं होती हैं।

लिस्प के मामले में, यह अजीब रूप से अलग है क्योंकि लिस्प का स्रोत कोड स्थिर नहीं है, लिस्प होमो-आइकॉनिक है, यह डेटा को कोड के रूप में उपयोग करता है और कुछ गतिशील रूप से अपने चल रहे स्रोत को संपादित कर सकता है।

लिस्प पहली गतिशील रूप से टाइप की गई भाषा थी, और संभवतः इस कारण से, प्रोग्राम कोड स्वयं लिस्प में अब वर्णक्रमीय नहीं है।

संपादित करें: स्थिर टाइपिंग के मामले में एक बहुत अधिक शक्तिशाली कारण आपको सूचियों को टाइप करना होगा। आप या तो प्रत्येक सूचियों के लिए बेहद जटिल प्रकार हो सकते हैं जो सभी तत्वों के लिए खाते हैं, मांग के अनुसार कि प्रत्येक तत्व का एक ही प्रकार है और इसे इसकी सूची के रूप में टाइप करें। पूर्व विकल्प सूचियों की सूचियों के साथ नरक का उत्पादन करेगा। बाद वाला विकल्प मांग करता है कि स्रोत कोड में केवल प्रत्येक डेटाम के लिए एक ही प्रकार होता है, इसका मतलब है कि आप एक सूची के रूप में अभिव्यक्ति भी नहीं बना सकते हैं, किसी भी तरह से पूर्णांक से भिन्न प्रकार है।

तो मुझे यह कहते हुए हिम्मत है कि यह पूरी तरह से और पूरी तरह से समझने में असमर्थ है।

+2

यह केवल कठिन है, असंभव नहीं है। काउंटर उदाहरणों के लिए मेटाएमएल और मेटाकामल देखें। और निर्भर रूप से टाइप की गई भाषाएं भी ऐसा कर सकती हैं - इडिस में आंशिक मूल्यांकन के साथ प्रयोग देखें। –

+1

किसी को इतना हटाना है कि कोई भी 'एस-अभिव्यक्ति आधारित' के बारे में शायद ही कभी बात कर सके। एस-एक्सप्रेशन का एक केंद्रीय विचार लागू फ़ंक्शन है, जो कोड को गतिशील बनाता है, निश्चित रूप से यह तब असंभव रूप से टाइप त्रुटियों की अनुपस्थिति को साबित करने के लिए असंभव है। मेटाएमएल और मेटाकामल को देखते हुए, मुझे कोई संकेत नहीं दिखता कि वे एस-अभिव्यक्ति आधारित हैं या होमो-आइकॉनिक हैं। – Zorf

संबंधित मुद्दे

 संबंधित मुद्दे