क्या मैं कभी भी अपनी पसंद की भाषा में क्लाइंट-साइड ब्राउज़र कोड को कोड कर सकता हूं? [बन्द है]


15

मैं पूरी तरह से ईमानदार रहूंगा: मुझे जावास्क्रिप्ट में क्लाइंट साइड कोड लिखने से नफरत है। मैं इस भाषा का प्रशंसक नहीं हूं, कम से कम कहने के लिए।

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

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


जवाबों:


11

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

वहाँ भी एक बहुत ही महत्वाकांक्षी लग रही परियोजना है जिसका नाम है एक्सईएक्स जिसका उद्देश्य एक ही भाषा के साथ विकास प्लेटफार्मों की एक पूरी मेजबानी को एकजुट करना है।

मेरा मानना ​​है कि आप जावास्क्रिप्ट को नापसंद करने में अकेले नहीं हैं, लेकिन मुझे डर है कि यह जल्द ही कहीं भी नहीं जा रहा है - वास्तव में यह बहुत गति प्राप्त कर रहा है कि विंडोज 8 एचटीएमएल 5 / जेएस ऐप आदि के साथ क्या है .. लेकिन विकल्प जैसे मैं। उल्लेख वसंत शुरू कर रहे हैं :)


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

3
@ टिमी, सीआईएल बहुत अधिक वजनदार है और इसमें नौकरशाही की बहुत अधिक संख्या है। यह एक समर्पित वर्ग के साथ एक पूर्ण, फूला हुआ बाइटकोड फ़ाइल संलग्न करने के लिए कोई मतलब नहीं होगा और प्रत्येक onSomethingघटना हैंडलर के लिए सभी विशालकाय मेटाडाटा - एक साधारण स्क्रिप्टिंग भाषा के 10-20 पात्रों की पार्सिंग और व्याख्या करना बहुत अधिक कुशल है।
एसके-लॉजिक

1
@ एसके-तर्क: आपको लगता है कि CIL की पूरी तरह से गलत तस्वीर है, और सामान्य रूप से बायटेकोड की। मुझे नहीं पता कि आपको क्या लगता है कि जावास्क्रिप्ट जैसे उच्च-स्तरीय सिंटैक्स की तुलना में बाइनरी मेटाडेटा "भारी" है। सबसे बढ़कर, मुझे इस बात का कोई अंदाजा नहीं है कि क्यों "प्रत्येक और हर संभव घटना हैंडलर"। सी # कार्यक्रम स्पष्ट रूप से हर घटना हैंडलर के लिए कई विधानसभाओं में संकलित नहीं करते हैं।
टिम्वाई

1
@ टिमवी, मैं नाश्ते के लिए ईसीएमए -३३५ खा रहा हूं, इसलिए मुझे अच्छी तरह से पता है कि सीआईएल कितना भारी है। DOM नोड्स अक्सर गतिशील रूप से उत्पन्न होते हैं। CIL में मौजूदा मॉड्यूल में कुछ जोड़ने का कोई तरीका नहीं है - आपको एक नए मॉड्यूल को परिभाषित करना होगा। और आप एक वर्ग में नहीं जोड़ सकते हैं - आपको एक नया वर्ग (भारी मेटाडेटा संलग्न) के साथ परिभाषित करना होगा। और सिर्फ पढ़ने की लागत की तुलना करें, JITing और CIL को पार्स करने, निष्पादित करने और तुरंत एक छोटे पाठ स्ट्रिंग को छोड़ने की तुलना करें। ऐसे कई मामले हैं जहां एक तदर्थ व्याख्या किसी भी तरह के संकलन की तुलना में बहुत अधिक कुशल है।
तर्क

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

5

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


5

अनिवार्य रूप से, नहीं। तुम बहुत जावास्क्रिप्ट के साथ फंस रहे हैं।

यह कहते हुए कि, अतीत में अन्य भाषाओं को लाने की कोशिशें हुई हैं (जावा एप्लेट्स, वैबस्क्रिप्ट, इत्यादि) इनमें से प्रत्येक ने वास्तव में कभी यह कर्त्तव्य नहीं प्राप्त किया है कि जावास्क्रिप्ट में क्योंकि जावास्क्रिप्ट एकीकृत है

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

लेकिन अब हमने केवल जावास्क्रिप्ट का वर्णन किया है।

तो अंत में, आपकी पसंद हैं:

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

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


2
एक अन्य विकल्प एक ऐसी भाषा का उपयोग करना होगा जो जावास्क्रिप्ट को संकलित करता है और इसका उपयोग करता है।
जेटी

@Jetti आप के बारे में सोच रहे हैं CoffeeScript ? यह आदर्श वाक्य है - यह "गोल्डन रूल" है क्योंकि वे इसे कहते हैं - "यह सिर्फ जावास्क्रिप्ट है" । लेकिन अगर आप कुछ ऐसा लिख ​​रहे हैं जो अनिवार्य रूप से जावास्क्रिप्ट है, तो क्या आप वास्तव में जावास्क्रिप्ट नहीं लिख रहे हैं? यह तर्क देने जैसा है कि jQuery जावास्क्रिप्ट नहीं है क्योंकि यह क्लीनर और उपयोग करने में आसान है।
रिचर्ड


@ जेटी शायद वे ठीक काम करेंगे। लेकिन क्रॉस-ब्राउज़र समर्थन की विचित्रता के साथ, मैं उन लोगों में से किसी की सिफारिश करने और वास्तविक उत्पन्न जनश्रुति को सत्यापित नहीं करने के बारे में घबराऊंगा।
रिचर्ड

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

4

वास्तव में, आप जावास्क्रिप्ट से नफरत नहीं कर रहे हैं, जैसा कि एक्मा मानकों में वर्णित है, लेकिन आप विभिन्न ब्राउज़रों में भयानक कार्यान्वयन से नफरत कर रहे हैं , वे quirks, बग और wtfs के साथ। सर्वर-साइड जावास्क्रिप्ट वास्तव में काफी सुखद है। साथ ही DOM मॉडल क्लाइंट-साइड जावास्क्रिप्ट के 80% दर्द का कारण है।

यदि आप अभी भी किसी अन्य भाषा का उपयोग करना चाहते हैं, तो आप GWT का उपयोग कर सकते हैं , जो मूल रूप से आपको जावा लिखने देता है, फिर इसे (बदसूरत) जावास्क्रिप्ट, या कॉफ़ीस्क्रिप्ट में संकलित करें, जो JS के ऊपर एक वाक्यगत चीनी है, जो JS में संकलित करता है।


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

1
@ टिमवी, यह फंक्शन आधारित है और आप चाहें तो ओओ कोड लिख सकते हैं। स्टेटिक टाइपिंग अच्छी है, लेकिन यदि आपका कोड अच्छी तरह से लिखा गया है (छोटे कार्य, उचित स्कूपिंग), तो यह शायद ही कोई मुद्दा है। अर्धविराम सम्मिलन के लिए, मुझे लगता है कि हल्का झुंझलाहट होना। यह केवल एक बार मेरे लिए थोड़ा सा है, क्योंकि मुझे {अलग-अलग लाइनों पर किसी वस्तु की वापसी और खोलना था । क्या आपको लगता है कि "आधुनिक कार्यक्षमता का ढांचा" गायब है?
CaffGeek

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

2
@ टिमी: आप ओब्जेक्ट-ओरिएंटेड को एक बुरी चीज के रूप में नहीं देख रहे हैं, जबकि यह हमेशा मामला नहीं है। कृपया ओओपी को विकास प्रतिमानों की चांदी की गोली के रूप में न देखें। जेएस या स्काला जैसे कार्यात्मक दृष्टिकोण भी महान हैं। जेएस में आपके पास ओओपी हो सकता है, लेकिन मुख्य अंतर यह है कि क्लास-आधारित-प्रोग्रामिंग के बजाय यह प्रोटोटाइप-आधारित प्रोग्रामिंग है। OOP एक व्यापक नाम है, और Java / C # तक सीमित नहीं है। प्रोटोटाइप आधारित वर्ग-आधारित से अलग है, और अच्छी तरह से उपयोग किया जाता है, यह कक्षा-आधारित जितना शक्तिशाली है।
क्लेमेंट हेर्रमैन

2
@ क्लेमेंटहेरमैन: जावास्क्रिप्ट क्लाइंट-साइड तक सीमित नहीं है, लेकिन यह चर्चा क्लाइंट-साइड के बारे में है। जावास्क्रिप्ट है प्रोटोटाइप आधारित करने के लिए है, जो एक नकारात्मक पक्ष यह है आईएल की तुलना में जो आप काफी किसी भी भाषा जो भी का उपयोग करते हैं होता है सीमित।
टिम्मिनी

2

यह सवाल समय-समय पर उठता रहता है।

हमारे पास केवल जावास्क्रिप्ट के बजाय स्क्रिप्ट टैग में अन्य भाषाएं क्यों नहीं हैं

दिन में वापस IE ने जावास्क्रिप्ट के विकल्प के रूप में VB पेश किया। मुझे लगता है कि आप पहले से ही देख सकते हैं कि यह कैसे मानकों को आगे बढ़ाएगा अगर इसे पकड़ा जाए ...

तो फिर एक सामान्य मानक मध्यवर्ती भाषा क्यों नहीं?

ब्रेंडन ईच का एक पुराना पॉडकास्ट है जिसमें बताया गया है कि वह निकट भविष्य में इंटरमीडिएट बायोटेक भाषा क्यों नहीं देखता है:

http://www.aminutewithbrendan.com/pages/20101122

http://news.ycombinator.com/item?id=1893686

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

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


लेकिन यह तर्क जावास्क्रिप्ट पर भी उतना ही लागू होता है जितना कि जेवीएम और सीआईएल पर लागू होता है, है न? :) केवल जावास्क्रिप्ट के लिए जा रहा है कि यह पहले से ही सभी ब्राउज़रों द्वारा समर्थित है।
रोमन स्टार्कोव

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

1

हाँ। आप पहले से ही डार्ट, कॉफ़ीस्क्रिप्ट और जावा को जावास्क्रिप्ट में संकलित कर सकते हैं। आपके पास Emscripten है, जो Javascript bytecode (और LLVM काफी कुछ भाषाओं को संभालती है, मुझे विश्वास है) उत्पन्न करने के लिए LLVM के लिए एक कंपाइलर बैकेंड है।

लेकिन जेएस को संकलित करने के अलावा, कम समय सीमा में नहीं। IE6 10 साल पुराना है और अभी भी किक कर रहा है। मुझे आशा है कि वर्तमान ब्राउज़र (जो अन्य भाषाओं का समर्थन नहीं करते हैं) इतने लंबे समय तक जीवित नहीं रहेंगे, लेकिन वे कुछ वर्षों के लिए आस-पास रहेंगे, जिससे "हम अभी भी जावास्क्रिप्ट का समर्थन करने वाले ब्राउज़र का समर्थन करते हैं" इसलिए हमें जावास्क्रिप्ट का उपयोग करना होगा ", सीएसएस 3 कहने की तुलना में बहुत कठिन तरीके से - आपकी साइट CSS3 के बिना काम कर सकती है, लेकिन इसे क्लाइंट-साइड स्क्रिप्टिंग के बिना काम करने की कोशिश करें।


0

तुम सिर्फ भाग्य में हो सकता है। यह वेबकिट-देव फोरम पर सबमिशन का शुरुआती पैराग्राफ है:

कई भाषाएँ आज वेब पर चलने के लिए जावास्क्रिप्ट को संकलित करती हैं। विकल्प के रूप में, हम जावास्क्रिप्ट के साथ वेब पेजों में चलने के लिए WebKit में विभिन्न भाषा रनटम्स को सक्षम करने के साथ प्रयोग कर रहे हैं ...

बाकी संदेश आप यहां देख सकते हैं


0

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

यदि आप लिस्प कोडिंग में हैं, तो क्लोजुरस्क्रिप्ट एक दिलचस्प परियोजना है।

तो यह कोई बात नहीं है, रहने के लिए जावास्क्रिप्ट यहाँ है। (शायद वेब का COBOL?)।


0

"किसी भी ग्राहक के पास कार को किसी भी रंग में रंगा जा सकता है जिसे वह इतना लंबा चाहता है जितना काला हो।" -- हेनरी फोर्ड

पहले से ही कई संकलनकर्ता हैं जो जावास्क्रिप्ट को लक्षित करते हैं, और आप जावास्क्रिप्ट को संकलित करने वाली किसी भी भाषा को चुन सकते हैं ।

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

अगर आपको जावास्क्रिप्ट से नफरत है, तो मेरा सुझाव है कि आप एंबेडेड, साइंटिफिक या गेम डेवलपमेंट स्पेस में कदम रखें, जहाँ C, फोरट्रान और C ++ रोस्ट को नियमबद्ध करते हैं। व्यापार एप्लिकेशन की लाइन बहुत अधिक वेब पर जा रही है, और इसका मतलब है कि अधिक जावास्क्रिप्ट, कम नहीं।

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