প্রোগ্রামিং ভাষার অরথোগোনালিটি কীভাবে যাচাই / প্রমাণ করা যায়?


10

আমি orthogonality ধারণা জানি, কিন্তু প্রোগ্রামিং ভাষার দৃষ্টিকোণ থেকে, এটি যাচাই / প্রমাণ করার কোন উপায় আছে?

উদাহরণস্বরূপ সি # তে, কেউ ব্যবহার করতে পারেন publicবা staticকোনও পদ্ধতি স্বাক্ষরের জন্য। আপনি উভয় বা উভয়ই ব্যবহার করতে পারেন এবং তারা একে অপরের সাথে হস্তক্ষেপ করবে না, তাই তারা একে অপরের সাথে orthogonal, তাই না?

আমার প্রশ্ন হ'ল আমি কীভাবে বাকী বৈশিষ্ট্যগুলি, বিশেষত এমন বৈশিষ্ট্যগুলি যা একে অপরের সাথে সম্পর্কিত নয়?

সমস্ত বৈশিষ্ট্য একসাথে থাকা / স্ট্যাক থাকতে হবে?

100% অরথোগোনাল একটি প্রোগ্রামিং ভাষা আছে?


(কাছাকাছি) থেকে শুরু: সমাবেশ ভাষা?
ম্যাথু ফ্লিন

1
আসলে কিছু প্রমাণ করার জন্য আপনার এটির একটি আনুষ্ঠানিক সংজ্ঞা দরকার। এবং যদি আপনার সংজ্ঞাটি সি # স্পিকারের মতো বড় কিছু হতে চলেছে, কোনও কিছু প্রমাণ করে অনেক বেশি কাজ লাগবে।
সুইভ

উত্তর:


4

আমি নিশ্চিত নই যে সি # এর মতো সাধারণ উদ্দেশ্য উচ্চ-অর্ডার ভাষার ক্ষেত্রে orthogonality দরকারী বা বৈধ মেট্রিক হিসাবে পরিবেশন করতে পারে, কারণ এটিতে "অপারেশন" এবং "অপারেশনস" - এর ছোট ছোট অংশগুলি প্রয়োজন হয় যা সহজে নয় সি # এর মতো হাই-অর্ডার ভাষায় পার্থক্যযোগ্য।

অরথোগোনালটি সম্পর্কে আমার বোঝার বিষয়টি এসেম্ব্লার ভাষার উপর ভিত্তি করে যেখানে নির্দিষ্ট সিপিইউ বা মাইক্রোকন্ট্রোলারের নির্দেশ নির্দেশের অরথোগোনালটিটি নির্দেশ করে যে এই সিপিইউ দ্বারা পরিচালিত ক্রিয়াকলাপগুলিতে কিছু বাধা আছে বা ডেটা ধরণের উপর নির্ভর করে নিয়ন্ত্রক কিনা indicated প্রথমদিকে এটি গুরুত্বপূর্ণ ছিল কারণ প্রতিটি সিপিইউ ভগ্নাংশের সংখ্যা বা বিভিন্ন দৈর্ঘ্যের সংখ্যার উপর পরিচালিত অপারেশনকে সমর্থন করে না because

এই ক্ষেত্রে আমি বরং সি # সংকলক নয়, সি # সংকলকটির লক্ষ্য হিসাবে স্ট্যাক মেশিনের ভাষা ব্যবহার করে কমন ইন্টারমিডিয়েট ল্যাঙ্গুয়েজের অরথোগোনালটি পরীক্ষা করতে চাই।

আপনি যদি সত্যিই সি # এর অরথোগোনালিটির বিষয়ে আগ্রহী হন এবং আমার এখানে ভুল করা হয় না (দাবির উদ্দেশ্যে) আমি কিছু জিনগত প্রোগ্রামিং অ্যালগরিদমের দিকে নজর দেওয়ার পরামর্শ দেব । আপনি কীওয়ার্ডগুলির দেওয়া সেট (এমনকি অর্থহীনগুলি) থেকে বিভিন্ন প্রোগ্রাম উত্পন্ন করতে ব্যবহার করতে পারেন এবং সেগুলি সংকলনযোগ্য কিনা তা আপনি স্বয়ংক্রিয়ভাবে পরীক্ষা করতে পারেন। এটি আপনাকে ভাষাটির কী উপাদানগুলি একত্রে একত্রিত করা যায় এবং আপনার অরথোগোনালিটি মেট্রিকের কিছু দিকগুলি সন্ধান করতে সহায়তা করবে।


6

"অर्थোগোনালিটি" শব্দটি একটি নির্দিষ্ট গাণিতিক ধারণার জন্য একটি সাধারণ ব্যক্তির শব্দ: ভাষার পদটি প্রাথমিক বীজগণিত গঠন করে (উইকিপিডিয়ায় এটি সন্ধান করুন)।

এর মূল অর্থ "সিনট্যাক্স এবং অর্থের মধ্যে 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 ভেঙে দেয়। আপনি যদি এটি সঠিকভাবে করতে চান তা বুঝতে চাইলে .. পয়েন্টারগুলির সাথে কোনও সমস্যা নেই!

প্রায় কোনও বাস্তব ভাষা অরথগোনাল হয় না। এমনকি স্কিম, যা প্রকাশের দুর্দান্ত স্বচ্ছতার ভান করে, তা নয়। তবে অনেকগুলি ভাল ভাষাকে "অর্থেগোনাল বৈশিষ্ট্যের ভিত্তিতে যুক্তিসঙ্গতভাবে নিকটবর্তী" হিসাবে গণ্য করা যেতে পারে এবং এটি একটি ভাষার জন্য একটি ভাল সুপারিশ, বাক্য গঠন এবং অন্তর্নিহিত শব্দার্থক উভয় ক্ষেত্রেই প্রয়োগ করা হয়।


সুতরাং আপনি কি মনে করেন যে এমএল অন্যের চেয়ে বেশি অর্থেগোনাল? লিস্প এবং হাস্কেলের কী হবে?
জোয়ান ওয়েঙ্গেজ

1
@ জোয়ান: ভাল, লিস্পের কোনও বৈশিষ্ট্য নেই তাই এটি ভ্যাকুয়োতে ​​প্রয়োজনীয়তা পূরণ করে :)
ইয়াত্ত্রিল

@ জাজান: আমি হাস্কেল প্রোগ্রামার নই তাই এটি বলা কিছুটা শক্ত, তবে "চূড়ান্ত উচ্চ স্তরের কার্যকারিতা" এর হাস্কেলের উপস্থিতি দৃ or় অরথোগোনালিটির ইঙ্গিত দেয়: আপনি কেবল মোনাডস বা তীরগুলির সুসংগত বাস্তবায়ন করতে পারবেন না যদি না বাকী ভাষাটির যথেষ্ট "অরথোগোনালিটি" রয়েছে
ইয়িট্রিল

প্যাসকাল সম্পর্কে আপনি কী ভাবেন। সি এর চেয়ে বোঝা আরও ভাল মনে হচ্ছে
সুপারক্যাট

আমি জানি আমার মন্তব্যটি প্রায় 4 বছর দেরীতে তবে আমি কেবল এটি পেরিয়ে এসেছি। এই উত্তরটি প্রায় সব কিছুতেই ভুল। এমনকি পুরো "এটিই একমাত্র উপায়!" অংশ সহজভাবে ভুল। আপনি সহজেই int (*intintfunc())(int) { ... }টাইপডেফ উদাহরণ ছাড়াই প্রকাশ করতে পারেন - ইনটিন্টফঙ্ক এমন একটি ফাংশন যা কোনও আর্গুমেন্ট নেয় না এবং একটি ফাংশনটিতে একটি পয়েন্টার দেয় যা 1 ইনট আর্গুমেন্ট নেয় এবং কোনও মান মান দেয়।
Wiz

4

Orthogonality প্রমাণ করে নেতিবাচক প্রমাণ করা হয়। এর অর্থ দাঁড়ায় যে আপনার কাছে এমন কোনও কনস্ট্রাক্ট নেই যা অরথোগোনাল নয়, যার অর্থ এটি প্রমাণ করা অনেক সহজ যে কোনও কিছু অরথোগোনাল নয়

অনুশীলনে, বেশিরভাগ লোকেরা পুরোপুরি অরথোগোনাল হওয়ায় বা না হয়ে ডিগ্রি বিবেচনায় প্রোগ্রামিং ভাষার অরথোগোনালিটির কথা বলে। যখন একটি প্রসঙ্গে কিছু করা থেকে জ্ঞান অন্য প্রসঙ্গে অনুবাদ করে এবং "আপনি যা প্রত্যাশা করেন তা করে", তখন সেই ভাষাটি আরও অরথগোনাল বলে। এলআইএসপিকে অত্যন্ত অরথোগোনাল হিসাবে বিবেচনা করা হয় কারণ সবকিছুই একটি তালিকা, তবে আমি মনে করি না যে এটি বলা যেতে পারে যে এটি 100% অর্থগোনাল কারণ কিছু অপ্রয়োজনীয় কারণে এটি ব্যবহার করা সহজ হয়। সি ++ কে খুব অরথগোনাল হিসাবে বিবেচনা করা হয় কারণ এখানে অনেকগুলি ছোট "গোটচস" রয়েছে যেখানে এটি আপনার মনে হয় এমনভাবে কাজ করে না।


3

সতর্কতা, আমি এই বিষয় সম্পর্কে কিছুই জানি না।

উইকিপিডিয়ায় একটি তাত্ক্ষণিক নজরে ইঙ্গিত পাওয়া যায় যে অর্থোগোনালিটি বেশিরভাগই নকশার নিদর্শন এবং সিস্টেম ডিজাইনে নির্দেশিত। প্রোগ্রামিং ভাষার ক্ষেত্রে, এন্ট্রিটি নির্দেশ করে যে প্রতিটি সম্ভাব্য ক্রিয়াকলাপের জন্য যদি কেবল একটি এবং কেবলমাত্র একটি নির্দেশ থাকে তবে নির্দেশিকা সেটগুলি অরথগোনাল হয়, বা পরিবর্তে কোনও নির্দেশিকা অন্যটির ওভারল্যাপ করে না।

সি # এর জন্য, আমি ধারণা করতে পারি যে এটি অর্থেগোনাল, বেশিরভাগ সিনট্যাক্স ট্রিকস (মনে foreachআসে) কেবল বেস কন্সট্রাক্টের (বিশেষত লুপ foreachহয়ে যায় for) বিশেষভাবে তৈরি সংস্করণগুলির সম্মুখ প্রান্তগুলি । সামগ্রিকভাবে, ভাষাটি কেবল সত্যই এককভাবে জিনিসগুলি সমর্থন করে, যদিও সিনট্যাকটিক চিনি এগুলি করার জন্য অতিরিক্ত উপায় সরবরাহ করে। এবং শেষ অবধি, MSILএগুলি সমস্তই সংকলিত হয় (বা যাকে আজকাল বলা হয়) এবং MSILসম্ভবত অরথোগোনাল।

যদি আপনি এই সতর্কবাণীতে থাকেন যে সিন্টেক্সটিকাল চিনির স্টাফগুলি মূলত এটি "শক্ত উপায়" করার আশেপাশে একটি "র‍্যাপার" হয় তবে আপনি ভাষার বিভিন্ন বৈশিষ্ট্য বিশ্লেষণ করতে পারেন, চিনি বাদ দিয়ে এবং দেখতে পারেন যে সেখানে এমন কোনও নির্মাণ রয়েছে যা সত্যই ওভারল্যাপ করে। যদি তা না হয় তবে আমি ভাবতে পারি যে আপনি ভাষাটি অরথোগোনাল ঘোষণা করতে পারেন।

আমার দুই সেন্ট.


আমি মনে করি যদি উভয় পক্ষে এবং ভবিষ্যদ্বাণী উভয়ই ভাষার বৈশিষ্ট্য হয় তবে একটি অন্যটির সিনট্যাকটিক চিনি হয় (যেখানে ফোরচের প্রভাবগুলি ব্যবহার করে অর্জন করা যেতে পারে), ভাষাটি সেখানে তার অরগনীয়তা হারিয়ে ফেলে।
vpit3833

do...whileহিসাবে একই প্রভাব প্রদান করতে ব্যবহার করা যাবে না for? আমি কখনও সিনট্যাকটিক চিনির হিসাবে বিবেচিত হওয়ার কথা শুনিনি।
ম্যাথু ফ্লিন

1
@ ম্যাথেজফ্লিন: বাহ! তারা দুটি সিনট্যাকটিক চিনি, আপনি কেবল পুনরাবৃত্ত ফাংশন দিয়ে আপনার পুনরাবৃত্তিটি প্রতিস্থাপন করতে পারেন! ;)
হতাশ

2
@ ফ্রাস্ট্রেটেড উইথফোর্ডস ডিজাইনার: এটি কি গোটোর জন্য সিনট্যাকটিক চিনি নয়?
ইভান

2
@ ম্যাথেজফ্লিন do whileএকক লুপ কার্যকর করার গ্যারান্টি দেয় এবং সত্যের পরে শর্তটি পরীক্ষা করে। forপ্রথমে শর্তটি পরীক্ষা করে এবং একক মৃত্যুদণ্ডের গ্যারান্টি দেয় না।
ডিজিটালওয়ার্ড

2

আমার প্রশ্ন হ'ল আমি কীভাবে বাকী বৈশিষ্ট্যগুলি, বিশেষত এমন বৈশিষ্ট্যগুলি যা একে অপরের সাথে সম্পর্কিত নয়?

আপনি যা করছেন তা করা অবিরত করুন, যে সমস্ত সংমিশ্রণ কাজ করে বা নিষেধ করা হয়েছে তাদের গণনা করুন।

এখানেই শেষ. এটি করা বেশ বেদনাদায়ক।

সমস্ত বৈশিষ্ট্য একসাথে থাকা / স্ট্যাক থাকতে হবে?

যদি সমস্ত বৈশিষ্ট্যগুলি একে অপরের সাথে হস্তক্ষেপ না করে এমন বিভাজনগুলিকে বিভাজন করতে পারে তবে নিশ্চিত হয়ে নিন যে সমস্ত বোধগম্য হবে।

সমস্ত ডেটা স্ট্রাকচার সমস্ত আদিম ধরণের সাথে কাজ করে। সমস্ত এক্সপ্রেশন অপারেটর সকল প্রকারের সাথে কাজ করে। এগুলি অরথোগোনালটির সাধারণ সংজ্ঞা। তবে আপনি আরও (বা কম) চাইতে পারেন

কখনও কখনও, তবে অপারেটিং সিস্টেম বা লিগ্যাসি লাইব্রেরিগুলির কারণে অর্টোগোনাল নয় এমন বিশেষ মামলা রয়েছে।

এছাড়াও, কিছু প্রকারগুলি সত্যই খুব সামঞ্জস্যপূর্ণ নয়। উদাহরণস্বরূপ পাইথন আপনাকে "অর্ডার করার জন্য" দুটি অভিধানের বস্তুর তুলনা করতে দেয়। কিন্তু অভিধানগুলির মধ্যে "অর্ডারিং" এর কোনও বুদ্ধিমান সংজ্ঞা নেই। পাইথন একটির সংজ্ঞা দেয় তবে এটি বেশ বিতর্কযোগ্য। সেই বিশেষ ক্ষেত্রে অভিধানগুলি কি একটি অরথোগোনালটি পরীক্ষায় ব্যর্থ হয়?

অরথোগোনাল "অর্থোগোনাল যথেষ্ট" কীভাবে? কী করতে আপনি আপনার ভাষায় orthogonality ডিগ্রী সঙ্গে সুখী হতে দেখতে প্রয়োজন।


2

বেশিরভাগ প্রোগ্রামিং ভাষায় অসাধারণ বৈশিষ্ট্যগুলির তালিকা প্রকৃতপক্ষে দীর্ঘ

  • অ্যানোনিয়াস ক্লাসগুলি জাভা প্রতিবিম্বের সাথে সংঘর্ষে লিপ্ত
  • জবা প্রতিবিম্বের সাথে জেনেরিক এবং টাইপ মুছে ফেলার বিরোধ
  • অ্যারেগুলি অন্য বস্তুর তুলনায় কিছুটা আলাদা, কারণ তাদের বিশেষ ধরণের কারণে তারা বস্তু হলেও।
  • স্ট্যাটিক বনাম উদাহরণস্বরূপ পদ্ধতিগুলি একই নয়, উদাহরণস্বরূপ আপনি কোনও স্ট্যাটিক পদ্ধতিকে ওভাররাইড করতে পারবেন না
  • নেস্টেড বর্গ একটি চিন্তা-ভাবনা
  • মেসেজ প্রেরণের কৌশলটিতে গতিশীল বনাম স্থির টাইপিংয়ের প্রভাব (উদাহরণস্বরূপ C # তে এই প্রান্তের কেসটি দেখুন )
  • প্রভৃতি

এগুলি মাত্র কয়েকটি যা আমার মনে আসে, তবে অন্য অনেকগুলি এবং অন্যান্য ভাষায়ও রয়েছে।

ভাষার বৈশিষ্ট্যগুলির মধ্যে সূক্ষ্ম হস্তক্ষেপ না রয়েছে তা নিশ্চিত করা শক্ত। সিএআর হোয়ার তার কাগজে "প্রোগ্রামিং ল্যাঙ্গুয়েজ ডিজাইনের উপর ইঙ্গিত "টিতে ইঙ্গিত করেছেন:

ভাষা ডিজাইনের কিছু অংশ নতুনত্ব নিয়ে গঠিত। এই ক্রিয়াকলাপটি বিচ্ছিন্নতায় নতুন ভাষার বৈশিষ্ট্যগুলিতে নিয়ে যায়। ভাষা নকশার সবচেয়ে কঠিন অংশটি ইন্টিগ্রেশনের মধ্যে রয়েছে : ভাষার বৈশিষ্ট্যগুলির একটি সীমিত সেট নির্বাচন করা এবং ফলাফল না হওয়া পর্যন্ত এগুলিকে পোলিশ করা একটি ধারাবাহিক সরল কাঠামো যাতে কোনও রুক্ষ প্রান্ত নেই is

সম্ভবত, অরথোগোনালিটি বাড়াতে একটি ভাল পদক্ষেপটি ধারণাগুলি একত্রিত করা (এটি @ কার্ল-বায়ালফিল্ড উত্তরের দিকে যায়)। যদি সমস্ত কিছু থাকে তবে একটি তালিকা বা একটি অবজেক্ট বলুন, সম্ভাবনা হ'ল কম বিরোধ রয়েছে। বা চিন্তা করার পরে বাসা বাঁধার পরিবর্তে এটিকে একটি মূল বৈশিষ্ট্য তৈরি করুন।

বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ পেপারগুলি ভাষার নির্দিষ্ট বৈশিষ্ট্য প্রমাণ করে (যেমন টাইপ সাউন্ডনেস) ভাষার একটি উপসেট (একটি "কোর") যা আনুষ্ঠানিকভাবে তৈরি হয়। এখানে আমাদের বিপরীত করা উচিত, প্রমাণ করুন যে সমস্ত বৈশিষ্ট্য সুরক্ষিতভাবে রচনা করেছেন। এছাড়াও, এর অর্থ একটি "রচনা" এর অর্থ কী তা নির্ধারণ করা উচিত। "রান" মানে কি? (এই ক্ষেত্রে, গতিশীল এবং স্ট্যাটিক টাইপিংয়ের সাথে প্রান্তের ক্ষেত্রে উপরের লিঙ্কটি নিরাপদ)। "নিরাপদ" থাকার অর্থ কি? এটির বিকাশকারী দৃষ্টিকোণ থেকে অনুমানযোগ্য হওয়ার অর্থ কি?

এগুলি খুব আকর্ষণীয় - তবে খুব চ্যালেঞ্জিং।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.