मुझे आश्चर्य है कि स्कैला बाइट कोड कैसे उत्पन्न कर रहा है, क्या यह एएसएम जैसे कुछ पुस्तकालयों का उपयोग करता है? या बस प्रदर्शन के लिए .class फ़ाइलों में बाइनरी लिखें?स्कैला बाइट कोड उत्पन्न कैसे कर रहा है? एएसएम जैसे कुछ पुस्तकालयों का उपयोग करना, या सीधे बाइनरी लिखना?
उत्तर
2.10 स्काला संकलक के साथ शुरू एएसएम 4 का उपयोग करता है बाईटकोड फेंकना, -target समर्थन: JVM-1.5, -target: JVM-1.6, और -target:
-
: बैकएंड के JVM-1,7
- उत्सर्जन स्काला एएसएम http://lamp.epfl.ch/~magarcia/ScalaCompilerCornerReloaded/2012Q2/GenASM.pdf
कार्यान्वयन पहलुओं के बारे में वर्णन किया गया है
बाईटकोड emitter (GenASM, स्रोत नीचे लिंक) एक नियंत्रण फ़्लो ग्राफ़ (CFG) का दौरा एक पिछले चरण द्वारा बनाया के माध्यम से classfiles, और सीधे classfiles फेंकना स्ट्रीमिंग एएसएम API का उपयोग करता:
https://github.com/scala/scala/blob/master/src/compiler/scala/tools/nsc/backend/jvm/GenASM.scala
कैसे चीजें अब काम करते हैं यही कारण है कि। प्रायोगिक संभावनाओं के दायरे में, मैं उत्सर्जित एक प्रयोगात्मक बाइटकोड पर काम कर रहा हूं जो कि तेजी से है, क्योंकि यह सीएफजी का निर्माण छोड़ देता है और सीधे स्कैला सार सिंटेक्स पेड़ का दौरा करता है (फिर स्मृति में क्लासफाइल बनाने के लिए ट्री एएसएम एपीआई का उपयोग करके)। विवरण:
लगता है कि वे कुछ मध्यवर्ती कोड जेनरेट कर रहे हैं, और फिर इसे मैन्युअल रूप से जावा बाईटकोड या .net MSIL में परिवर्तित करने
यहाँ संकलक का अच्छा अवलोकन: https://wiki.scala-lang.org/display/SIW/Overview+of+Compiler+Phases
- 1. क्या जावा ऑब्जेक्ट कोड या बाइट कोड उत्पन्न करता है?
- 2. क्या फोरट्रान सीधे बाइनरी फ़ाइल से बाइट पढ़ सकता है?
- 3. एएसएम कोड का स्पष्टीकरण
- 4. सी ++ का उपयोग कर बाइनरी फाइलें लिखना: डिफ़ॉल्ट लोकेल पदार्थ क्या है?
- 5. स्कैला बाइनरी सीरियलाइजेशन लाइब्रेरी
- 6. jsfiddle का उपयोग करना: मैं underscore.js या backbone.js पुस्तकालयों का उपयोग कैसे कर सकता हूं?
- 7. कोड कवरेज टूल लिखना कैसे शुरू करें?
- 8. कुछ ऑप्टिमाइज़ेशन जैसे -फ्वोल-प्रोग्राम और -फ्रोफाइल-कई साझा पुस्तकालयों के साथ उत्पन्न होने पर
- 9. बाइट कोड उपकरण - मूल या जावा एजेंट को लागू करें?
- 10. बाइट क्या है और बाइनरी के साथ क्या करना है?
- 11. मैं कुछ कोड जारी कर रहा हूं, मुझे किस लाइसेंस का उपयोग करना चाहिए?
- 12. PHP में सुपरग्लोबल्स सीधे अच्छा या बुरा उपयोग कर रहा है?
- 13. विचारों में स्क्रिप्ट पुस्तकालयों का संदर्भ दे रहा है और _Layout.cshtml अनावश्यक उपयोग कर रहा है?
- 14. स्कैला जेनरेट कोड बाइट कोड कैसे अपवाद को छोड़ देता है?
- 15. BufferedReader सीधे बाइट []
- 16. एक 'हैलो, वर्ल्ड!' उत्पन्न करना जावा एएसएम लाइब्रेरी
- 17. क्या हमें सीधे स्कैलासिग्नेचर का उपयोग करना चाहिए?
- 18. लिखते समय jquery का उपयोग कर कुछ दिखा रहा है?
- 19. स्कैला (या जावा) से पायथन कोड का उपयोग करने का सबसे अच्छा तरीका क्या है?
- 20. क्या एन्कोडिंग/कोड पेज cmd.exe का उपयोग कर रहा है?
- 21. मेकफ़ाइल स्रोत कोड और बाइनरी के लिए अलग निर्देशिका का उपयोग कैसे कर सकता है?
- 22. स्कैला पुस्तकालयों और ढांचे
- 23. कुछ x86 एएसएम संदर्भ/ट्यूटोरियल?
- 24. कुछ बाइट
- 25. मैं rspec का उपयोग कर नियंत्रक spec कैसे उत्पन्न करूं?
- 26. स्कैला पुस्तकालयों का स्वचालित प्रदर्शन परीक्षण
- 27. जावा क्लास w/इंस्ट्रुमेंटेशन में कोड जोड़ना: एएसएम या बीसीईएल?
- 28. क्या मुझे ढांचे का उपयोग करना चाहिए या अपना खुद का एमवीसी लिखना चाहिए?
- 29. हम सी या सी ++ कोड में सीधे एड्रेसिंग का उपयोग क्यों नहीं कर सकते?
- 30. सीधे std :: स्ट्रिंग आंतरिक बफर को लिखना
स्कैला 2.10 से पहले क्या? – Freewind
2.10 "GenJVM" का उपयोग करने से पहले था। इसे अब तक EOL'd किया गया है। जेनजेवीएम ने इन-हाउस विकसित एक बाइटकोड-मैनिपुलेशन लाइब्रेरी का उपयोग किया (उदाहरण के लिए जेडीके 6 स्टैक मैप फ्रेम के साथ नहीं रखा गया था) –
मैंने इस सवाल को तारांकित किया, लेकिन केवल आपके उत्तर के कारण। महान जानकारी! – Andy