2011-01-24 10 views
8

हमारे पास जटिल निश्चित लंबाई और परिवर्तनीय लंबाई स्ट्रिंग बनाने की आवश्यकता है। ये तार ग्राहक प्रोफाइल, ऑर्डर इत्यादि का प्रतिनिधित्व कर सकते हैं। आप कौन सी जेवीएम आधारित प्रोग्रामिंग भाषा सुझाते हैं?कौन सी भाषा (जो जेवीएम पर चलती है) डीएसएल बनाने के लिए सबसे उपयुक्त है?

आइडिया इस डीएसएल का उपयोग कर स्ट्रिंग बनाने के लिए अंतिम उपयोगकर्ता के लिए है। तो मैं सत्यापन, कोड पूर्णता इत्यादि की तलाश में हूं

+0

यह कितना तेज़ होना चाहिए? आपको इसे बनाने की कितनी जल्दी आवश्यकता है? – EnabrenTane

+0

@EnabrenTane - यह बहुत तेजी से नहीं होना चाहिए –

+0

बहुत तेज़ के बारे में क्या? बहुत तेज़ करेंगे? या केवल सुपर फास्ट? जे/के: पी – hhafez

उत्तर

5

Xtext (http://www.eclipse.org/Xtext/) के साथ आप अपने डीएसएल निर्दिष्ट करते समय मुफ्त में एक अच्छा संपादक प्राप्त करते हैं।

+0

हम अपने मेटा मॉडल और कोड जनरेशन के लिए बड़े पैमाने पर ओएडब्ल्यू हैं। मैंने जो अनुभव किया है, उससे संपादक कमजोर हैं। वे ग्राहक के सामने आवेदन करने के लिए तैयार नहीं हैं। –

+1

@Pangea: ऐसा इसलिए हो सकता है क्योंकि ओएडब्ल्यू दो साल और अधिक बनाए रखा नहीं है। एक्सटेक्स्ट एक पुनर्लेख है, यह पिछले ग्रहण रिलीज ट्रेन (गैलीलियो) में 1.0 तक पहुंच गया। टूल उपयोग के मामले के लिए बिल्कुल सही है - यह सत्यापन और स्वत: पूर्ण, रूपरेखा, हाइपरलिंकिंग, क्विकफिक्सेस, हाइलाइटिंग और बहुत कुछ प्रदान करता है। इनमें से अधिकतर चीजों को सुझाए गए किसी भी भाषा का उपयोग करके आंतरिक डीएसएल के रूप में कभी भी संभव नहीं होगा। इस अद्यतन के लिए –

+0

@ गैब्रियल thx। मैं अब इसमें देख लूंगा। अगर आप मुझे नए Xtext का उपयोग करके बनाए गए डीएसएल के लेखों और उदाहरणों पर इंगित कर सकते हैं तो सराहना करें। –

-2

अपाचे वेग वेग टेम्पलेट इंजन के लिए एक समस्या की तरह लगता है। यह एक जावा लाइब्रेरी है जिसमें एक टेम्पलेटिंग सिंटैक्स या डीएसएल होगा यदि आप करेंगे।

+2

मुझे एक डीएसएल चाहिए। टेम्पलेटिंग इंजन एक विकल्प नहीं है। आइडिया उपयोगकर्ता के लिए इस डीएसएल का उपयोग कर तार बनाने के लिए है। मैंने पहले से ही वेग, स्ट्रिंग टेम्पलेट इत्यादि को देखा है –

+0

तो डीएसएल क्या आंकड़ा है? वेग में एक भाषा है, जो टेक्स्ट सामग्री उत्पन्न करने के लिए विशेष रूप से अच्छी है। यह एक डोमेन विशिष्ट भाषा है। यदि आपके पास विशिष्ट आवश्यकताओं हैं जो टेम्पलेटिंग इंजन और उनकी भाषाओं से नहीं मिलती हैं, तो आप बेहतर ढंग से वर्णन करना चाहेंगे कि ये आवश्यकताएं क्या हैं। –

2

मैं इसके लिए Groovy की अनुशंसा करता हूं।

7

कि JVM पर चलाता है Use a Lisp। कुछ विकल्प आपके पास:

  1. Clojure
  2. JScheme
  3. SISC
  4. ABCL
  5. Bigloo (JVM पर नहीं चलता है, लेकिन अच्छा जावा अंतर है)।

वहाँ a good free book बताते हैं कि लिस्प उपयोग करने के लिए कैसे सॉफ्टवेयर बॉटम-अप, यानी कैसे एक भाषा है कि हाथ में समस्या को हल करने के लिए आदर्श है में लिस्प विकसित करने के लिए डिजाइन करने के लिए है।

Forth परिवार में भाषाएं डीएसएल को परिभाषित करने के लिए भी महान हैं। कुछ JVM पर चलता है कि कर रहे हैं:

  1. Niue
  2. Misty Beach Forth
+0

क्लोजर के साथ बनाए गए डीएसएल की एक सूची यहां दी गई है: http://stackoverflow.com/a/3968289/410652 –

4

स्काला सभी तरह! स्कैला विशेष रूप से आंतरिक डीएसएल के लिए उपयुक्त है (कृपया this देखें)।

6

दो प्रकार के डीएसएल हैं; बाहरी और एम्बेडेड।

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

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

एंबेडेड डीएसएल आमतौर पर बाहरी डीएसएल की तुलना में अधिक आसान होता है क्योंकि आपके पास मेजबान भाषा का पूरा समर्थन होता है, इसलिए मेरी सिफारिश स्कैला को आजमाएगी।

+0

एक विस्तृत पेशेवर और विपक्ष के लिए धन्यवाद, न सिर्फ यह कह रहा है * इसे मेरी भयानक प्यारी जेवीएम भाषा में करें * –

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