2010-07-07 1 views
5

मेरे पास bigloo योजना कार्यात्मक भाषा में लिखा गया एक पार्सर है जिसे मुझे जावा क्लास में संकलित करने की आवश्यकता है। पूरे पार्सर को एक समारोह के रूप में लिखा जाता है। दुर्भाग्य से यह जेवीएम कंपाइलर को "विधि बहुत बड़ी" चेतावनी फेंकने का कारण बन रहा है और बाद में "लोकलवर में दूर लेबल" त्रुटि देता है। क्या कोई संभावित तरीका है जहां मैं इस त्रुटि को बाधित कर सकता हूं? मैंने कहीं DontCompileHugeMethods विकल्प के बारे में पढ़ा है, क्या यह काम करता है? समारोह does not को लग बंटवारे मेरे लिए :(एक व्यवहार्य विकल्प हो करने के लिए !!जावा संकलन में "विधि बहुत बड़ी" त्रुटि को कैसे बाधित करें?

+2

यह पूछने के बजाय कि 'DontCompileHugeMethods' काम करता है, तो आप इसे स्वयं क्यों नहीं देखते? वैसे भी, विशाल विधियां होने का वास्तव में एक बुरा अभ्यास है। केवल समस्या को हल करने के लिए कुछ सहायक कार्यों को बनाने का प्रयास करें, लेकिन अपना कोड अधिक पठनीय और रखरखाव करने के लिए। – pakore

उत्तर

3

वहाँ किसी भी संभव तरीके से जहां मैं इस त्रुटि को नाकाम कर सकते हैं?

खैर, यह संकलक त्रुटि की जड़ है कि बाइटकोड फाइलों के प्रारूप में कठोर सीमाएं हैं। इस मामले में, समस्या यह है कि एक विधि में बाइटकोड के 65536 बाइट्स शामिल हो सकते हैं। (JVM spec देखें)

एकमात्र कामकाज को विभाजित करना है विधि

0

विधि को संबंधित संचालन या विभाजित उपयोगिताओं में अलग से विभाजित करें।

+0

ठीक है, मामला यहां थोड़ा अलग है, विधि में केवल एक समारोह कॉल होता है। अब इस फ़ंक्शन में एक विशाल पैरामीटर सूची है (वास्तव में संपूर्ण पार्सर !!)। तो मुझे कोई संकेत नहीं है कि इसे कैसे विभाजित किया जाए !! – Aditya

+0

आप निश्चित रूप से पैरामीटर की विशाल सूची को अन्य तरीकों से पारित कर सकते हैं, है ना? – Sid

0

खैर, मामला कुछ अलग यहाँ, विधि केवल एक एकल समारोह कॉल के होते है। अब यह फ़ंक्शन में एक विशाल पैरामीटर सूची है ( वास्तव में पूरे पार्सर !!)। तो मैं कोई संकेत नहीं है कि इसे कैसे विभाजित करें !!

रास्ता को विभाजित करने के इस तरह के एक जानवर हो सकता है:

  • अपने मापदंडों के लिए डेटा धारक वस्तुओं को परिभाषित (अपने डेटा मॉडल की सत्तामीमांसा के अनुसार वस्तुओं में मापदंडों के सेट रखे),
  • अपने स्वयं के संदर्भ में उन डेटा धारक वस्तुओं का निर्माण
  • कार्य करने के लिए पैरामीटर वस्तुओं पारित
0

त्वरित और गंदा: निरुपित अल अपने पैरामीटर की शुरुआत में एक ही नाम के वर्ग चर के लिए अपने पैरामीटर (आपको अपने पैरामीटर का नाम बदलना होगा) और अपने फ़ंक्शन को टुकड़ों में चिपकाना शुरू करें और उन टुकड़ों को फ़ंक्शंस में रखें। यह गारंटी देनी चाहिए कि आपका कार्य मूल रूप से उसी अर्थशास्त्र के साथ काम करेगा।

लेकिन, यह सुंदर कोड नहीं लेगा!

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