boo नौकरी के लिए एक नई भाषा सही उपकरण कब है?




nemerle (8)

स्कला में एक। NET संकलक है मुझे इसकी स्थिति हालांकि नहीं पता है। यह स्काला दुनिया में एक द्वितीय श्रेणी का नागरिक है (जो कि जेवीएम पर ज्यादा केंद्रित है) लेकिन यह स्क्रैच से एक नई भाषा बनाने के बजाय। NET संकलक अपनाने के लिए एक अच्छा व्यापार हो सकता है।

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

एक लंबे समय के लिए मैं चाहता हूं कि फीचर-सेट को ढूंढने के लिए मैं विभिन्न भाषाओं की कोशिश कर रहा हूं और मैं इसे ढूंढने में सक्षम नहीं हूं। मेरे पास ऐसे कई भाषाओं हैं जो मेरी विभिन्न परियोजनाओं के लिए ठीक से फिट हैं, लेकिन मैं इन भाषाओं के एक अंतराल के साथ आया हूं जो मुझे एक ही भाषा में अपनी 99.9% परियोजनाओं को करने की अनुमति देगा। मैं निम्नलिखित चाहता हूं:

  • .NET के शीर्ष पर निर्मित या .NET कार्यान्वयन है
  • .NET रनटाइम पर कुछ निर्भरताएं संकलन-समय और क्रम-समय पर दोनों हैं (यह महत्वपूर्ण है क्योंकि प्रमुख उपयोग के मामलों में से एक एम्बेडेड विकास में है जहां .NET रनटाइम पूरी तरह से कस्टम है)
  • एक कंपाइलर है जो 100% नोड कोड है, जिसमें बिना नियमन रहित निर्भरताएं हैं
  • मनमानी अभिव्यक्ति का समर्थन करता है नेस्टिंग (नीचे देखें)
  • कस्टम ऑपरेटर परिभाषाओं का समर्थन करता है
  • टाइप निष्कर्ष का समर्थन करता है
  • पूंछ कॉल को अनुकूलित करता है
  • स्पष्ट अपरिवर्तनीय / अस्थायी परिभाषाएं हैं (निस्संद्य - मैं इसे प्यार करने आया हूँ, लेकिन इसके बिना रह सकता है)
  • मजबूत मेटैप्रोग्रामिंग के लिए असली मैक्रोज़ का समर्थन करता है (पूर्ण होना चाहिए)

मैं जिन प्राथमिक दो भाषाओं के साथ काम कर रहा हूं, वे बू और नीर्ले हैं, लेकिन मैंने भी एफ # के साथ खेला है

नेमेरेल के खिलाफ मुख्य शिकायतों: कंपाइलर में भयंकर त्रुटि रिपोर्टिंग है, कार्यान्वयन नरक (संकलक और पुस्तकालय) के रूप में छोटी है, मैक्रोज़ केवल किसी फ़ंक्शन या विशेषताओं के अंदर ही लागू किया जा सकता है, और यह काफी निर्भरता-वार है (हालांकि यह पर्याप्त नहीं है कि यह एक डीलब्रेकर)
बू के खिलाफ मुख्य शिकायतों: कोई मनमानी अभिव्यक्ति नेस्टिंग (डील्रेब्रेकर) नहीं है, मैक्रोज़ लिखना मुश्किल है, कोई कस्टम ऑपरेटर परिभाषा (संभावित डीलब्रेकर) नहीं।
एफ # के खिलाफ मुख्य शिकायतों: मिग्रा वाक्यविन्यास, मेटैप्रोग्राफिक, गैर-मुक्त लाइसेंस (महाकाव्य डीलब्रेकर) को समझना मुश्किल है।

इसलिए जितना मैं इसके बारे में सोचता हूँ, जितना मैं अपनी भाषा विकसित करने के बारे में सोचता हूं।

पेशेवरों:

  • सटीक सिंटैक्स मुझे चाहिए
  • एक बेहतर समय प्राप्त करें जो एक अच्छा सौदा तेजी से होगा; मापने में मुश्किल है, लेकिन 1.5x डेवलपर उत्पादकता देखने के लिए मुझे आश्चर्यचकित नहीं होगा, विशेष रूप से टेस्ट इन्फ्रास्ट्रक्चर के कारण यह कुछ परियोजनाओं के लिए सक्षम हो सकता है
  • मैं आसानी से अपने रनटाइम के साथ अच्छी तरह से खेलने के लिए संकलक के लिए कस्टम कार्यक्षमता जोड़ सकते हैं
  • मुझे कुछ ऐसा मिलता है जो डिज़ाइन किया गया है और जिस तरह से मैं चाहता हूं वही काम करता है - जितना एनआईएच की तरह लगता है उतना ही यह मेरी जिंदगी आसान बना देगा

विपक्ष:

  • जब तक यह लोकप्रियता प्राप्त न कर सके, मैं रखरखाव के भार के साथ फंस जाऊंगा। मुझे पता है कि कम से कम निमेरेल लोगों को मिल सकता है, क्योंकि मुझे लगता है कि सभी को और अधिक पेशेवर चाहता है, लेकिन यह एक गांव लेता है।
  • पहले चुनाव के कारण, मैं इसे व्यावसायिक सेटिंग में उपयोग करने से परेशान हूं। उसने कहा, मैं पहले से ही Nemerle का उपयोग कर रहा हूं और अपने स्वयं के कस्टम संशोधित कंपाइलर का इस्तेमाल कर रहा हूं, क्योंकि वे इसे बिल्कुल अच्छी तरह से बनाए नहीं रख रहे हैं।
  • अगर यह लोकप्रियता हासिल नहीं करता है, तो डेवलपर्स को ढूंढना बहुत मुश्किल होगा, जिससे कि पॉल ग्राहम भी अनुमोदन न करें।

तो यह सब पर आधारित, सामान्य सहमति क्या है - क्या यह एक अच्छा विचार है या बुरा विचार है? और शायद अधिक मददगार, क्या मैंने किसी भी बड़े पेशेवर या विपक्ष को याद किया है?

संपादित करें: घोंसले के शिकार के उदाहरण को जोड़ने के लिए भूल गए - यहां Nemerle में एक मामला है:

def foo = 
    if(bar == 5)
        match(baz) { | "foo" => 1 | _ => 0 }
    else bar;

# 2 संपादित करें: समझें कि यह उस प्रकार के कोड का एक उदाहरण देने के लिए दुख नहीं होगा जो कि इस भाषा में परिवर्तित हो जाएगा यदि यह अस्तित्व में है (एस। लोटेल का उत्तर अकेले मुझे इसे करने से डराने के लिए पर्याप्त हो सकता है) कोड कस्टम वाक्यविन्यास (opcode,: =, quoteblock, आदि), अभिव्यक्ति नेस्टिंग, आदि का भारी उपयोग करता है। आप यहाँ एक अच्छा उदाहरण देख सकते हैं: यहां


नेमेरेल के खिलाफ मुख्य शिकायतों: कंपाइलर में भयंकर त्रुटि रिपोर्टिंग है, कार्यान्वयन नरक (संकलक और पुस्तकालय) के रूप में छोटी है, मैक्रोज़ केवल किसी फ़ंक्शन या विशेषताओं के अंदर ही लागू किया जा सकता है, और यह काफी निर्भरता-वार है (हालांकि यह पर्याप्त नहीं है कि यह एक डीलब्रेकर)

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

यदि आप इसे मौका देते हैं, तो आप निराश नहीं होंगे।


मुझे लगता है कि अधिकांश भाषाओं में कभी भी सभी बिलों को फिट नहीं किया जाएगा

आप अपनी 2 पसंदीदा भाषाओं (मेरे मामले में सी # और योजना ) को जोड़ना चाहते हैं और उन्हें एक साथ उपयोग कर सकते हैं।

एक पेशेवर दृष्टिकोण से, यह शायद एक अच्छा विचार नहीं है, हालांकि।


यह उन चीजों को सुनना दिलचस्प होगा जो आपको लगता है कि आप मौजूदा भाषाओं में नहीं कर सकते। आप किस प्रकार की परियोजनाओं पर काम कर रहे हैं जो सी # में नहीं किया जा सकता है?

मैं बस कुरूओ हूँ!


कभी भी अपनी भाषा विकसित नहीं करते हैं

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

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


मेरा कहना है कि इसे कर ही दो.

  • मौसम की परवाह किए बिना यह उत्पादन या नहीं करने के लिए यह एक भयानक अनुभव होगा।
  • यदि आप इसे आईएल के लिए संकलित करते हैं तो आपको सी # के साथ अपने संकलित विधानसभाओं का पुन: उपयोग नहीं करने के बारे में चिंता करने की ज़रूरत नहीं है
  • यदि आपको लगता है कि आपके ऊपर सूचीबद्ध भाषाओं के बारे में आपके पास वैध शिकायतें हैं, तो संभव है कि बहुत से लोग आपकी तरह सोचें। बेशक, हर 1000 इच्छुक व्यक्ति के लिए 1 इसे बनाए रखने में आपकी मदद करने के लिए तैयार हो सकता है - लेकिन यह हमेशा जोखिम होता है

लेकिन यहां कुछ चीजें हैं जिनके बारे में चेतावनी दी जा सकती है:

  • विकास से पहले STONE में अपनी भाषा विनिर्देश प्राप्त करें। सुनिश्चित करें कि किसी भी और सभी भाषा सुविधाओं को हाथ से पहले पता लगाया गया है - यहां तक ​​कि ऐसी चीजें जो आप भविष्य में ही चाहते हैं मेरी राय में, सी # धीरे धीरे "ओह-बस-एक-और-भाषा-विस्तार" जाल में पड़ने लगते हैं जो इसके अंततः कयामत की ओर ले जाएगा।
  • इसे अनुकूलित करना सुनिश्चित करें मुझे नहीं पता है कि आप पहले से ही जानते हैं; लेकिन अगर आप नहीं जानते तो सीखें;) कोई भी भाषा नहीं चाहता है जिसमें वाक्यविन्यास अच्छा होता है लेकिन आईई के जावास्क्रिप्ट कार्यान्वयन के रूप में धीमी गति से चलाता है

शुभकामनाएं: डी


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

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

सबसे खराब स्थिति, आप वास्तव में डिजाइन को लागू करने के साथ फंस रहे हैं, लेकिन तब तक आप यह सबूत पढ़ा और परिपक्व हो जाएंगे, और आपको उच्च स्तर की निश्चितता से पता चल जाएगा कि इसे लेने का एक अच्छा रास्ता था।

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


जब मैंने पहली बार 90 के दशक में अपना करियर शुरू किया, तो यह सब स्वयं की इन-हाउस भाषाओं को विकसित करने की यह सनक लग रहा था मेरी पहली 3 नौकरियां ऐसी कंपनियों के साथ थीं जिन्होंने इस किया था। एक कंपनी ने अपने ऑपरेटिंग सिस्टम भी विकसित किया था!

अनुभव से, मैं कहूंगा कि यह निम्न कारणों के लिए एक बुरा विचार है:

1) आप इसके ऊपर कोड बेस के अलावा भाषा को डीबग करने में समय व्यतीत करेंगे
2) कोई भी डेवलपर जिसे आप किराए पर लेते हैं उसे भाषा की सीखने की अवस्था के माध्यम से जाना होगा
3) किसी स्वामित्व वाली भाषा में काम करने से डेवलपर्स को आकर्षित करने और रखने के लिए कड़ी मेहनत होगी

मुख्य कारण मैंने उन तीन नौकरियों को छोड़ा क्योंकि वे मालिकाना भाषा थीं और आप देखेंगे कि कई कंपनियां इस मार्ग को और अधिक नहीं लेती हैं :)

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