2013-04-08 5 views
5

पर स्कैला को मैप किए जाने के लिए अच्छा संदर्भ है क्या स्कैला कंपाइलर बाइटकोड में विभिन्न स्कैला सुविधाओं को कैसे मानचित्र करता है?जेवीएम बाइटकोड

एक त्वरित गूगल डेविड पोलाक की 2009 बात

https://github.com/dpp/jvm_summit_2009/blob/master/scala_fancy_pants.pdf

से समर्थन सामग्री कर दिया लेकिन मैं यह दोनों दिनांकित और अधूरा हो सकता है संदेह है।

मैं स्केलप जालप के माध्यम से इस डेटा को अपने आप को आजमाकर इकट्ठा कर सकता हूं, लेकिन किसी भी व्यक्ति के प्रयास और अंतर्दृष्टि से लाभ उठाना अच्छा होगा।

+0

यह शायद संस्करण के लिए संस्करण से बदल जाता है। क्या आपने कंपाइलर स्रोत को देखने का प्रयास किया है? आप कुछ कक्षाओं को संकलित भी कर सकते हैं और फिर उन्हें अलग कर सकते हैं। – Antimony

+0

मैं स्रोत ब्राउज़ और कोशिश कर सकता हूं और समझ सकता हूं, स्कैला का एक गुच्छा अलग कर सकता हूं या स्कैला आंतरिक मेलिंग सूची के कुछ साल के लायक पढ़ सकता हूं लेकिन मैं उम्मीद कर रहा था कि वह सब कुछ कम करने के लिए कुछ ढूंढ रहा हो। मैं आलसी हूँ। – henry

+0

@ एंटीमोनी मुझे लगता है कि आप सही हैं कि यह संस्करण से संस्करण में बदल जाता है। मुझे 2.10.1 में सबसे ज्यादा दिलचस्पी है - लेकिन जावा 1.7 जेवीएम सुविधाओं का उपयोग करने के लिए आने वाले बदलाव भी ब्याज के हैं। – henry

उत्तर

1

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

यदि आप सब्लिमे का उपयोग कर रहे हैं, तो वहां एक यह plugin for viewing the bytecode

5

स्कैला आरईपीएल पर, उत्पन्न बाइटकोड देखने के लिए :javap -c का उपयोग करें।

उदाहरण के लिए:

scala> class Bytes { def a = println("hello") } 
defined class Bytes 

scala> :javap -c Bytes 
Compiled from "<console>" 
public class Bytes extends java.lang.Object{ 
public void a(); 
    Code: 
    0: getstatic #13; //Field scala/Predef$.MODULE$:Lscala/Predef$; 
    3: ldC#15; //String hello 
    5: invokevirtual #19; //Method scala/Predef$.println:(Ljava/lang/Object;)V 
    8: return 

public Bytes(); 
    Code: 
    0: aload_0 
    1: invokespecial #24; //Method java/lang/Object."<init>":()V 
    4: return 

} 
+0

धन्यवाद, मुझे पता है कि मैं यह कर सकता हूं, लेकिन जो कुछ मैं ढूंढ रहा हूं वह स्वयं को करने के बजाए कोई एल्स विश्लेषण है। – henry

+1

जावा 1.7 के साथ अभी तक काम नहीं करता है –

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