एक स्क्रिप्टिंग भाषा और एक सामान्य प्रोग्रामिंग भाषा के बीच अंतर क्या है?


20

प्रोग्रामिंग भाषा और एक स्क्रिप्टिंग भाषा के बीच अंतर क्या है? उदाहरण के लिए, सी बनाम पर्ल पर विचार करें।

क्या एकमात्र अंतर यह है कि स्क्रिप्टिंग भाषाओं के लिए केवल दुभाषिया की आवश्यकता होती है और संकलन और लिंकिंग की आवश्यकता नहीं होती है?


4
मुझे डर है कि यह यहाँ अपमानजनक है; आप जो जानना चाहते हैं वह विशुद्ध रूप से भाषा कार्यान्वयन का विषय है। यह उथले / राय के जवाबों को आकर्षित करने के लिए भी प्रतीत होता है (प्रति आपकी गलती नहीं), जो हमेशा एक लाल झंडा होता है।
राफेल

संकलित भाषाओं के लिए हार्डवेयर एक "दुभाषिया" है। एकमात्र अंतर यह है कि आप कितने दुभाषियों से गुजर रहे हैं। यदि मशीन ट्यूरिंग समतुल्य है और आप एक ऐसी भाषा का उपयोग कर रहे हैं, जो ट्यूरिंग समतुल्य है, तो आप Aभाषा में एक संकलित दुभाषिया लिख ​​सकते हैं, फिर भाषा में एक दुभाषिया लिखें, Bजो दुभाषिया Aनिष्पादित कर सकता है, फिर Cभाषा में एक दुभाषिया व्याख्या Bकर सकता है - दुभाषिया निष्पादित कर सकता है , आदि अनिवार्य रूप से, यह सभी अप्रत्यक्ष का मामला है, जो कि कम्प्यूटेशनल के सैद्धांतिक आधार के कारण कम है और व्यावहारिक इंजीनियरिंग चिंताओं के साथ अधिक है।
पैट्रिक87

वेतन (पूर्व-DevOps)
फिल लेलो

जवाबों:


21

मुझे लगता है कि भाषा के इच्छित उपयोग से अंतर बहुत अधिक है।

उदाहरण के लिए, पायथन की व्याख्या की गई है, और प्रोलॉग के रूप में संकलन और लिंकिंग की आवश्यकता नहीं है। मैं इन दोनों को प्रोग्रामिंग लैंगगेज के रूप में वर्गीकृत करूँगा।

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

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

उदाहरण के लिए, बैश अंकगणित को अच्छी तरह से नहीं करता है, जो शायद बड़े पैमाने पर सॉफ्टवेयर को एक बुरे सपने में लिख देगा।

एक तरह के बेंचमार्क के रूप में: मैं कभी भी पर्ल में एक म्यूजिक प्लेयर नहीं लिखूंगा, भले ही मैं शायद कर सकता था। इसी तरह, मैं कभी भी किसी फ़ोल्डर में सभी फ़ाइलों का नाम बदलने के लिए C ++ का उपयोग करने की कोशिश नहीं करूंगा।

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


1
वास्तविक जीवन के उदाहरण के लिए +1: मैं बैच-रीनेम कार्यों को करने के लिए C ++ का उपयोग करने के लिए मजबूर होने की कल्पना नहीं कर सकता!
केसी कुबल

3
आप किसी भी वैचारिक मतभेद के बारे में नहीं बताते हैं, केवल संबंधित उपयोग के मामलों के बारे में लोकप्रिय राय।
राफेल

3
क्या आप स्क्रिप्टिंग भाषा (PHP में FB) में दुनिया के सबसे बड़े सोशल नेटवर्क को "नहीं लिखेंगे", पहली ब्लॉगिंग सेवाओं में से एक जिसने संपूर्ण प्रवृत्ति (LJ in Perl) को बढ़ावा दिया, संस्करण नियंत्रण प्रणाली जो आसानी से हजारों डेवलपर्स को एक साथ काम करने की अनुमति देती है (मर्सिडीज) पायथन में)? क्षमा करें, लेकिन यह "स्क्रिप्टिंग छोटे कार्यों के लिए है" केवल लोकप्रिय buzzwordy बकवास है।
ओलेग वी। वोल्कोव

1
@ राफेल मुझे लगता है कि वैचारिक मतभेद सबसे अच्छे हैं। मुख्य अंतर लोकप्रिय उपयोग में है, आईएमओ। इनमें से अधिकांश भाषाएँ पूरी तरह से ट्यूरिंग होंगी और गणना के समान मॉडल का पालन करेंगी। मैंने कभी भी एक औपचारिक अंतर या परिभाषा नहीं की है, लेकिन यदि आपके पास एक है तो मेरे उत्तर को संपादित करने के लिए स्वतंत्र महसूस करें।
शाम

3
@ राफेल इस बिंदु का हिस्सा है: कोई वैचारिक मतभेद नहीं हैं। आप संकलन पर क्या कर सकते हैं- बनाम रन-टाइम मुख्य रूप से व्याख्या किए गए बनाम संकलित का मामला है, और यह कार्यान्वयन की एक संपत्ति है, न कि भाषा (हालांकि भाषा डिजाइन एक विशेष कार्यान्वयन मॉडल को मुश्किल बना सकता है)।
गिल्स एसओ- बुराई को रोकना '

6

स्क्रिप्टिंग भाषाओं पर क्लासिक लेख जॉन के। ऑस्टरहॉट्स स्क्रिप्टिंग: 21 वीं सदी के लिए उच्च-स्तरीय प्रोग्रामिंग है , जो कंप्यूटर 31 (3), 1998 में प्रकाशित हुआ। उन्होंने एक तरफ स्क्रिप्टिंग भाषाओं, और दूसरी तरफ सिस्टम प्रोग्रामिंग भाषाओं के बीच अंतर किया। अन्य।

Ousterhout ने प्रोग्रामिंग के लिए मशीन भाषाओं को बदलने के लिए विकसित होने के रूप में सिस्टम प्रोग्रामिंग भाषाओं की विशेषता बताई । वे रजिस्टर असाइनमेंट और सबरूटीन कॉलिंग सीक्वेंस जैसे थकाऊ विवरण छिपाते हैं, छोरों और अन्य सामान्य नियंत्रण-प्रवाह मुहावरों को लिखने के लिए सरल निर्माण प्रदान करते हैं, और एक टाइपिंग अनुशासन लागू करते हैं। वे आम तौर पर एक (आगे के समय) संकलक द्वारा कार्यान्वित किए जाते हैं। ये भाषाएं जमीन से सॉफ्टवेयर लिखने के लिए हैं। उदाहरण C, C ++ और Java हैं।

इसके विपरीत, ओस्टरहॉट के अनुसार, स्क्रिप्टिंग भाषाएं, इस आधार से शुरू होती हैं कि वहां पहले से ही उपयोगी कार्यक्रम हैं, जो आमतौर पर सिस्टम प्रोग्रामिंग भाषाओं में लिखे जाते हैं। स्क्रिप्टिंग भाषाएं, जैसे पर्ल, पायथन, टीसीएल, विजुअल बेसिक और यूनिक्स के गोले, इन मौजूदा कार्यक्रमों को नए कार्यक्रमों में शामिल करने के लिए उपकरण प्रदान करते हैं। ऑस्टरहॉट ने स्क्रिप्टिंग भाषाओं को "टाइपलेस" (जिसमें कई कॉल डायनेमिक टाइपिंग भी शामिल है) और तेजी से विकास पर जोर दिया; वे आमतौर पर दुभाषियों द्वारा कार्यान्वित किए जाते हैं।

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

मैं व्यक्तिगत रूप से एक "सामान्य" प्रोग्रामिंग भाषा के अस्तित्व का विवाद करूंगा, जैसा कि आप इसे अपने प्रश्न में वाक्यांश देते हैं। हालाँकि, मुझे लगता है कि आप जिस अवधारणा को व्यक्त करने की कोशिश कर रहे हैं, वह मोटे तौर पर ऑस्टरहॉट की सिस्टम प्रोग्रामिंग भाषाओं से मेल खाती है।


2

सभी स्क्रिप्टिंग लैंग्वेज भी प्रोग्रामिंग लैंग्वेज हैं। इसका उलट सत्य नहीं है। ऐसी भाषाएं जिन्हें "केवल दुभाषिया की आवश्यकता होती है" व्याख्या की गई भाषाएं हैं ( संकलित भाषा के विपरीत - ध्यान दें कि कुछ भाषाएं, जैसे कि जावा, दोनों श्रेणियों में आती हैं)।

स्क्रिप्टिंग भाषा के रूप में वर्गीकृत की जाने वाली भाषा का अर्थ है कि यह "गोंद" भाषा के रूप में उपयोगी है। लिपियों में पूर्ण विशेषताओं वाले कार्यक्रम नहीं होते हैं, बल्कि सॉफ्टवेयर के अन्य टुकड़ों के बीच अंतराल को भरते हैं।

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


आप किसी भी वैचारिक मतभेद के बारे में नहीं बताते हैं, केवल संबंधित उपयोग के मामलों के बारे में लोकप्रिय राय।
राफेल

1

सेट 'स्क्रिप्टिंग लैंग्वेज' सेट 'प्रोग्रामिंग लैंग्वेज' का सबसेट है। C और पर्ल के बीच का अंतर सिस्टम प्रोग्रामिंग लैंग्वेज और एप्लिकेशन लैंग्वेज के बीच और व्याख्या की गई भाषा और संकलित भाषा के बीच का अंतर है।

सिस्टम प्रोग्रामिंग लैंग्वेज निम्न स्तर की हैं और मेमोरी मैनेजमेंट, प्रेडिक्टेबल IO इत्यादि की ओर उन्मुख हैं। अनुप्रयोग भाषाएँ उच्च-स्तरीय समस्याओं के त्वरित समाधान की ओर उन्मुख हैं, जैसे 'फ़ाइल से सेटिंग पढ़ना, ओपन सॉकेट और सेटिंग्स के अनुसार प्रक्रिया अनुरोध'।

इस प्रकार, एप्लिकेशन भाषाएं बहुत उच्च-स्तरीय हो जाती हैं, फिर सिस्टम भाषाएं, यानी बड़ी मात्रा में अंतर्निहित अमूर्त और सहायक सुविधाएं प्रदान करती हैं और अक्सर किसी प्रकार का स्वचालित मेमोरी प्रबंधन जोड़ता है।

संकलित भाषाओं के कार्यक्रमों को कार्यक्रम के निष्पादन से पहले कुछ कोड तक पूरी तरह से संसाधित किया जाता है। स्क्रिप्टिंग भाषाओं को निष्पादन की प्रक्रिया में गतिशील रूप से अनुवादित किया जाता है और अक्सर डायनामिक कोड पीढ़ी के लिए सुविधाएं शामिल होती हैं और स्रोत कोड वाली फाइलें भी शामिल होती हैं।

इस प्रकार, सभी स्क्रिप्टिंग भाषाएं अनुप्रयोग भाषाएं हैं, लेकिन विपरीत सच नहीं है। सिस्टम भाषाओं को हमेशा संकलित किया जाता है, क्योंकि स्क्रिप्टिंग भाषाओं में आमतौर पर विशेषताएं शामिल होती हैं, जो कि भाषा के संदर्भ में ही लागू करने के लिए व्यावहारिक नहीं हैं। ध्यान दें, हालांकि, स्क्रिप्टिंग (व्याख्या की गई) / संकलित अंतर कार्यान्वयन के बारे में अधिक है: कुछ भाषाओं के लिए दोनों प्रकार के कार्यान्वयन मौजूद हो सकते हैं, जैसे कि हैकेल।


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

1

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

"पारिवारिक कार" बनाम "स्पोर्ट्सकार", या "पत्रिका" बनाम "अखबार" की तुलना करें। मैं हिम्मत करता हूं कि प्रत्येक स्पोर्ट्स कार को हर स्पोर्ट्सकार से अलग करने के लिए 100% विश्वसनीय नियम के साथ आना मुश्किल होगा, जो कि सामान्य रूप से उचित है (जिसका अर्थ है कि यह मूल रूप से प्रत्येक श्रेणी में सभी मौजूदा कारों की गणना करने के लिए नहीं है) और कम से कम उद्देश्य (अधिक यह हर किसी के लिए स्वीकार्य होगा)। लेकिन ये शब्द अभी भी व्यवहार में उपयोगी हैं, क्योंकि हालांकि कुछ ऐसे मामले हैं जिन्हें तय करना मुश्किल है, कई कारें स्पष्ट रूप से एक श्रेणी में हैं और दूसरी नहीं।


0

एक अंतर जो मैंने अभी तक नहीं देखा है, वह यह है कि जब इरादा के रूप में उपयोग किया जाता है, तो अधिकांश लिपियों का निष्पादन समय "मैक्रोस्कोपिक" संचालन पर हावी हो जाएगा, और सूक्ष्म संचालन के प्रदर्शन का समग्र निष्पादन समय पर महत्वपूर्ण प्रभाव नहीं होगा। उदाहरण के लिए, यदि किरण-अनुरेखण एनीमेशन कार्यक्रम में "रेंडर इमेज" स्टेटमेंट के साथ एक स्क्रिप्टिंग भाषा शामिल हो सकती है, तो ऐनिमेशन के 240 फ्रेम बनाने के लिए एक स्क्रिप्ट "रेंडर इमेज" स्टेटमेंट में चार घंटे खर्च कर सकती है, और कुल चार सेकंड कर सकती है। बाकि सब कुछ। यहां तक ​​कि अगर कोई एक लाख के कारक द्वारा रेंडरिंग इंजन के बाहर सब कुछ गति करना चाहता था, तो इससे रेंडरिंग इंजन को 0.1% तक गति देने की तुलना में समग्र प्रदर्शन पर कम प्रभाव पड़ेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.