एक विशेषता जो मुझे कार्यात्मक भाषाओं से याद आती है वह यह है कि ऑपरेटर केवल कार्य करते हैं, इसलिए एक कस्टम ऑपरेटर को जोड़ना अक्सर फ़ंक्शन जोड़ने के रूप में सरल होता है। कई प्रक्रियात्मक भाषाएं ऑपरेटर को ओवरलोड करने की अनुमति देती हैं, इसलिए कुछ अर्थों में ऑपरेटर अभी भी कार्य करते हैं (यह डी में बहुत सही है जहां ऑपरेटर को टेम्पलेट पैरामीटर में स्ट्रिंग के रूप में पारित किया जाता है)।
ऐसा लगता है कि जहां ऑपरेटर ओवरलोडिंग की अनुमति है, अक्सर अतिरिक्त, कस्टम ऑपरेटरों को जोड़ने के लिए तुच्छ है। मुझे यह ब्लॉग पोस्ट मिला , जो तर्क देता है कि कस्टम ऑपरेटर पूर्ववर्ती नियमों के कारण infix संकेतन के साथ अच्छी तरह से काम नहीं करते हैं, लेकिन लेखक इस समस्या के कई समाधान देता है।
मैंने चारों ओर देखा और कोई भी प्रक्रियात्मक भाषा नहीं खोज सका जो भाषा में कस्टम ऑपरेटरों का समर्थन करती हो। हैक (जैसे C ++ में मैक्रोज़) हैं, लेकिन यह शायद ही भाषा समर्थन के समान है।
चूंकि यह सुविधा लागू करने के लिए बहुत तुच्छ है, इसलिए यह अधिक सामान्य नहीं है?
मैं समझता हूं कि यह कुछ बदसूरत कोड को जन्म दे सकता है, लेकिन इसने भाषा डिजाइनरों को अतीत में उपयोगी सुविधाओं को जोड़ने से नहीं रोका है जिन्हें आसानी से दुरुपयोग किया जा सकता है (मैक्रोज़, टर्नरी ऑपरेटर, असुरक्षित पॉइंटर्स)।
वास्तविक उपयोग के मामले:
- लापता परिचालकों को लागू करें (जैसे कि Lua में बिटवाइज़ ऑपरेटर नहीं हैं)
- मिमिक डी
~
(सरणी संयोजन) - DSLs
|
यूनिक्स पाइप-स्टाइल सिंटैक्स शुगर के रूप में उपयोग करें (कोरटाइन / जनरेटर का उपयोग करके)
मैं भी भाषाओं कि में दिलचस्पी रखता हूँ कर कस्टम ऑपरेटरों की अनुमति देते हैं, लेकिन मैं में अधिक रुचि रखते कर रहा हूँ क्यों यह बाहर रखा गया है। मैंने उपयोगकर्ता-परिभाषित ऑपरेटरों को जोड़ने के लिए एक स्क्रिप्टिंग भाषा को फोर्क करने के बारे में सोचा था, लेकिन जब मैंने महसूस किया कि मैंने इसे कहीं भी नहीं देखा है, तो खुद को रोक दिया है, इसलिए शायद एक अच्छा कारण है कि भाषा डिजाइनर मुझसे ज्यादा स्मार्ट नहीं हैं।