क्या वेबपेजों पर जावास्क्रिप्ट के लिए एक सांख्यिकीय टाइप विकल्प व्यावहारिक होगा?


9

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

मेरा सवाल यह है कि क्या क्लाइंट-साइड वेब पेज वृद्धि आदि के लिए जावास्क्रिप्ट के लिए एक सांख्यिकीय-टाइप विकल्प होना तकनीकी रूप से संभव होगा?


3
क्यों नहीं? `` ``
जोश के

2
क्या आप एक काल्पनिक रूप से टाइप की गई भाषा के बारे में बात कर रहे हैं जिसे हर ब्राउज़र को लागू करना होगा, या पहले से मौजूद व्यावसायिकताएँ?
user281377

2
आप जावा एप्लेट का उपयोग कर सकते हैं, मुझे लगता है।
डेविड थॉर्नले

@ammoQ जिसका आप उल्लेख करते हैं, Hypothetical
आर्मंड

@ जोश मैं नहीं जानता। @ डेविड एलओएल, इसके लिए धन्यवाद!
आर्मंड

जवाबों:


22

निश्चित रूप से कोई तकनीकी कारण नहीं है कि ऐसी कोई चीज़ मौजूद नहीं है। क्लाइंट-साइड कोड के बारे में कुछ भी विशेष नहीं है जो गतिशील रूप से टाइप की गई भाषाओं के उपयोग को अनिवार्य करता है।


1
डार्ट में वैकल्पिक स्थिर टाइपिंग है, लेकिन साधारण जावास्क्रिप्ट के लिए संकलित है। www.dartlang.com
निशांत जॉर्ज अग्रवाल

16

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

उदाहरण के लिए, आपकी स्क्रिप्ट इस तरह दिखती है:

<script type="text/staticjavascript">
   String foobar(int foo, String bar) {
      String result="";
      for (int i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

और प्रीप्रोसेसर यह जाँचता है कि प्रत्येक चर, फ़ंक्शन, ऑब्जेक्ट आदि का उपयोग उसके प्रकार के अनुसार सही ढंग से किया गया है, और स्क्रिप्ट को बदल देता है

<script type="text/javascript">
   function foobar(foo, bar) {
      var result="";
      for (var i=0; i<foo; i++) {
         result += bar;
      }
      return result;
   }
</script>

जिसे हर ब्राउज़र संभाल सकता है।


5
एक व्यावहारिक दृष्टिकोण के लिए +1
गैरी रोवे

वास्तव में यह सवाल व्यावहारिकता के बारे में नहीं है - यह सिद्धांत के बारे में है। अपडेट करूंगी।
आर्मंड

2
मैं यह भी सुझाव दूंगा कि आप किस प्रकार का प्रयोग करें।
ओलिवर वीलर

हेल्पर विधि: बहुत अच्छा सुझाव है, लेकिन मैं अपना उदाहरण अब नहीं बदलता हूं, क्योंकि प्रकार का अनुमान स्थैतिक संस्करण को गतिशील संस्करण के समान बनाता है, क्योंकि उदाहरण इतना सरल है।
user281377

4
मुझे नहीं लगता कि एक सांकेतिक रूप से टाइप की गई जावास्क्रिप्ट वाक्य रचना के अलावा, जावा के बहुत करीब होगी। जावास्क्रिप्ट और जावा में स्थिर बनाम गतिशील टाइपिंग से परे कई अंतर हैं - एक के लिए क्लास-आधारित बनाम प्रोटोटाइप-आधारित OO। चूँकि आपका नमूना कोड वर्ग-आधारित प्रतीत होता है, मैं तर्क देता हूँ कि "staticjavascript" उस भाषा के लिए एक मिथ्या नाम है और इसे "क्लाइंट-साइड जावा" जैसा कुछ कहा जाना चाहिए। जावास्क्रिप्ट के संकलन के लिए +1 हालांकि (Google वेब टूलकिट btw जावास्क्रिप्ट करने के लिए संकलन करता है)।
sepp2k

8

मेरा सवाल यह है कि क्या क्लाइंट-साइड वेब पेज वृद्धि आदि के लिए जावास्क्रिप्ट के लिए एक सांख्यिकीय-टाइप विकल्प होना तकनीकी रूप से संभव होगा?

ज़रूर। गूगल वेब टूलकिट जावास्क्रिप्ट को स्थिर टाइप संकलित जावा ... बस इसे के बारे में सोच: सभी सौंदर्य और जावा का लचीलापन, मशीन द्वारा जेनरेट जावास्क्रिप्ट के सभी प्रदर्शन के साथ!

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


3
मैं पूरी तरह से नहीं बता सकता कि क्या आप GWT के "लाभों" का मजाक उड़ा रहे हैं। यदि आप हैं, ब्रावो। जीडब्ल्यूटी के साथ काम करना मेरे जीवन का सबसे अधिक पागलपन वाला अनुभव था।
निकोल

@ उत्पत्ति: मानो जावास्क्रिप्ट और ब्राउज़र कंपेटिबिलिटी के साथ काम करना पहले से ही पागलपन था? लेकिन इसमें स्लिक फीचर्स होते हैं, जैसे एक ही इमेज में कई इमेज को डाउनलोड करना और फिर उन्हें क्लाइंट पर कट करना।
मैक्नील

1
@Macneil उन्होंने अब तक इसे ठीक कर लिया होगा, लेकिन जब मैं स्प्राइट्स के साथ काम कर रहा था, तो यह लगभग सभी लाभ को नकार दिया गया क्योंकि इसने स्वचालित रूप से अन्य सीएसएस पृष्ठभूमि गुण लिखे थे जो आप नहीं चाहते थे, इसलिए आपको इसे ओवरराइड करने के लिए हर बार अपने सीएसएस को अव्यवस्थित करना पड़ा। ।
निकोल

6

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


2
+1 संभावित कारण की व्याख्या करने के लिए क्यों नहीं , यदि संभव हो तो केवल उत्तर नहीं।

4

यह पहले से मौजूद है।

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

यह मुख्य प्रश्न का उत्तर देता है, और अब जब हमारे पास यह है, तो आपका द्वितीयक प्रश्न "क्या फ़्लैश व्यावहारिक है?" जवाब "हाँ" है, कुछ के साथ "अगर" और "लेकिन" है

  • ... यदि आपको किसी भी कारण से अपना कोड छिपाने की आवश्यकता है।
  • ... यदि आप एक बहुत, बहुत (पिछले jQuery के स्तर) अन्तरक्रियाशीलता के उच्च स्तर चाहते हैं
  • ... लेकिन एचटीएमएल 5 के बिना भी, क्रॉस-ब्राउज़र कॉम्पिटिबिलिटी हाल ही में बहुत बेहतर हो रही है।
  • ... लेकिन HTML5 जल्द ही आ रहा है।
  • ... लेकिन स्थैतिक टाइपिंग / संकलन के बड़े ड्रा में से एक (व्याख्या के विपरीत) यह अतिरिक्त गति है जो इसे अनुकूलन के माध्यम से अनुमति देता है (और फ्लैश में वास्तव में बहुत अच्छी गति नहीं है, टाइप सिस्टम के बावजूद)

AS3 परित्यक्त ES4 पर आधारित है।
gsnedders

3

सिद्धांत रूप में, आप अपने इच्छित पृष्ठ पर किसी भी स्क्रिप्ट को चिपका सकते हैं। <script>टैग एक है typeसब के बाद विशेषता,।

एकमात्र अवरोध को अलग-अलग ब्राउज़रों में कार्यान्वयन के मामले में पर्याप्त बाजार हिस्सेदारी मिल रही है, ताकि इसे उपयोग करने के लायक बनाया जा सके।


तो हाँ, यह इस बिंदु पर संभावना की तरह है।


तो, स्थैतिक टाइपिंग के साथ कोई समस्या तो नहीं? मैं भी इस पकड़ने की व्यावहारिकता के बारे में परेशान नहीं हूँ।
आयुध

1
@ एलिसन: आप किसी भी पाठ्य सामग्री को एक स्क्रिप्ट टैग में रख सकते हैं (एक अपवाद के साथ - इसमें वर्ण अनुक्रम नहीं हो सकता है </script>)। यदि आप वास्तव में चाहते हैं तो आप ब्रेनफ * ck कोड को वहां चिपका सकते हैं। फिर आपको केवल उस ब्राउज़र में अपनी चुनी हुई भाषा के लिए एक दुभाषिया लागू करना होगा जिसे आप उपयोग करना चाहते हैं।
आनन।

@Anon। धन्यवाद, बहुत दिलचस्प। अगर यह इतना आसान है, तो यह शायद कहीं किया गया है। मुझे <script type="vbscript">एक बार से याद है ...
आर्मंड

एलिसन: vbscript IE-only था, और कुछ लोगों ने इसका उपयोग IE के बाजार हिस्सेदारी> 90% होने पर किया था। आज, IE के बाजार में हिस्सेदारी लगभग 50% है, शायद दुनिया के कुछ हिस्सों में कम है, यह एक प्रमुख नो-गो है; और जब तक कोई ब्राउज़र फिर से इतना बाजार साझा नहीं करता, तब तक किसी नए क्लाइंट-साइड स्क्रिप्टिंग भाषा की तरह कुछ भी होने की उम्मीद न करें।
user281377

@Alison: इंटरनेट एक्सप्लोरर अभी भी एक पटकथा भाषा के रूप में VBScript का समर्थन करता है ... मुझे पता होना चाहिए, हम इंट्रानेट साइटों यहाँ हैं जिसे आपने उपयोग यह (और इसलिए की आवश्यकता होती है इंटरनेट एक्सप्लोरर - urgh!)
डीन हार्डिंग

2

क्या यह व्यावहारिक होगा? नहीं।

क्या यह संभव है? हाँ!

जावास्क्रिप्ट के लिए अपने स्वयं के सांख्यिकीय-प्रकार के विकल्प का विकास करना, सबसे अच्छा समय लेने वाला होगा। सबसे खराब रूप से, आप अपनी क्लाइंट स्क्रिप्टिंग भाषा को लागू करने के लिए किसी भी मौजूदा ब्राउज़र को समझाने में सक्षम नहीं होंगे, और आपको अपना खुद का लिखना होगा।


समझाने की परवाह?
बैक

एक अनुवर्ती अनुच्छेद जोड़ा गया।
मार्सी

मैं सिर्फ इतना ही कहना चाहूंगा कि यह व्यावहारिक नहीं हो सकता है, यही वर्तमान स्थिति है। यदि हम जावास्क्रिप्ट जारी होने से ठीक पहले वापस आ गए थे, तो चीजें अलग होंगी।
यकिव


1

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


1

क्या यह तकनीकी रूप से संभव होगा? यदि इसे जावा में लागू किया जाता है, तो मैं महत्वपूर्ण प्रदर्शन हानि के बिना "बहुत, बहुत कठिन, लेकिन संभव" कहूंगा।

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

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

मुझे पता है कि यह एक पुराना सवाल है, मुझे लगा कि मेरा अनुभव किसी के लिए मूल्यवान हो सकता है।


0

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

कई परियोजनाएं हैं जो पहले से ही ऐसा कुछ करती हैं; उदाहरण के लिए, Google वेब टूलकिट , जैसा कि अन्य उत्तरों में से एक में वर्णित है।


0

यह देखते हुए कि नई दुनिया का समर्थन करने के लिए वास्तविक दुनिया में उपयोग किए जाने वाले सभी ब्राउज़र प्राप्त करने में आपको कोई उम्मीद नहीं है; भाषा को jscript को संकलित करना होगा।

जैसा कि वेब के सभी उदाहरण jscript में हैं, भाषा को ज्यादातर jscript की तरह दिखना चाहिए।

मुझे लगता है कि jscript का एक "सब सेट" है जिसमें स्थैतिक चेकर द्वारा जांच की जाती है, लेकिन मान्य jscript भी है। उदाहरण के लिए:

  • सभी चर में एक टिप्पणी होनी चाहिए जो कहती है कि पहले उपयोग से पहले टाइप करें।
  • चर के सभी usages ऊपर के साथ मान्य होना चाहिए।
  • यदि वे किसी टिप्पणी में घोषित नहीं किए गए हैं तो कार्य / वर्ग का उपयोग नहीं किया जा सकता है
  • Js फ़ाइल के शीर्ष पर एक टिप्पणी को अन्य सभी js फ़ाइलों को सूचीबद्ध करना होगा जो इस पर निर्भर करती है।

0

वैकल्पिक स्थिर टाइपिंग ECMAScript के प्रोजेक्ट हार्मनी का हिस्सा था - चाहे वह क्लाइंट-साइड [ब्राउज़र-आधारित] में होगा या नहीं, जावास्क्रिप्ट अज्ञात है, मुझे लगता है। इस विकिपीडिया लिंक देखें: http://en.wikipedia.org/wiki/ECMAScript#Future_development

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