2012-01-06 10 views
5

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

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

उत्तर

12

scala कमांड मूल रूप से एक स्क्रिप्ट है जो क्लासपाथ सेट करता है और फिर जावा रनटाइम वातावरण में आपका कोड चलाता है।

scala लिपि में प्रासंगिक लाइन अंत में दिखाई देता:

exec "${JAVACMD:=java}" $JAVA_OPTS -cp "$TOOL_CLASSPATH" -Dscala.home="$SCALA_HOME" -Denv.emacs="$EMACS" scala.tools.nsc.MainGenericRunner "[email protected]" 

मूलतः, यह java शुरू होता है MainGenericRunner चल रहा है। MainGenericRunner फिर जांचता है कि आपने अपने स्कैला कक्षाओं में से किसी एक को चलाने के लिए scala बताया है या नहीं। यदि ऐसा है, तो यह चलना शुरू हो जाता है। अन्यथा, यह इंटरैक्टिव दुभाषिया सितारों को सितारों।

+0

मुझे लगता है कि जब तक मेरे पास एक मिश्रित मोड प्रोजेक्ट है, तो मैं क्लासपाथ में स्कैला जार के साथ "जावा" का उपयोग करने के लिए चिपक जाऊंगा। धन्यवाद। –

4

स्कैला (लिनक्स पर, वैसे भी) एक स्क्रिप्ट है। सामग्री more ` which scala `

आप ज्यादातर ठीक कह रहे हैं टाइप करके देखा जा सकता है, यह मूल रूप से एक वातावरण सेट करता है और उसके बाद जावा चलाता है।

+0

यह वास्तव में थोड़ा उलझन में है, 'जावा' को ठीक से 'jvm' कहा जाना चाहिए क्योंकि यह जावा बाइट कोड में संकलित कोई भी कोड चलाएगा, चाहे वह भाषा से कोई फर्क नहीं पड़ता। बातचीत भी सच है: यदि 'जावा' कमांड कोड नहीं चलाएगा, तो कोई अन्य प्रोग्राम नहीं है (सिवाय इसके कि इसमें JVM का कस्टम कार्यान्वयन है)। – Ingo

1

हां; आप java से सीधे अपने स्कैला एप्लिकेशन को चलाकर इसकी पुष्टि कर सकते हैं, लेकिन क्लासपाथ पर scala-library.jar के साथ। यह काम करता है - वास्तव में कोई जादूscala निष्पादन योग्य में चल रहा है। इस तरह मैं अपने सभी स्कैला अनुप्रयोगों को चलाता हूं।

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