"অर्थোগোনালিটি" শব্দটি একটি নির্দিষ্ট গাণিতিক ধারণার জন্য একটি সাধারণ ব্যক্তির শব্দ: ভাষার পদটি প্রাথমিক বীজগণিত গঠন করে (উইকিপিডিয়ায় এটি সন্ধান করুন)।
এর মূল অর্থ "সিনট্যাক্স এবং অর্থের মধ্যে 1-1 টি চিঠিপত্র রয়েছে"। এর অর্থ: জিনিসগুলি প্রকাশ করার ঠিক একটি উপায় রয়েছে এবং আপনি যদি কোনও নির্দিষ্ট জায়গায় কিছু ভাব প্রকাশ করতে পারেন তবে আপনি সেখানে অন্য কোনও অভিব্যক্তিও রাখতে পারেন।
"অরথোগোনাল" সম্পর্কে ভাবার আরেকটি উপায় হ'ল সিন্টেক্সটি প্রতিস্থাপনের নীতিটি মেনে চলে। উদাহরণস্বরূপ, যদি আপনার কোনও অভিব্যক্তির জন্য স্লট সহ একটি বিবৃতি থাকে, তবে কোনও অভিব্যক্তি সেখানে রাখা যেতে পারে এবং ফলাফলটি এখনও সিনট্যাক্টিক্যালি বৈধ প্রোগ্রাম। তদ্ব্যতীত, আপনি প্রতিস্থাপন যদি
আমি জোর দিয়ে বলতে চাই যে "অর্থ" গণনা ফলাফলকে বোঝায় না। স্পষ্টতই, 1 + 2 এবং 2 + 1 উভয় সমান ৩. তবে পদগুলি পৃথক, এবং একই ফলাফল থাকলেও একটি পৃথক গণনা বোঝায়। অর্থটি পৃথক, যেমন দুটি ধরণের অ্যালগরিদম পৃথক।
আপনি "বিমূর্ত সিনট্যাক্স ট্রি" (এএসটি) এর কথা শুনে থাকতে পারেন। এখানে "বিমূর্ত" শব্দের অর্থ হ'ল "অরথোগোনাল"। প্রযুক্তিগতভাবে বেশিরভাগ এএসটি বাস্তবে বিমূর্ত নয়!
সম্ভবত আপনি "সি" প্রোগ্রামিংয়ের ভাষা শুনেছেন? সি টাইপ নোটেশন বিমূর্ত নয়। বিবেচনা:
int f(int);
সুতরাং এখানে একটি ফাংশন ঘোষণা ফেরত টাইপ int
। এই ফাংশনটিতে পয়েন্টারের ধরণটি দ্বারা দেওয়া হয়:
int (*)(int)
নোট, আপনি ফাংশন টাইপ লিখতে পারবেন না! সি টাইপ নোটেশন বিগ টাইম চুষে! এটি বিমূর্ত নয়। এটি অরথোগোনাল নয়। এখন, ধরুন আমরা কোনও ফাংশন তৈরি করতে চাই যা ইনট এর পরিবর্তে উপরের প্রকারটি গ্রহণ করে:
int (*) ( int (*)(int) )
ঠিক আছে .. তবে .. আমরা যদি এর পরিবর্তে এটি ফিরিয়ে দিতে চাই তবে:
int (*)(int) (*) (int)
Woops! অবৈধ। প্যারেন্স যুক্ত করতে দিন:
(int (*)(int)) (*) (int)
Woops! এটিও কাজ করে না। আমাদের এটি করতে হবে (এটি একমাত্র উপায়!):
typedef int (intintfunc*) (int);
intintfunc (*)(int)
এখন এটি ঠিক আছে, তবে এখানে টাইপিডেফ ব্যবহার করা খারাপ। সি চুষে দেয়। এটি বিমূর্ত নয়। এটি অরথোগোনাল নয়। আপনি এমএলে এটি কীভাবে করেন তা এখানে:
int -> (int -> int)
আমরা সিনট্যাক্স পর্যায়ে সি এর নিন্দা করি।
ঠিক আছে, এখন সি ++ লাগিয়ে দেওয়া যাক। আমরা টেমপ্লেটগুলির সাহায্যে উপরের মূup়তাকে সংশোধন করতে পারি এবং একটি এমএল স্বরলিপি (কম বা কম) পেতে পারি:
fun<int, int>
fun< fun<int,int>, int>
তবে প্রকৃত টাইপ সিস্টেমটি মৌলিকভাবে রেফারেন্স দ্বারা ত্রুটিযুক্ত: যদি T
কোনও প্রকার হয়, তবে T&
কোনও প্রকার হয়? উত্তরটি ওয়াফলি: সিনট্যাক্স স্তরে যদি আপনার টাইপ ইউ = টি থাকে, তবে ইউ & টি অনুমোদিত তবে এর অর্থ কেবল টি এবং: একটি রেফারেন্সের একটি রেফারেন্স হ'ল মূল রেফারেন্স। এই স্তন্যপান! এটি শব্দার্থগতভাবে স্বতন্ত্রতার প্রয়োজনীয়তা ভঙ্গ করে। আরও খারাপ: সিনট্যাক্টিকালি টি এবং টি ব্যবহারের অনুমতি নেই: এটি প্রতিস্থাপনের নীতিটি ভঙ্গ করে। সুতরাং সি ++ রেফারেন্সগুলি বাধ্যতামূলক সময়ের (পার্সিং বা টাইপ বিশ্লেষণ) উপর নির্ভর করে দুটি ভিন্ন উপায়ে orthogonality ভেঙে দেয়। আপনি যদি এটি সঠিকভাবে করতে চান তা বুঝতে চাইলে .. পয়েন্টারগুলির সাথে কোনও সমস্যা নেই!
প্রায় কোনও বাস্তব ভাষা অরথগোনাল হয় না। এমনকি স্কিম, যা প্রকাশের দুর্দান্ত স্বচ্ছতার ভান করে, তা নয়। তবে অনেকগুলি ভাল ভাষাকে "অর্থেগোনাল বৈশিষ্ট্যের ভিত্তিতে যুক্তিসঙ্গতভাবে নিকটবর্তী" হিসাবে গণ্য করা যেতে পারে এবং এটি একটি ভাষার জন্য একটি ভাল সুপারিশ, বাক্য গঠন এবং অন্তর্নিহিত শব্দার্থক উভয় ক্ষেত্রেই প্রয়োগ করা হয়।