2010-08-25 6 views
24

मैंने देखा कि ubuntu 10.04 spidermonkey पैकेज को हटा दिया। राइनो ऐसा लगता है कि यह अभी भी वहां है। गैंडो और स्पाइडरमोनकी के बीच अंतर क्या हैं (इसके अलावा वे किस भाषा में लिखे गए हैं)। और उन्होंने spidermonkey क्यों हटा दिया?rhino बनाम spidermonkey

+1

संबंधित उबंटू बग रिपोर्ट पर चर्चा की गई [यहां] (https://bugs.launchpad.net/ubuntu/+source/xulrunner-1.9.2/+bug/536950) – richaux

उत्तर

18

मुझे डर है कि अंतर वह भाषा है जिसे वे लिखे गए हैं, या इसका क्या अर्थ है। लोग सभी प्रकार की चीजें (फ़ायरफ़ॉक्स की तरह) लिखने के लिए सी/सी ++ का उपयोग करते हैं जबकि जावा एप्लिकेशन सर्वर में सबसे अधिक प्रचलित है। http://en.wikipedia.org/wiki/Rhino_%28JavaScript_engine%29 से:

राइनो जावा वर्गों में जावास्क्रिप्ट स्क्रिप्ट बदल देता है। राइनो दोनों संकलित और व्याख्या मोड में काम करता है। इसका उपयोग सर्वर-साइड अनुप्रयोगों में किया जाना है, इसलिए ब्राउज़र ऑब्जेक्ट्स के लिए कोई अंतर्निहित समर्थन नहीं है जो आमतौर पर जावास्क्रिप्ट के साथ जुड़े हुए हैं।

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

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

इसके विपरीत स्पाइडरमोन्की LUA की तरह अधिक है। यह एक पटकथा भाषा है। क्या फर्क पड़ता है? खैर, मुझे संदेह है कि आप सीधे एक के लिए printf तक पहुंच प्राप्त कर सकते हैं। सीधे जावा कक्षाओं तक पहुंचने में सक्षम होने के बजाय, आपको सीधे सी/सी ++ कक्षाओं तक पहुंच नहीं मिलती है। इसके बजाय, आप भाषा की अतिरिक्त विशेषताओं के कार्यक्रम के लिए सी/सी ++ का उपयोग करते हैं।

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

+1

धन्यवाद - दिलचस्प और सहायक। लेकिन उबंटू में अक्सर एक विशेष समस्या का समाधान करने के लिए एक से अधिक पैकेज होते हैं। इसलिए प्रश्न बना रहता है: "उन्होंने स्पाइडरमोनकी क्यों हटा दी"? – nealmcb

+1

@nealmcb मैं ईमानदारी से यकीन नहीं कर रहा हूँ। शायद उबंटू के लिए पैकेज बनाए रखने वाले ने ऐसा करना बंद कर दिया और उन्होंने इसे छोड़ दिया? मेरा मानना ​​है कि "मुख्य" में होने की आवश्यकता पर्याप्त नियमित रखरखाव और अपस्ट्रीम ट्रैकिंग आदि है। यह कुछ समय बाद मैंने लिखा है, और चूंकि मैंने उबंटू का उपयोग किया है, लेकिन जब मैंने किया, तो मुझे याद है कि कई पैकेज हैं रखरखाव के मुद्दों के कारण "मुख्य" से "ब्रह्मांड" में गिरा दिया गया। मुझे संदेह है कि पीपीए के उदय को देखते हुए, यदि आप चाहें तो शायद स्पाइडरमोन्की पकड़ लें। –

-1

उन भाषाओं के आधार पर जिन्हें विकसित किया गया है, डेवलपर को स्पिडर्मोनकी का उपयोग करके स्मृति को स्पष्ट रूप से संभालने की आवश्यकता है। जैसा कि जावा में गैंडो विकसित किया गया है जिसमें स्वचालित कचरा संग्रह शामिल है और जावा 1.6 संस्करण से सी या सी ++ की तुलना में जेवीएम की [जावा वर्चुअल मशीन] को तेज निष्पादन के लिए ट्यून किया गया है।

+2

-1 झूठी कथन के लिए: "डेवलपर को स्पष्ट रूप से संभालने की आवश्यकता है spidermonkey का उपयोग कर स्मृति "। जावास्क्रिप्ट एक कचरा-एकत्रित भाषा है, भले ही इसमें किस भाषा को लागू किया गया हो। स्पिडर्मोन्की खोल में विशेष रूप से निम्नलिखित कार्य को वैश्विक वस्तु पर उजागर किया गया है: gczeal (स्तर) - "कचरा कलेक्टर कितना उत्साही होना चाहिए"। तो स्पष्ट रूप से Spidermonkey भी कचरा संग्रह है। साथ ही, कथन पर उद्धरण वांछित है: "जावा 1.6 संस्करण से सी या सी ++ की तुलना में जेवीएम को तेजी से निष्पादन के लिए ट्यून किया गया है"। अधिकांश मामलों में यह सच नहीं है, http://bit.ly/fyyrTX – jbeard4

+0

के अनुसार लिंक प्राप्त होने के बाद अपडेट हो जाएगा .. जानकारी के लिए धन्यवाद –

+0

https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips यह लिंक स्पष्ट रूप से देता है स्मृति को संभालने के लिए कुछ सुझाव! साथ ही, मुझे लगता है कि प्रश्न एपीआई के साथ एकीकृत करने के बारे में था। कृपया java6 -server बनाम C++ –

6

जब से मैं बड़ी कठिनाइयों जावास्क्रिप्ट गोले/दुभाषियों, विशेष रूप से rhino के बारे में बुनियादी उदाहरण खोजने है, Ubuntu पर - मैं इस यहाँ मूल रूप से पोस्ट करेंगे ...

, मैं थोड़ा क्या स्थापित करने के लिए पर उलझन में था, और कॉल करने के लिए किस प्रकार की कमांड लाइन :)

सबसे पहले, मुझे Bug #705339 in rhino (Ubuntu): “Rhino shell crashes with NullPointerException” मिला - और महसूस किया कि ओपनजेडीके वास्तव में rhino.jar जावा संग्रह स्थापित करता है। तो अगर आपको लगता है कि है, तो आप तुरंत बैश टर्मिनल खोल में कर सकते हैं:

$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar 
Rhino 1.7 release 2 2010 11 17 
js> print("answer " + 42.0); 
answer 42 
js> quit() 

 

और यह सब बुनियादी सामान के लिए काफी अच्छा है ...हालांकि, यदि आप DOM window ऑब्जेक्ट का उपयोग करना चाहते हैं, या setTimeout() फ़ंक्शन - अनिवार्य रूप से, वे "ब्राउज़र विशिष्ट कार्यान्वयन" (setTimeout के लिए, SO:7286178) देखें, और ब्राउज़र के बिना एक स्क्रिप्टिंग इंजन उनके बारे में "पता" नहीं होगा ।

 

हालांकि, कम से कम rhino के लिए, कि Envjs 'ब्राउज़र पर्यावरण' पुस्तकालय, जिसका Latest release - 1.2rhino के लिए env.rhino.js है (rhino में setTimeout के लिए SO:6170676 देखें) द्वारा उपचार किया जाता है।

तो हम कुछ इस तरह कर सकते हैं:

wget http://www.envjs.com/dist/env.rhino.1.2.js 
$ java -jar /usr/lib/jvm/java-6-openjdk/jre/lib/rhino.jar 
Rhino 1.7 release 2 2010 11 17 
js> load('env.rhino.1.2.js'); 
js: "env.rhino.1.2.js", line 1247: uncaught JavaScript runtime exception: TypeError: Cannot call property getCurrentContext in object [JavaPackage org.mozilla.javascript.Context]. It is not a function, it is "object". 
    at env.rhino.1.2.js:1247 
    at <stdin>:2 

js> ^C 

... और ओह - यह :) काम नहीं करता है हालांकि, उस Can't run 1.2 due to getCurrentContext error. - Env.js | Google Groups में स्पष्ट किया जाता है:

क्षमा करें, Envjs कर सकते हैं जावा के साथ बंडल राइनो के साथ भाग नहीं है। आप यहां से 1.7rc2 उपलब्ध का उपयोग करना होगा:

http://www.mozilla.org/rhino/download.html

शुक्र है, बजाय उबंटू में स्रोत से निर्माण, की हम सीधे कर सकते हैं:

sudo apt-get install rhino 

... के बाद से rhino filelist राज्यों के रूप में, यह पैकेज js-1.7R2.jar स्थापित करता है। पैकेज भी एक स्क्रिप्ट rhino है, जो अनिवार्य इन जावा संग्रह के लिए एक खोल आवरण है स्थापित करता है (less $(which rhino) देखें) - तो हम आसानी से उपयोग कर सकते हैं, बजाय java -jar ... लिख-लिख कर आदि:

$ rhino 
Rhino 1.7 release 2 2010 11 17 
js> load('env.rhino.1.2.js'); // takes a while to load 
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ] 
js> print("loaded " + 1.2); 
loaded 1.2 
js> window; 
[Window] 
js> ^C 

 

हालांकि, अब एक स्क्रिप्ट के रूप में इन उसी तर्ज सहित कोशिश, चलो यह test.js कॉल:

load('env.rhino.1.2.js'); // takes a while to load 
print("loaded " + 1.2); 
print(window); 

और उस पर rhino बुला की कोशिश:

$ rhino test.js 
loaded 1.2 
js: uncaught JavaScript runtime exception: ReferenceError: "window" is not defined. 

 

ओह प्रिय - फिर से विफल रहता है, अब क्या? :) खैर, शुक्र है, यहां तक ​​कि यह कुछ हद तक पर में Envjs Guide संकेत दिया है (ध्यान दें: उस पृष्ठ के लिए जावास्क्रिप्ट की अनुमति है, अन्यथा कोड मुश्किल से दिखाई जाएगी) - विशेष रूप से:

# रनिंग env.rhino। जेएस एक स्क्रिप्ट या कमांड लाइन
# ऑप्टिमाइज़ेशन सेटिंग
जावा -jar lib/js.jar -opt -1 myscript पर ध्यान दें।js

सही - तो अंत में, हम तो बस इस अनुकूलन सेटिंग जोड़ने के लिए, और:

$ rhino -opt -1 test.js 
[ Envjs/1.6 (Rhino; U; Linux i386 2.6.38-11-generic; en-US; rv:1.7.0.rc2) Resig/20070309 PilotFish/1.2.13 ] 
loaded 1.2 
[Window] 

... अंत में यह काम करता है :) संपादित करें: env.rhino.1.2.js साथ, आप भी console.log() का उपयोग stdout में लिखने के लिए कर सकते हैं । संपादित करें: rhino जावा डिबगर चलाने के लिए, less $(which rhino) का उपयोग करके देख जहां विशेष .jars स्थापित कर रहे हैं, और फिर java सीधे कॉल करने के लिए (rhino स्क्रिप्ट कमांड लाइन स्विच का एक अलग सेट का उपयोग करता है, और इसलिए डिबगर कॉल करने के लिए राजी नहीं किया जा सकता है) :

java -cp /usr/share/java/js.jar org.mozilla.javascript.tools.debugger.Main test.js 

 

आप spidermonkey साथ अब एक ही स्क्रिप्ट चलाने के लिए प्रयास करते हैं (Best way to get spidermonkey js on Ubuntu 11.04? में भी पीपीए निर्देश देखें), आप मिल जाएगा:

$ js test.js 
env.rhino.1.2.js:1247: ReferenceError: Packages is not defined 

... यानी spidermonkeyenv.rhino.1.2.js के साथ काम करेगा।

 

ठीक है, उम्मीद है कि इस मदद करता है किसी को,
चीयर्स!

+0

आपने मेरा दिन बनाया, धन्यवाद! – Rafa

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