2009-01-15 15 views
11

मुझे कुछ भाषाएं मिली हैं जो मैं दुभाषियों के रूप में बना रहा हूं। जब मैं "वह अगला कदम" लेने के लिए तैयार हूं, तो गैर-देशी संकलित प्रारूपों के लिए कौन से विकल्प सबसे अच्छे हैं ... प्रत्येक के पेशेवर और विपक्ष क्या हैं?बेस्ट कंपाइलर गंतव्य

मैं सीएलआर या एलएलवीएम के संकलन को देख रहा हूं, और कुछ बार सी-मिडकंपाइल पर विचार किया है, लेकिन मैं पूरी तरह से निश्चित नहीं हूं। - भाषाओं मैं इमारत रनटाइम के दौरान ब्लॉक स्तर मूल्यांकन का समर्थन करता है में से एक

  1. आरईपीएल:

    कुछ सुविधाओं मैं बंदरगाह के लिए सक्षम होने के लिए आशा करती हूं कि इस प्रकार हैं।

  2. रोबस्ट मैक्रोज़ - मैं जिन भाषाओं में निर्माण कर रहा हूं उनमें से एक को टोकनिंग से पहले कोड के माध्यम से फ़िल्टर करने की क्षमता और टोकनिंग और पार्सिंग के बीच बीच में फ़िल्टर करने की क्षमता की आवश्यकता होती है।

ठीक है, वास्तव में "कुछ" नहीं, केवल दो। मुझे लगता है कि मैं किसी भी अन्य विशेषताओं को बंद कर सकता हूं, मेरी भाषाएं "कुछ भी" को समर्थन देती हैं।

मेरे सर्वोत्तम विकल्प और उनके पेशेवर/विपक्ष क्या हैं?

उत्तर

16

समर्थक/विपक्ष:

  • CLR:

    • समर्थक: CLR वातावरण में आसानी से उपलब्ध;
    • con: बाध्य करने के लिए सीएलआर (;-); कुछ सिस्टम लक्ष्यीकरण मुश्किल या असंभव हो जाएगा (। एम्बेडेड, mainframes, आदि CLR impl गैर एमएस सिस्टम पर कम परिपक्व हो सकता है)
  • LLVM:

    • समर्थक: एमएस से स्वतंत्र।
    • con: कुछ सिस्टम को लक्षित करने में एलएलवीएम (?) पोर्टिंग शामिल हो सकती है; डॉट शुद्ध करने के लिए इंटरफ़ेस, जावा आदि परेशानी (संभवतः FFI की जरूरत है) हो सकता है
  • लक्ष्य भाषा के रूप में सी:

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

    • समर्थक: शायद संभव लक्ष्य प्लेटफार्मों (यहां तक ​​कि mobil फोन और एम्बेडेड सामान) का सबसे बड़ा सेट; आसपास के कई मौजूदा उपकरण; मौजूदा पुस्तकालयों के लिए आसान interfacing
    • चोर: (गतिशील प्रकार, निरंतरता, उलटे पांव लौटने से) कुछ बातें कुशलता से लागू करने के लिए लागू करने के लिए कठिन या कठिन हैं

सब से ऊपर, मैं लक्षित कर लगता है कि जावा बाईटकोड से शायद होगा आपके लिए सबसे अच्छा हो।

संपादित करें: वास्तव में एक टिप्पणी का उत्तर, लेकिन 300chars पर्याप्त नहीं हैं।

जेबीटीकोड iffy - मैं सहमत हूं (एक छोटे से चलने वाले होने के नाते, जेबीटेकोड मेरे लिए बहुत सीमित है)।

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

+2

जावा बाइटकोड ऐसा कुछ है जो मैं हमेशा के बारे में iffy किया गया है। इसे खराब पिछले अनुभव कहते हैं। क्या उनमें से किसी के पास उनके आंतरिक वीएम (केवल लाइब्रेरी कॉल के अलावा) की शक्ति के संबंध में कोई भरोसा है? – user54650

+6

सी कोड जनरेशन तब तक आसान दिखता है जब तक आप इसे 6 से 18 महीने तक नहीं कर रहे हैं। फिर अचानक चीजें असंभव हो जाती हैं। –

3

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

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

25

कोड पीढ़ी अपने व्यवसाय :-) कुछ ही विकल्प पर

टिप्पणियाँ है:

  • CLR:

    • प्रो: औद्योगिक समर्थन
    • कोन: आप खरीद करने के लिए है अपने प्रकार की प्रणाली में काफी पूरी तरह से; क्या आप प्रकार के साथ क्या करना चाहते हैं पर निर्भर करता है, यह कोई फर्क नहीं सकता है
    • कोन: करिश्माई साथ उत्साही उपयोगकर्ता समुदाय:

      • प्रो: केवल विंडोज मंच वास्तव में प्राइम टाइम गुणवत्ता
    • LLVM है नेता

    • प्रो: एप्पल से गंभीर समर्थन
    • प्रो: कई दिलचस्प प्रदर्शन में सुधार
    • कोन: कुछ हद तक comple एक्स इंटरफेस
    • कॉन: इंजीनियरिंग में छेद का इतिहास; के रूप में LLVM परिपक्व उम्मीद इंजीनियरिंग में छेद इंटरफ़ेस
  • C--

    • प्रो की जटिलता को जोड़कर खामियों को दूर किया जाना चाहिए: लक्ष्य एक वास्तविक लिखित भाषा, न कि एक एपीआई है; आप आसानी से निरीक्षण कर सकते हैं, डिबग, और संपादित करें C-- कोड
    • प्रो: डिजाइन यथोचित परिपक्व और यथोचित साफ है
    • प्रो: समर्थन करता है, सही कचरा संग्रहण
    • प्रो: सबसे उपयोगकर्ताओं की रिपोर्ट यह
    • उपयोग करने के लिए बहुत आसान है
    • कोन: बहुत छोटे विकास दल
    • कोन: कोई परियोजना है: 2009 की शुरुआत के रूप में, केवल तीन हार्डवेयर प्लेटफॉर्म का समर्थन करता है (x86, पीपीसी, एआरएम)
    • कोन:
    • कोन एक कचरा कलेक्टर के साथ व्यापार नहीं करता है भविष्य
  • लक्ष्य भाषा के रूप में सी

    • प्रो: सभ्य प्रदर्शन
    • कोन पाने के लिए लगभग असंभव: लग रहा है आसान
    • कोन लंबे समय में तुम पागल ड्राइव करेंगे; इस तकनीक का उपयोग करके हास्केल, एमएल, मॉडुला -3, योजना और अधिक संकलित करने की कोशिश करने वाले लोगों की लंबी लाइन से पूछें। किसी बिंदु पर इन लोगों में से प्रत्येक ने अपना मूल कोड जनरेटर छोड़ दिया और बनाया।

सारांश: सी के अलावा कुछ एक उचित विकल्प है। लचीलापन, गुणवत्ता और अपेक्षित दीर्घायु के सर्वोत्तम संयोजन के लिए, शायद मैं एलएलवीएम की सिफारिश करता हूं।

पूर्ण प्रकटीकरण: मैं सी-- परियोजना से संबद्ध हूं।

+2

बस एक छोटी सी नोट: आपको एलएलवीएम की एपीआई का उपयोग करने की ज़रूरत नहीं है, आप इसकी असेंबलर जैसी भाषा को लक्षित कर सकते हैं। – Frank

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