वेबसाइटों के लिए गतिशील बनाम वैधानिक रूप से टाइप की गई भाषाएँ [बंद]


13

यह कथन बताता है कि वैधानिक रूप से टाइप की गई भाषाएँ वेब साइटों के लिए आदर्श नहीं हैं:

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

स्रोत: http://www.infoq.com/interviews/kallen-scala-twitter

क्या ये सही है? क्यों या क्यों नहीं?


6
मुझे लगता है कि वे एक उचित वस्तु पदानुक्रम के साथ एक भाषा / पैकेज पर विचार नहीं किया। यह जाँचने की आवश्यकता नहीं है कि आप जिस नियंत्रण को चला रहे हैं वह एक ऐसा Buttonसमय है WebControlजिसमें आपकी ज़रूरत की सभी जानकारी होती है और सभी नियंत्रण इससे प्राप्त होते हैं।
पढ़ें

5
यूप @ मैथ्यू - ऐसा लगता है जो वास्तव में बहुरूपता
निकोल

8
इसके अलावा - ट्विटर लोकप्रिय हो सकता है, लेकिन ऐसा नहीं है क्योंकि उनकी साइट एक इंजीनियरिंग कृति है।
निकोल

जवाबों:


39

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

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

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


1
संरचनात्मक उपप्रकार और बीजीय डेटा प्रकारों के रूप में पहले क्रम के कार्य एक ही श्रेणी में कैसे आते हैं? आप इसे ऐसे बनाते हैं जैसे गतिशील भाषाओं में पहले क्रम के कार्य नहीं होते हैं, जो स्पष्ट रूप से सत्य नहीं है (स्कीम, कॉमन लिस्प, एर्लांग, स्मॉलटाक, ...)।
फ्रैंक शीयर

21
+1 के लिए "ऐसा लगता है जैसे कि यह आदमी नहीं जानता है कि बतख टाइपिंग की तुलना में अन्य तरीकों से बहुरूपता को प्राप्त किया जा सकता है।"
निकोल

1
@ फ्रेंक शीयर: मेरा क्या मतलब है, कि वे उसी प्रकार की सुरक्षा के साथ समर्थित हैं जैसे कि कोई अन्य मूल्य। फ़ंक्शन मानों का समर्थन करने वाली कड़ाई से टाइप की गई भाषाओं की संख्या है, लेकिन हस्ताक्षर के बीच अंतर नहीं करते हैं।
192

1
मैं भी असहमत हूं, यही वजह है कि मैं इसका जवाब के रूप में चयन कर रहा हूं।
ब्रैडफोर्ड


8

सबसे पहले, ध्यान रखें कि उपरोक्त कथन के लेखक वेबसाइट के विकास के बारे में बात कर रहे हैं। इसलिए वह प्रस्तुति विकास के बारे में चिंतित हैं , और यही वह सोचती है कि स्काला एक अच्छा विकल्प नहीं होगा ...

यह कहने के बाद कि, मुझे वेब विकास के साथ एक अच्छा अनुभव है। मैंने कम से कम 8 वर्षों के लिए विशेष रूप से इसके साथ काम किया है, जिसमें से 5 डिजिटल एजेंसियों में हैं।

और, हां, मेरे अनुभव में प्रस्तुति के स्तर पर एक संकलित , संकलित भाषा एक बड़ी बाधा हो सकती है। सामग्री को लगातार बदलने की जरूरत है, व्यावसायिक आवश्यकताओं की तुलना में अधिक बार। और आमतौर पर यह एक अलग टीम ("फ्रंट-एंड" डेवलपर्स) द्वारा किया जाना चाहिए। वे सामान्यतः HTML, जावास्क्रिप्ट, वेब मानकों, CSS के बारे में बहुत कुछ जानते हैं, लेकिन जावा और C # जैसी सर्वर-साइड भाषाओं के बारे में बहुत कुछ नहीं जानते हैं। वे यह भी मानते हैं कि टेम्पलेट में किसी भी प्रकार का परिवर्तन तत्काल उपलब्ध है; वे संकलन और त्रुटियों को टाइप करने के लिए उपयोग नहीं किए जाते हैं। और वे सही हैं: सांख्यिकीय रूप से टाइप की गई भाषाएं कठिन, जटिल आवश्यकताओं के लिए बहुत अच्छी हैं, जैसे डेटा एक्सेस और व्यावसायिक नियम, लेकिन इंटरफ़ेस के विकास के लिए उतना अच्छा नहीं है।

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

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

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

(और मेरी अंग्रेजी के बारे में खेद है। मुझे बताएं कि अगर कुछ स्पष्ट नहीं है, तो मैं इसे ठीक करने की कोशिश करूंगा।)


1
जब मैं जावा को एक वेब भाषा बनाने की कोशिश करता हूं तो मैं इसे दूसरा - JSP / STRUTS मेस में देखूंगा!
जेम्स एंडरसन

8

मुझे लगता है कि पाठ (और अधिकांश उत्तर) स्टैटिकली टाइप की गई भाषाएं और अत्यधिक वर्बोज़ भाषाएं मिला रहे हैं। बेशक, चौराहा बहुत बड़ा है (विशेषकर केवल सबसे मुख्यधारा की भाषाओं पर विचार करते समय); लेकिन गैर-क्रियात्मक, सांख्यिकीय रूप से टाइप की जाने वाली भाषाओं के कुछ दिलचस्प उदाहरण हैं: गो, हास्केल, स्काला, R…


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

1
बस एक साइड नोट: टाइपस्क्रिप्ट (स्थिर प्रकार की जानकारी के साथ जावास्क्रिप्ट) की तरह कुछ, ओपी के सिद्धांत का परीक्षण करने का एक सीधा तरीका हो सकता है। इसके लिए मेरा कम जोखिम बहुत अच्छा रहा है - एक समय जब कुछ जावास्क्रिप्ट को टाइपस्क्रिप्ट में परिवर्तित करने में, यह वास्तव में मुझे यह पता लगाने में मदद करता था कि एक निश्चित विधि के लिए कोई संभावित तरीका नहीं था, और एक त्रुटि उत्पन्न नहीं करता था
कटाना ३१४

5

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

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


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

@Giorgio दिलचस्प, मैं शायद ही कभी मेरे परीक्षणों में किसी भी प्रकार की जाँच तर्क है।
pllee

@ उत्तोलक: कभी-कभी यह सीधे टाइप-चेकिंग लॉजिक नहीं होता है, लेकिन परीक्षण कुछ व्यवहार की जाँच करते हैं जो एक स्थिर प्रकार की प्रणाली वैसे भी लागू होती।
जियोर्जियो

ब्रूस एकेल सिर्फ एक और व्यक्ति प्रतीत होता है कि उसने वर्षों तक वर्बोस भाषाओं (जावा, सी ++, ...) के साथ काम किया और उसके बाद पहली अलग ट्रेन (पायथन) में कूद गया। वह लेख के आधे हिस्से की प्रशंसा कर रहा है कि पायथन सिंटैक्स कितना महान है। ज्ञान की कमी के कारण इस बहस में उनका कोई योगदान नहीं है।
ziggystar

लेकिन अगर आप एक स्ट्रिंग को एक गतिशील भाषा में एक अंतर चर में संग्रहीत करने का प्रयास करते हैं - तो सुनिश्चित करें कि आप तब तक नोटिस नहीं करेंगे जब तक आप एप्लिकेशन को चलाते / परीक्षण नहीं करते हैं और इसे कार्रवाई में देखते हैं। लेकिन वास्तविक विश्व अभ्यास (विकास के 17 वर्षों में) मैं इसे शायद ही कभी एक बग के मुख्य कारण के रूप में देखता हूं! कभी! लेकिन भले ही यह आईएस है - आप इसे नोटिस करते हैं और आप इसे ठीक करते हैं? क्या बड़ी बात है? यह ऐसा है जैसे कि संपूर्ण तर्क एक बहुत ही तकनीकी दुर्लभ धार मामले पर आधारित है। यह कोई बड़ी समस्या नहीं है! दूसरी ओर, गतिशील टाइपिंग का लाभ विकास है नाटकीय रूप से तेजी से होता है।
मनची

2

मैं इस बात से सहमत हूं कि अधिकांश में, क्योंकि इसका सामना करना पड़ता है, जब आप ग्राहकों के साथ एक वेब-प्लेटफॉर्म पर व्यवहार करते हैं, तो लचीलापन होना आवश्यक है।

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

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


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

2

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


1

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


मुझे लगता है कि यह ध्यान देने योग्य है कि स्काला थोड़ा विशेष है क्योंकि यह टाइप इंफ़ेक्शन का उपयोग करता है और इस प्रकार जावा के समान स्थिर टाइपिंग श्रेणी से संबंधित नहीं है।
विंस्टन इवर्ट

1

व्यावहारिक त्वरित उत्तर: यह वेब आकार के आकार और जटिलता पर निर्भर करता है। छोटी वेबसाइट, डायनेमिक प्रोग्रेस। लैंग।, कॉम्प्लेक्स बड़ी वेबसाइट, स्थैतिक सहारा। लैंग।

विस्तारित उबाऊ उत्तर: कई डेवलपर्स का कहना है कि एक वेबसाइट को एक गतिशील प्रोग्रेस के साथ किया जाना चाहिए। langr। लेकिन सच्चाई यह है कि, अंततः, वेब विकास उपकरण स्थिर टाइप की भाषाओं का उपयोग या अनुकरण करते हैं।

मैंने कई बार PHP के साथ काम किया था, और जल्दी या बाद में, हमें बहुत सारे कोड जोड़ने थे जो दिए गए डेटा के प्रकारों की पुष्टि करता है, जो कि एक स्थिर टाइप किए गए प्रोग्रेस में निहित है। लैंग।

टाइप किया हुआ लगन। IDE (s) के उपयोग में भी मदद करता है, इसके लिए बहुत प्रकार के सत्यापन की आवश्यकता होती है।

(अपने पड़ोसी समर्थक द्वारा लाया गया। & संकलक डिजाइनर ;-))


0

मैं सहमत हूं। जब मैं अधिकांश वेब फ्रंट-एंड C # कोड को देखता हूं, तो स्ट्रिंग्स और डेटा को क्रमबद्ध करने से लेकर स्ट्रिंग्स तक बहुत सी कास्टिंग होती है। मूल रूप से, एक प्रोटोकॉल के रूप में HTTP गतिशील भाषाओं के लिए एक अच्छा फिट है।

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