গ্রিনস্পানের দশম বিধি, প্রতিটি বড় প্রকল্পে কি লিস্প দোভাষী অন্তর্ভুক্ত থাকে? [বন্ধ]


12

গ্রিনস্পানের দশম বিধি (আসলে একমাত্র নিয়ম) বলে যে:

Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.

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


8
আপনি কি উইকিপিডিয়া নিবন্ধে বিধিটির অর্থের ব্যাখ্যাটি পড়েছেন ? আমার সন্দেহ যে দাবিটি নিশ্চিত বা অস্বীকার করার জন্য গুরুতর প্রচেষ্টা হবে, এটি আসলে গুরুত্ব সহকারে নেওয়া উচিত ছিল না
ইয়ানিস

3
মজার বিষয় হ'ল গ্রিনস্পানের নিয়মটি যখন একটি রসিকতা ছিল, আমি আসলে সিমুলেশন সফ্টওয়্যারটিতে কাজ করেছি যেখানে এম্বেডড এলআইএসপি ইন্টারপ্রেটার ছিল। সফ্টওয়্যারটির কনফিগারেশনটি সমস্ত এস-এক্সপ্রেশনগুলির মাধ্যমে সম্পন্ন হয়েছিল এবং কনফিগারেশনে বিভিন্ন জিনিস করার জন্য একটি স্বতন্ত্রভাবে এলআইএসপি কোড লিখে থাকতে পারে।
wkl

@ ইয়ানিসরিজোস - আক্ষরিক অর্থে, আপনার লিঙ্কগুলির কোনওটিরই দাবি নয় যে বিধিটি রসিকতা। যদিও মরিসের আইন এমনভাবে তৈরি করা হয়েছে। এখন, রূপকভাবে ....
ক্যাজুয়াল কোডার

2
@ ক্যাসুয়ালকোডার "এটি বিদ্রূপের বিষয় যে এটি আমার মৃত্যুর পরে সম্ভবত আমার লেখার থেকে যে কেউ মনে রাখবে।" এবং নিয়মের নামকরণটি ইঙ্গিত দেয় যে এটি হালকা হৃদয় দিয়ে লেখা হয়েছিল ...
ইয়ানিস

এরলং এবং সমকালীন প্রোগ্রামগুলি সম্পর্কিত কোনও অনুরূপ উদ্ধৃতি ছিল না?
জর্জিও

উত্তর:


15

বিবৃতিটি হাইপারবোলে। তবে অন্যান্য ভাষায় লিস্প enর্ষার সুস্পষ্ট লক্ষণ রয়েছে। সি # দেখুন এবং কীভাবে এটি প্রকৃতির আরও কার্যকরী হয়ে উঠছে। বিভিন্ন বিজনেস প্রসেস ম্যানেজমেন্ট, ওয়ার্কফ্লো এবং ইএআই ফ্রেমওয়ার্কগুলি দেখুন যা প্রোগ্রামটি পরিবর্তন না করেই সিস্টেমটিকে প্রোগ্রাম করা সম্ভব করার পক্ষে চলে যায়।

মার্টিন ফাউলারের ডোমেন স্পেসিফিক ভাষা সম্পর্কিত একটি বই রয়েছে যা অবজেক্ট-ওরিয়েন্টেড ভাষায় মেটা-প্রোগ্রামিং কীভাবে করা যায় সে সম্পর্কে আলোচনা করে। হাইপারবোলে কিছু সত্য আছে।

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

দশম নিয়মের চারপাশের উপায়টি হ'ল বহুভোগ প্রোগ্রামিং। বুঝতে পারছি যে একটি ভাষা / কাঠামো সোনার হাতুড়ি নয়। তারপরে লিস্পের একটি দুর্বল এবং এডহক বাস্তবায়ন তৈরির পরিবর্তে আপনি কেবল লিস্প ব্যবহার করতে পারেন।


4
শক্তি এবং বয়স স্বাধীন। এটি তৈরির সময় LISP কতটা ভাল বা খারাপ ছিল তা সত্যিই বেশ অপ্রাসঙ্গিক, এটি আজ ভাষার সাথে কীভাবে তুলনা করে তা গুরুত্বপূর্ণ। প্রথম দিকগুলি সম্পূর্ণ গুরুত্বহীন।
ডেডএমজি

2
@ ডেড এমএমজি, এই "প্রথমগুলি" লিস্প থেকে অন্য ভাষাগুলিতে এখনও পোর্ট করা হয়নি এমন জিনিসের তুলনায় কিছুই নয়।
এসকে-যুক্তি

1
@ ডেড এমজি, আপনি ঠিক বলেছেন তারা রুবি সম্পর্কে এটি খনন শুরু করার পরে যে জিনিসগুলিকে পছন্দ করে তা হ'ল এর মেটাপোগ্র্যামিং দিক। লিস্প এটি অন্তর্নির্মিত করেছে C সি # বিকাশকারীরা লিনিক্যু (ভাল কারণ সহ) পছন্দ করে এবং ডিক্লেয়ারেশনাল প্রোগ্রামিংয়ের একচ্ছত্রতার সাথে অন্তর্ভুক্ত থাকে। লিপ্পে কোদাল রয়েছে। সিস্টেমগুলি আরও জটিল হওয়ার সাথে সাথে, তারা বার্তাগুলিতে প্রতিক্রিয়াশীল নোডগুলি সম্পর্কে এবং অবজেক্ট সম্পর্কে কম less লিস্পটি সেখানে শুরু হয়, বেশিরভাগ অন্যান্য ভাষাগুলি এটিকে অ্যাডহক (তাই নিয়ম) বা ফ্রেমওয়ার্কের মাধ্যমে (যেমন: বিজটালক, টিবকো ইত্যাদি) ব্যবহার করতে হয়।
মাইকেল ব্রাউন

2
"লিস্পের একটি দুর্বল ও অস্থায়ী বাস্তবায়ন তৈরির পরিবর্তে আপনি কেবল লিস্প ব্যবহার করতে পারেন" তবে মরিসের এই তাত্পর্যপূর্ণ অর্থ আপনি এখনও একটি দরিদ্র, অ্যাডহক বাস্তবায়ন ব্যবহার করছেন;)
জে কে।

1
এই প্রবেশের নিখুঁত সিডনোট "হ্যাকার সংস্কৃতির পুরোপুরি প্রায়শই হ্যাক-হ-একমাত্র-গুরুতর হিসাবে নিজেকে হ্যাকার হিসাবে বিবেচনা করা হয়; এটিকে খুব হালকাভাবে বা অত্যধিক গুরুত্ব সহকারে গ্রহণ করার জন্য একজন ব্যক্তিকে বহিরাগত, ওয়ানবি বা লার্ভা পর্যায়ে চিহ্নিত করে । "
মাইকেল ব্রাউন

10

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

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

অন্য কথায়, যখন তারা পর্যাপ্ত জটিল প্রকল্পের জন্য লিস্পকে ব্যবহার করার চেষ্টা করেছিল, তখন তারা দেখতে পেল যে কার্যকর কিছু করার জন্য তাদের ভাষাটিকে একটি অ্যাড-হকের রূপান্তর করতে হয়েছিল, অনানুষ্ঠানিকভাবে অর্ধেক সি ++ এর প্রয়োগকরণ! ;) (এবং শেষ পর্যন্ত তাদের লক্ষ্যটি ডিজাইন করা লোকটির পরে এটি ব্যবহার বন্ধ করতে হয়েছিল কারণ কেউ তার কোড বুঝতে পারে না))


আমার ধারণা আমার প্রশ্নটি একটি বৃহত সিস্টেমের নির্দিষ্ট অংশগুলি সম্পর্কে। অবশেষে, সিস্টেমটির এমন কিছু অংশ থাকবে যা অন্তর্নিহিত গতি বা শ্রেষ্ঠত্বের পরিবর্তে চিন্তার প্রক্রিয়া বা ভাষা ব্যবহারের সাথে জড়িত কৌশলগুলির কারণে অন্য ভাষায় আরও ভালভাবে কোডড হয়। মিঃ লেনাঘনের গল্পটির একটি উদাহরণ।
নৈমিত্তিক কোডার

প্রকৃতপক্ষে, তারা গোলটি ব্যবহার বন্ধ করে দিয়েছে কারণ তারা এমন একটি সংস্থা কিনেছে যার কোডবেস সি ++ তে ছিল। এছাড়াও, লক্ষ্যটি বেশ লম্পট ছিল। সর্বনিম্ন-ডিনোমিনেটর অনলাইন টিউটোরিয়াল এবং বিশ্ববিদ্যালয়ের বক্তৃতাগুলি সঠিক বলে মনে করবেন না :)
p_l

9

কৌতূহলজনকভাবে, এই প্রশ্নের একটি উত্তর ইতিমধ্যে প্রোগ্রামার্স এসইতে রয়েছে

সম্পর্কিত অংশ উদ্ধৃত:

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

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

এটি প্রায় ছয় সপ্তাহ সময় নিয়েছে। মূল কোডটি ছিল দেলফির of 100,000 লাইনের (একটি পাস্কাল বৈকল্পিক)। লিস্পে এটি 10,000 ডলার লাইনে হ্রাস পেয়েছিল। আরও আশ্চর্যের বিষয়, যদিও লিস্প ইঞ্জিনটি 3-6 গুণ বেশি গতিযুক্ত ছিল। এবং মনে রাখবেন যে এটি একটি লিস্প নওফাইটির কাজ ছিল! পুরো অভিজ্ঞতাটি আমার পক্ষে বেশ চক্ষু খোলার ছিল; প্রথমবারের মতো আমি একক ভাষায় কর্মক্ষমতা এবং ভাব প্রকাশের সংমিশ্রণের সম্ভাবনা দেখেছি।
- মাইকেল লেনাঘান

সেই অংশটি আরও স্পষ্ট করতে মাইকেল এই মন্তব্যটির প্রতিক্রিয়া জানিয়েছিলেন:

বাহ, এটি অবশ্যই কিছু ভয়ংকর ডেল্ফি কোড ছিল যদি এটি কোনওভাবে লিস্প প্রয়োগের চেয়ে 3-6x ধীর গতিতে পরিচালিত হতে পারে! "ঠিক আছে, আমি এটিকে আরও ভালভাবে ব্যাখ্যা না করার জন্য আমার ব্যর্থ হিসাবে গণ্য করব Lis লিস্প বাস্তবায়ন রূপান্তর করতে সক্ষম হয়েছিল লিস্প এক্সপ্রেশনগুলিতে ব্যবহারকারী প্রকাশগুলি - একটি তুচ্ছ সহজ প্রক্রিয়া - এবং তারপরে লিস্প এক্সপ্রেশনগুলি স্থানীয় কোডে (সম্পূর্ণ অপ্টিমাইজেশন সহ)
সংকলন করুন ile গ্রীনস্পানের দশম বিধিটির এটিই অর্থ .– মাইকেল লেনাঘান

প্রদত্ত এই উত্তরটি অন্য কোথাও অন্যের উত্তর নিয়ে গঠিত, এটি সম্প্রদায় উইকি।


2

নিয়মটি একটি রসিকতা, তবে এটিতে কিছুটা সত্যতা রয়েছে। যে কোনও জটিল সিস্টেমে অনেকগুলি ব্যাখ্যামূলক অংশ থাকে (দেখুন, কীভাবে "ইন্টারপ্রিটার প্যাটার্ন" যারা সেই সমস্ত নিদর্শনগুলিতে বিশ্বাস করে তাদের মধ্যে মম্বো-জাম্বো)) যে কোনও জটিল সিস্টেমে কনফিগারেশনের কিছু উপায় সরবরাহ করতে হবে, প্রায়শই কাঠামোগত, প্রায়শই ব্যাখ্যা করা হয়।

যে কোনও জটিল সিস্টেমে তার বিল্ড প্রক্রিয়াতে বেশ কয়েকটি কোড জেনারেশন পাস এবং বিভিন্ন কাস্টমাইজড প্রিপ্রোসেসর হওয়ার সম্ভাবনা রয়েছে ( mocকিউটি বা tablegenএলএলভিএমের মতো বিষয়গুলি চিন্তা করুন )।

অনেক সিস্টেম জটিল গাছের মতো ডেটা স্ট্রাকচারগুলিকে জঞ্জাল দিচ্ছে (প্রায় সবসময়) খারাপভাবে ডিজাইন করা ট্রি ওয়াকিং এবং ট্রান্সফর্মিং সরঞ্জামগুলি সাধারণ লিস্পের কাছ থেকে লাইব্রেরির কার্যকারিতার সাথে সাদৃশ্যপূর্ণ।

এই সমস্ত জিনিস লিস্পের সাথে নিখরচায় আসে এবং বেশিরভাগ ক্ষেত্রে যথেষ্ট পরিমাণ বাস্তবায়নের মাধ্যমে এই পরিকল্পনাটি সম্পূর্ণরূপে নিম্নমানের হবে না এমন পরিকল্পনা করা হয় un


2

যে কোনও জটিল জটিল সিস্টেমে ডোমেনের নির্দিষ্ট ধারণা এবং প্রয়োজনীয়তা থাকবে যা আপনি যে ভাষায় কাজ করছেন তার বিমূর্ততা প্রকাশের জন্য অত্যন্ত কঠিন This এবং নির্দিষ্ট ডোমেন। এই বিমূর্ততাগুলির যথেষ্ট পরিমাণে একবার আসার পরে আপনার কাছে মূলত একটি ডোমেন নির্দিষ্ট ভাষার কোনও অনুবাদক থাকে। এটি সফ্টওয়্যার বিকাশের একটি অনিবার্য অংশ is


1

নিয়মটি আরও সঠিকভাবে (এবং কম মজাদারভাবে) হতে পারে কারণ "গতিশীল আচরণ বাস্তবায়নের জন্য প্রতিটি বৃহত সফ্টওয়্যার ভিত্তিক সিস্টেমের প্রয়োজন হবে"।

এটা দুইভাবে সম্পাদন করা যেতে পারে-

  1. কয়েক ডজন প্যারামিটার এবং শত সংজ্ঞা সহ একটি বৃহত জটিল কনফিগারেশন ফাইল।

  2. একটি AD-HOC স্ক্রিপ্ট ভাষা।

"সেন্ডমেল" সম্ভবত "1" টাইপের প্রথাগত উদাহরণ। "2" টাইপের এমন কোনও ভাল উদাহরণ আমি ভাবতে পারি না যে কোনও "আসল" স্ক্রিপ্টিং ভাষা একটি লা ওয়ারক্রাফ্ট / এলইউএ এমনকি নেটস্কেপ / জাভাস্ক্রিপ্ট এম্বেড করার সাথে জড়িত না।

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


0

এটি সত্য হতে পারে, যেমন অন্যেরা বলেছিলেন, অনেক প্রোগ্রামের জন্য কনফিগারেশনের প্রয়োজন হয় এবং তাই বিভিন্ন লিসপ-এর মতো দোভাষী পাওয়া যায়।

তবে বিবৃতিটি একটি স্পর্শকাতর দ্বারা বোঝাচ্ছে যে আপনাকে একটি প্রোগ্রাম তৈরি করতে হবে তা হ'ল লিস্প এবং অন্যান্য সমস্ত ভাষাও এর থেকে নিকৃষ্ট।

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

উচ্চ পারফরম্যান্স প্রোগ্রামিংয়ের বাস্তবতা হ'ল আমাদের মাঝে মাঝে বিট এবং বাইটগুলি মিশ্রিত করা এবং ওএস নির্দিষ্ট স্টাফগুলি করা দরকার, সুতরাং বিবৃতি থেকে বোঝা যায় যে ঠিক লিস্প দিয়ে সবকিছু করা সম্ভব নয়।

এটি আপনার চারপাশের অন্যান্য উপায়েই নয়, আপনি যে ভাষা আবিষ্কার করেন তা কতই না জটিল, চতুর বা পরিশীলিত তা বিবেচনাধীন, এটি সমস্তই শেষ হয় সমাবেশ রচনার অন্য উপায় way


50s এর দশকের শেষ দিকের সবচেয়ে প্রাচীন লিস্প পরিবেশের সাথে প্রাসঙ্গিক বলে মনে হচ্ছে। ব্যক্তিগতভাবে, আমি সম্ভবত বিটগুলির সাথে মোকাবিলা করার জন্য কমন লিস্পের কার্যকারিতাটি খুঁজে পেয়েছি সম্ভবত অন্যতম সেরা (মূল প্রতিযোগিতাটির সাথে এরং)। অ্যারে, হ্যাশটবেল, স্ট্রাইকগুলি সমস্ত সাধারণ।
p_l

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

0

এটি গুরুত্ব সহকারে নেওয়া উচিত ছিল বা না, এটি আমার পক্ষে কাজ করা বৃহত্তম সি এবং সি ++ প্রকল্পের ক্ষেত্রে সত্য।

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

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


-1

দুর্ভাগ্যবশত না!

যদিও কেবলমাত্র একটি আসল লিস্প (y) দোভাষী (জাভাস্ক্রিপ্ট বা লুয়া অ্যালোস একটি ভাল কাজ করে) এম্বেড করার পক্ষে সেরা, কোনও প্রকল্পে হোমব্রু 4 জিএল যুক্ত করার ফলে নমনীয়তা বাড়ানোর সময় সামগ্রিক আকার হ্রাস পায়।

যে প্রকল্পগুলি "কোড সব কিছু" এর বিশাল আকারের মডিউল গণনা করা হয় এবং অনর্থক এবং জটিল হয় না inf

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