दिलचस्प पोस्ट
मैं एंड्रॉइड में रूट एक्सेस का अनुरोध कैसे करूं? पायथन में HTML को पार्स करना क्या सत्र की हत्या किए बिना ओरेकल में एक ही क्वेरी को मारना संभव है? ऑरेकल में पंक्तियों के लिए अल्पविराम से अलग किए गए मान कैसे परिवर्तित करें? डेटा को फ़िल्टर करना। फ्रेम ब्राउज़र के बिना जावास्क्रिप्ट निष्पादित करना? अजगर subprocess.check_output की पहली तर्क और शेल = सत्य को समझना मैं वर्तमान लक्ष्य चींटी के मूल्य को कैसे प्राप्त करूं? एम्बर से दूसरे फ्रेमवर्क से एक घटना को कैसे उजागर करें स्विफ्ट: समकक्ष # वार्नरिंग पायथन कक्षा ऑब्जेक्ट inherits जावास्क्रिप्ट फ़ंक्शन ऑर्डर: क्यों यह फ़र्क पड़ता है? एक सदस्य चर के एनोटेशन कैसे प्राप्त करें? MKAnnotationView के लिए कॉलआउट बबल को कैसे अनुकूलित करें? अर्रे में द्विआधारी खोज

बूस्ट की आत्मा: "सिमेंटिक क्रियाएं बुरी हैं"?

इस प्रस्तुति को पढ़ना और देखना: http://boost-spirit.com/home/2011/06/12/ast-construction-with-the-universal-tree/
मैंने इस कथन की खोज की है – मूल रूप से हमें सिमेंटिक कार्यों का उपयोग नहीं करने का सुझाव दिया गया है

मुझे स्वीकार करना होगा, कि मैंने पहले ही ऐसा कुछ महसूस किया है: अर्थपूर्ण क्रियाओं के साथ व्याकरण वास्तव में थोड़े बदसूरत दिखते हैं और, जब मुझे उन्हें बढ़ाने / बदलने की जरूरत थी, तो यह बहुत मायने रखती थी "मायक्रोनेशनमेंट" वास्तव में अर्थ क्रियाओं के साथ प्रस्तुति में प्रदर्शित विशेषता व्याकरण के साथ दृष्टिकोण, अधिक सुंदर और आशाजनक होने लगता है

तो मैं पूछना चाहता हूं: क्या यह "आधिकारिक" बिंदु है? क्या मुझे सीखना चाहिए कि विशेषता व्याकरण के साथ कैसे काम किया जाए और अधिक विस्तार से सिमेंटिक क्रियाओं से बचें? यदि ऐसा है तो – मैं कुछ बुनियादी (शायद तुच्छ) उदाहरणों के लिए पूछना चाहता हूं, इस तरह के एक दृष्टिकोण का प्रदर्शन करना – मेरे लिए चलो एलआईएसएप दुभाषिया बहुत जटिल है …

Solutions Collecting From Web of "बूस्ट की आत्मा: "सिमेंटिक क्रियाएं बुरी हैं"?"

मुझे यकीन है कि हार्टमुट एक दूसरे में उत्तर देगा। तब तक, यह मेरा ले जाता है:

नहीं , यह कोई आधिकारिक बिंदु नहीं है

अर्थपूर्ण क्रियाओं में कुछ कमियां हैं

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

  • अधिक जटिल निहितार्थ यदि उनके पास साइड इफेक्ट होते हैं (जो कि अक्सर होता है)। एक पर्सेड नोड से पीछे की तरफ कल्पना कीजिए जब अर्थ क्रिया का एक साइड-इफेक्ट था : पार्सर राज्य को वापस कर दिया जाएगा, लेकिन बाहरी प्रभाव नहीं हैं।

    एक तरह से, विशेषताओं का उपयोग केवल एक कार्यात्मक कार्यक्रम में नियतात्मक, शुद्ध कार्यों का उपयोग करने के समान है, केवल एक कार्यक्रम की शुद्धता (या इस मामले में व्याकरण राज्य मशीन) के बारे में सोचना आसान है, जब यह केवल शुद्ध कार्यों से बना है।

  • सिमेंटिक क्रियाओं की एक प्रवृत्ति होती है (लेकिन जरूरी नहीं कि) मूल्य के आधार पर अधिक प्रतिलिपि पेश करने के लिए; यह, भारी पीछे हटने के साथ, प्रदर्शन को कम कर सकता है बेशक, यदि सिमेंटिक एक्शन 'भारी' है, तो यह अपने आप में है, पार्सिंग के प्रदर्शन में बाधा डाल रहा है।


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

  1. qi::locals<> और विरासत में मिली विशेषताओं ( Mini XML - ASTs! नमूना से कोड) के उपयोग पर विचार करें – इसमें अर्थ क्रियाएं शामिल हैं:

     xml = start_tag [at_c<0>(_val) = _1] >> *node >> end_tag(at_c<0>(_val)) // passing the name from the // ... start_tag as inherited attribute ; 

    या क्यूई :: स्थानीय लोगों का उपयोग कर एक :

     rule<char const*, locals<char> > rl; rl = alpha[_a = _1] >> char_(_a); // get two identical characters test_parser("aa", rl); // pass test_parser("ax", rl); // fail 

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

  2. इसके अलावा, कुछ काम वास्तव में 'त्वरित और गंदे' हैं और उपयुक्तता या हाथ से लुढ़काए गए एएसटी प्रकार के उपयोग की गारंटी नहीं देते हैं:

      qi::phrase_parse(first, last, // imagine qi::istream_iterator... intesting_string_pattern // we want to match certain patterns on the fly [ log_interesting_strings ], // and pass them to our logger noise_skipper // but we skip all noise ); 

    यहां, अर्थ क्रिया पार्सर्स फ़ंक्शन का मूल है। यह काम करता है, क्योंकि अर्थ क्रियाओं के साथ नोड्स के स्तर पर कोई बैक-ट्रैकिंग शामिल नहीं है।

  3. अर्थ क्रियाएं आत्मिक कर्मों में अर्थ क्रियाओं की एक दर्पण-छवि हैं, जहां वे आम तौर पर क्यूई की तुलना में समस्याओं को कम करती हैं; इसलिए यहां तक ​​कि यदि केवल इंटरफ़ेस / एपीआई निरंतरता के लिए, अर्थ क्रियाएँ 'एक अच्छी बात है' और एक पूरी तरह से बूस्ट आत्मा की उपयोगिता को बढ़ाने।