2010-09-07 22 views
17

मैं कुछ (डिजाइन की मशीन सीखना) का एक डिजाइन तैयार कर रहा हूं जो अधिमानतः एक कार्यात्मक प्रोग्रामिंग भाषा, और आत्मनिरीक्षण, विशेष रूप से प्रोग्राम के अपने कोड को कुछ अच्छी तरह से चलने योग्य प्रारूप में जांचने की क्षमता, और अधिमानतः रनटाइम पर संकलित मशीन जेनरेट कोड प्राप्त करने की क्षमता भी, और मैं सोच रहा हूं कि इसे लिखने के लिए सबसे अच्छी भाषा क्या है। पाठ्यक्रम के लिस्प में मजबूत आत्मनिरीक्षण क्षमताएं हैं, लेकिन स्थैतिक रूप से टाइप की गई भाषाओं में भी फायदे हैं; जिन पर मैं विचार कर रहा हूं वे हैं:कार्यात्मक प्रोग्रामिंग भाषा आत्मनिरीक्षण

एफ # - नेट प्लेटफार्म की एक अच्छी कहानी है, आप रन टाइम पर बाइट कोड पढ़ सकते हैं और बाइट कोड भी छोड़ सकते हैं और इसे संकलित कर सकते हैं; मुझे लगता है कि एफ # से इन सुविधाओं तक पहुंचने में कोई समस्या नहीं है।

हास्केल, ओकैम - क्या इन्हें बाइट कोड या पार्स पेड़ के माध्यम से समान सुविधाएं हैं?

क्या अन्य भाषाएं भी मुझे देखना चाहिए?

+2

आपको आत्मनिरीक्षण की आवश्यकता क्यों है? –

+1

पढ़ने की तरफ, यह आवश्यक है क्योंकि कल्पना प्रणाली की एक केंद्रीय विशेषता मानव लिखित कोड का विश्लेषण करने की क्षमता है। लेखन पक्ष पर, आवश्यक नहीं लेकिन अच्छा, क्योंकि ऐसे मामलों में जहां मशीन जेनरेट कोड अक्सर चलाया जाता है, इसे संकलित करने से यह तेज़ी से चल जाएगा। – rwallace

+0

अच्छा सवाल, मैं वास्तव में हाल ही में इस बारे में सोच रहा हूं। मेरा दिन का काम सामान्य लिसप है और मैंने आत्मनिरीक्षण का उपयोग करके ग्राफविज़ कॉल ग्राफ़ को स्वचालित रूप से उत्पन्न करने के लिए कुछ चीजें की हैं और मैं सोच रहा हूं कि हैकेल के पास कुछ ऐसा करने के लिए मेरे लिए पर्याप्त शक्तिशाली है या नहीं। – asm

उत्तर

9

हास्केल का आत्मनिरीक्षण तंत्र Template Haskell है, जो संकलन समय मेटाप्रोग्रामिंग का समर्थन करता है, और जब संयुक्त llvm, रनटाइम मेटाप्रोग्रामिंग सुविधाएं प्रदान करता है।

6

वास्तव में कोई जवाब नहीं है, लेकिन homoiconicity सामान के लिए F # Quotations सुविधा और library पर भी ध्यान दें।

2

मैं स्कैला या क्लोजर भी देखता हूं जो जावा के लिए विकसित किए गए सभी पुस्तकालयों के साथ आते हैं। यदि पुस्तकालय मौजूद नहीं है तो आपको चिंता करने की आवश्यकता नहीं होगी। लेकिन आपके प्रश्न के बिंदु पर, ये भाषाएं आपको वही प्रतिबिंब (या अधिक शक्तिशाली प्रकार) देती हैं जिन्हें आप जावा के भीतर पाएंगे।

10

OCaml है:

  • Camlp4 OCaml में OCaml ठोस वाक्य रचना के पेड़ में हेरफेर करने के। Camlp4 का बनाए रखा कार्यान्वयन Camlp5 है।

  • MetaOCaml पूर्ण पैमाने पर बहु-चरण प्रोग्रामिंग के लिए।

  • ओकमलजीत रन टाइम पर देशी कोड उत्पन्न करने के लिए, लेकिन मुझे नहीं लगता कि यह हाल ही में बनाए रखा गया है।

  • Ocaml-Java जावा वर्चुअल मशीन के लिए ओकंपल कोड संकलित करने के लिए। मुझे नहीं पता कि अच्छी प्रतिबिंब क्षमताएं हैं या नहीं।

+0

Camlp4 विकी: http://groups.google.com/group/fa.caml/browse_thread/thread/632bb527a6762d89 – nlucaroni

5

आप Racket की typed variant (पहले PLT योजना के रूप में जाना जाता है) की जाँच कर सकते हैं। यह योजना की अधिकांश वाक्य रचनात्मक सादगी को बरकरार रखता है, लेकिन एक स्थिर प्रकार प्रणाली प्रदान करता है। चूंकि रैकेट एक योजना है, इसलिए मेटाप्रोग्रामिंग पाठ्यक्रम के बराबर है, और रनटाइम देशी कोड को a JIT के माध्यम से उत्सर्जित कर सकता है।

3

हास्केल दृष्टिकोण स्रोत को पार्स करने के तरीके के साथ और अधिक होगा। हास्केल प्लेटफार्म में एक पूर्ण स्रोत पार्सर शामिल है, या आप इस तरह से पहुंच प्राप्त करने के लिए जीएचसी एपीआई का उपयोग कर सकते हैं।

1

मैं कुछ (कार्यों की मशीन सीखने) कि अधिमानतः एक कार्यात्मक प्रोग्रामिंग भाषा, और भी आत्मनिरीक्षण, विशेष रूप से कुछ अच्छी तरह से विनयशील प्रारूप में कार्यक्रम के लिए अपने कोड की जांच करने की क्षमता चाहते हैं की एक डिजाइन स्केच रहा हूँ, और अधिमानतः रनटाइम पर संकलित मशीन जेनरेट कोड प्राप्त करने की क्षमता भी, और मैं सोच रहा हूं कि इसे लिखने के लिए सबसे अच्छी भाषा क्या है। पाठ्यक्रम के लिस्प में मजबूत आत्मनिरीक्षण क्षमताएं हैं, लेकिन स्थैतिक रूप से टाइप की गई भाषाओं में भी फायदे हैं; जिन पर मैं विचार कर रहा हूं वे हैं:

क्या आप सामान्य दुभाषिया या कंपाइलर जैसे स्रोत कोड को पार्स नहीं कर सकते हैं? आपको आत्मनिरीक्षण की आवश्यकता क्यों है?

एफ # - नेट प्लेटफार्म की एक अच्छी कहानी है, आप रन टाइम पर बाइट कोड पढ़ सकते हैं और बाइट कोड भी छोड़ सकते हैं और इसे संकलित कर सकते हैं; मुझे लगता है कि एफ # से इन सुविधाओं तक पहुंचने में कोई समस्या नहीं है।

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

आप बाइट कोड पढ़ सकते हैं लेकिन इसे संकलित किया गया है इसलिए बहुत सारी जानकारी और संरचना खो गई है।

एफ # में लेक्सिंग और पार्सिंग तकनीक भी है (सबसे विशेष रूप से fslex, fsyacc और FParsec) लेकिन यह ओकैमल के रूप में परिपक्व नहीं है।

हास्केल, ओकैम - क्या इन्हें बाइट कोड या पार्स पेड़ के माध्यम से समान सुविधाएं हैं?

हास्केल में टेम्पलेट हास्केल है लेकिन मैंने कभी इसका उपयोग करने वाले किसी के बारे में कभी नहीं सुना है (त्याग?)।

ओकैमल में इसकी कैमल्प 4 मैक्रो सिस्टम है और कुछ लोग इसका उपयोग करते हैं लेकिन यह poorly documented है।

लेक्सिंग और पार्सिंग के लिए, हास्केल में कुछ पुस्तकालय हैं (सबसे विशेष रूप से पारसी) और ओकैमल में many libraries है।

क्या अन्य भाषाएं भी मुझे देखनी चाहिए?

गणित जैसी भाषाओं को फिर से लिखना एक स्पष्ट विकल्प होगा क्योंकि वे इसे कोड में हेरफेर करने के लिए तुच्छ बनाते हैं। Pure भाषा रुचि का हो सकता है।

आप मेटाओकैमल को अपनी रन-टाइम संकलन क्षमताओं के लिए भी विचार कर सकते हैं।

+0

ठीक है, मैं अपने स्वयं के पार्सर और रनटाइम को लिखने की आवश्यकता से बचने की उम्मीद कर रहा था, लेकिन यह पता चला जरूरी हो तो मैं आगे बढ़ रहा हूं और कर रहा हूं। वैसे भी सूची के लिए धन्यवाद, हालांकि, ऊपर उठाया। – rwallace

+0

टेम्पलेट हास्केल का प्रयोग हाँड वेब प्लेटफॉर्म में किया जाता है। मैंने इसे कुछ परियोजनाओं में भी इस्तेमाल किया है। –

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