"ऑर्थोगोनलिटी" शब्द एक सटीक गणितीय धारणा के लिए एक आम आदमी का शब्द है: भाषा शब्द एक प्रारंभिक बीजगणित बनाते हैं (विकिपीडिया में देखें)।
इसका मूल रूप से अर्थ है "वाक्य रचना और अर्थ के बीच 1-1 पत्राचार"। इसका मतलब है: चीजों को व्यक्त करने का एक तरीका है, और, यदि आप किसी विशेष स्थान पर कुछ अभिव्यक्ति कर सकते हैं, तो आप वहां कोई अन्य अभिव्यक्ति भी रख सकते हैं।
"ऑर्थोगोनल" के बारे में सोचने का एक और तरीका यह है कि वाक्यविन्यास प्रतिस्थापन सिद्धांत का पालन करता है। उदाहरण के लिए यदि आपके पास एक अभिव्यक्ति के लिए एक स्लॉट के साथ एक बयान है, तो किसी भी अभिव्यक्ति को वहां रखा जा सकता है और परिणाम अभी भी एक वाक्यात्मक रूप से मान्य कार्यक्रम है। इसके अलावा, यदि आप प्रतिस्थापित करते हैं
मैं जोर देना चाहता हूं कि "अर्थ" का अर्थ कम्प्यूटेशनल परिणाम नहीं है। स्पष्ट रूप से, 1 + 2 और 2 + 1 दोनों समान 3. हालांकि शब्द अलग-अलग हैं, और इसका एक ही परिणाम होने पर भी एक अलग गणना करें। अर्थ अलग है, जैसे दो प्रकार के एल्गोरिदम अलग हैं।
आपने "अमूर्त सिंटैक्स ट्री" (एएसटी) के बारे में सुना होगा। यहां "अमूर्त" शब्द का अर्थ ठीक "ऑर्थोगोनल" है। तकनीकी रूप से अधिकांश एएसटी वास्तव में अमूर्त नहीं हैं!
शायद आपने "सी" प्रोग्रामिंग भाषा के बारे में सुना है? C टाइप नोटेशन अमूर्त नहीं है। विचार करें:
int f(int);
तो यहाँ एक फ़ंक्शन घोषणा वापसी प्रकार है int
। इस फ़ंक्शन के लिए सूचक का प्रकार निम्न द्वारा दिया गया है:
int (*)(int)
ध्यान दें, आप फ़ंक्शन का प्रकार नहीं लिख सकते हैं! C प्रकार संकेतन बेकार है bigtime! यह सार नहीं है। यह ऑर्थोगोनल नहीं है। अब, मान लें कि हम एक ऐसा फंक्शन बनाना चाहते हैं जो इंट के बजाय उपरोक्त प्रकार को स्वीकार करता है:
int (*) ( int (*)(int) )
ऑल ओके .. लेकिन .. क्या होगा अगर हम इसके बजाय इसे वापस करना चाहते हैं:
int (*)(int) (*) (int)
ओह! अमान्य। :
(int (*)(int)) (*) (int)
ओह! वह भी काम नहीं करता है। हमें यह करना है (यह एकमात्र तरीका है!):
typedef int (intintfunc*) (int);
intintfunc (*)(int)
अब इसका ठीक है, लेकिन यहां एक टाइफाइड का उपयोग करना बुरा है। C चूसता है। यह सार नहीं है। यह ऑर्थोगोनल नहीं है। यहाँ आप एमएल में यह कैसे करते हैं, जो है:
int -> (int -> int)
हम वाक्य रचना स्तर पर C की निंदा करते हैं।
ठीक है, अब C ++ को रोकते हैं। हम टेम्प्लेट के साथ ऊपर की मूर्खता को ठीक कर सकते हैं और एक एमएलए जैसे नोटेशन (अधिक या कम) प्राप्त कर सकते हैं:
fun<int, int>
fun< fun<int,int>, int>
लेकिन वास्तविक प्रकार की प्रणाली मूलभूत रूप से संदर्भों द्वारा त्रुटिपूर्ण है: यदि T
एक प्रकार है, तो T&
एक प्रकार है? जवाब माफ़ है: वाक्यविन्यास स्तर पर, यदि आपके पास U = T & टाइप है, तो U & की अनुमति है, लेकिन इसका अर्थ है T &: संदर्भ का संदर्भ मूल संदर्भ है। यह बेकार है! यह शब्दार्थ की विशिष्टता को तोड़ देता है। इससे भी बदतर: T & & को वाक्यात्मक रूप से अनुमति नहीं है: यह प्रतिस्थापन सिद्धांत को तोड़ता है। तो C ++ संदर्भ को दो अलग-अलग तरीकों से तोड़ता है, बाध्यकारी समय (पार्सिंग या टाइप विश्लेषण) के आधार पर। यदि आप यह समझना चाहते हैं कि यह कैसे करना है .. वहाँ संकेत के साथ कोई समस्या नहीं है!
लगभग कोई वास्तविक भाषा ओर्थोगोनल नहीं है। यहां तक कि योजना, जो अभिव्यक्ति की महान स्पष्टता का दिखावा करती है, नहीं है। हालाँकि कई अच्छी भाषाओं को "यथोचित रूप से ऑर्थोगोनल फीचर बेस के करीब" माना जा सकता है और यह एक भाषा के लिए एक अच्छी सिफारिश है, जो वाक्य रचना और अंतर्निहित शब्दार्थ दोनों पर लागू होती है।