दिलचस्प पोस्ट
MySQL द्वारा पहले समूह द्वारा आदेश क्या आईई 9 वेबब्रोजर नियंत्रण एसवीजी समेत सभी IE9 की विशेषताओं का समर्थन करेगा? क्या एक रिलायटल लय लाइनर लेआउट से अधिक महंगा है? कॉलबैक फ़ंक्शन क्या है? आप मेमोरीस्ट्रीम से स्ट्रिंग कैसे प्राप्त करते हैं? एकता खेल प्रबंधक स्क्रिप्ट केवल एक बार काम करता है String.split () का प्रयोग करते हुए शब्दों के जोड़े को निकालना JSON के लिए जावास्क्रिप्ट एसोसिएटिव सरणी हेरोकू रेल 4 में संपत्ति पाइपलाइनों के तहत फाइलों को संकलित नहीं करती है परिवर्तनीय उत्थापन वापसी प्रकार द्वारा ओवरलोडिंग क्या कोई DOM ईवेंट है, जब एक HTML चयन तत्व बंद हो जाता है? क्या मैं सी ++ में एक स्वायत्त 'स्वयं' सदस्य प्रकार को लागू कर सकता हूं? जांचें कि स्ट्रिंग में केवल अक्षर हैं अलामफिर से मूल्य कैसे लौटाया जाए

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

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

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

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

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

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

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

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

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

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

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

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


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

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