স্কিম বনাম কমন লিস্প: কোন প্রকল্পগুলি আপনার প্রকল্পে একটি পার্থক্য করেছে? [বন্ধ]


155

স্ট্যাকওভারফ্লো এবং এই সাইটে উভয়ই অস্পষ্ট "স্কিম বনাম কমন লিস্প" প্রশ্নের কমতি নেই, তাই আমি এটিকে আরও বেশি কেন্দ্রীভূত করতে চাই। প্রশ্নটি এমন লোকদের জন্য যারা উভয় ভাষায় কোড করেছেন:

স্কিমে কোডিং করার সময়, আপনার প্রচলিত লিস্প কোডিং অভিজ্ঞতার কোন নির্দিষ্ট উপাদানগুলি আপনি সবচেয়ে বেশি মিস করেছেন? অথবা, বিপরীতভাবে, কমন লিস্পে কোডিং করার সময়, আপনি স্কিমে কোডিং থেকে কী মিস করেছেন?

আমি অগত্যা শুধু ভাষার বৈশিষ্ট্যগুলি বোঝাতে চাই না। নীচের সমস্তটি মিস করার মতো কার্যকর বিষয়, যতক্ষণ না প্রশ্ন সম্পর্কিত valid

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

আমি যে ধরণের উত্তরের জন্য আশা করছি এর উদাহরণগুলি:

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

সুতরাং, "যুদ্ধের সহজ পরিকল্পনা" ইত্যাদির মতো সাধারণ অনুভূতির চেয়ে আমি যুদ্ধের গল্পগুলির জন্য আশা করছি etc.


25
একটি দুর্দান্ত, ভাল কথার প্রশ্ন। আমি নিজেই এই সম্পর্কে কৌতূহলী; আশা করি সেখানে উভয় ভাষায় দক্ষতার সাথে কিছু লোক রয়েছেন যা কিছু অন্তর্দৃষ্টি দেওয়ার জন্য প্রস্তুত।
রবার্ট হার্ভে

1
@ জোশ কে - এটি পরিষ্কারভাবে জবাবদিহি করতে পারে, তবে এর একটিও স্পষ্টত উত্তর পাওয়া যায় না। আমি বাজি রেখেছি তবে একটি থাকবে কারণ কেউ এমন একটি উত্তর নিয়ে আসবে যা এতই ভয়ঙ্কর যে সবাই হুফের মতো!
glenatron

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

13
লোকেরা, আপনার পছন্দ না হওয়ার কারণে বা এটির সাথে সম্পর্কিত করতে না পারার কারণে প্রশ্নটি বন্ধ করবেন না। এটি পরিষ্কারভাবে একটি "বাস্তব" প্রশ্ন; যদি আপনি এটি বন্ধ করার আরও ভাল কারণ খুঁজে না পান তবে আপনার বন্ধ করার পক্ষে ভোট দেওয়া উচিত নয়।
রবার্ট হার্ভে

4
আপনি তার উত্তরের জন্য রিচার্ড স্টলম্যানকে ইমেল করতে পারেন।
wassimans

উত্তর:


100

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

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

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

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

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

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

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

এখন আমি আপনার প্রশ্নের উত্তর দিতে পারি (কমপক্ষে অংশে)।

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

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

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

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

এখানে লিস্প এবং স্কিম উভয় ক্ষেত্রে কিছুটা উল্লেখযোগ্য সংখ্যক কোড তৈরি করা কিছু তুলনা এবং বিপরীতে পয়েন্ট:

  • লিস্পের পরিবেশগুলি আরও বেশি পরিপক্ক। আপনি বক জন্য আরও অনেক ধাঁধা পেতে। (এটি বলার পরে, আরও কোড আরও বেশি বাগের সমতুল্য হয়))

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

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

আমি বলেছিলাম যে এর আগে আমরা স্কিমটি ব্যবহার করে অনেকগুলি জায়গায় শেষ করেছি যা আমরা মূলত লক্ষ্য করি নি। কেন? আমি মাথার উপরের দিক থেকে তিনটি কারণ ভাবতে পারি।

প্রথমত, আমরা চেজকে (এবং এর বিকাশকারী, ক্যাডেন্স) বিশ্বাস করতে শিখেছি। আমরা সরঞ্জামটি থেকে অনেক কিছু জিজ্ঞাসা করেছি এবং এটি ধারাবাহিকভাবে বিতরণ করা হয়েছিল। উদাহরণস্বরূপ, চেজ historতিহাসিকভাবে একটি তুচ্ছ স্বল্প সংখ্যক ত্রুটিযুক্ত ছিল এবং এর মেমরি ম্যানেজারটি খুব, খুব ভাল ছিল।

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

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

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

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

এছাড়াও, কেবল পুনরাবৃত্তি করার জন্য: আমরা বহুদিন আগে বিভিন্ন লিপস এবং স্কিমগুলি দেখেছিলাম; তার পর থেকে তারা সব বিবর্তিত হয়েছে এবং উন্নত হয়েছে।


1
বাহ, এটি অবশ্যই কোনও ভয়ঙ্কর ডেল্ফি কোড হতে পারে যদি এটি কোনওভাবে লিস্প প্রয়োগের চেয়ে 3-6x ধীর গতিতে পরিচালনা করতে সক্ষম হয় ! :(
ম্যাসন হুইলার

2
+1: এই পোস্টটির সবচেয়ে মজার বিষয় হ'ল লিস্পে একটি বড় প্রকল্প হাতে পাওয়ার পরে আপনি লিস্প থেকে স্কিমে চলে এসেছেন। (অথবা হতে পারে আমি কেবল দীর্ঘকালই কম.লং.লাস্পের দিকে ঝুঁকছি))
ল্যারি কোলম্যান

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

1
চমত্কার উত্তর! আমি এটি বেছে নেব, কমপক্ষে একটি ভাল প্রদর্শিত না হওয়া পর্যন্ত :) একটি প্রশ্ন: আপনি বলছেন যে আপনি "দীর্ঘ সময় আগে" ক্ষেত্রের অবস্থার ভিত্তিতে চেজ স্কিমের সাথে যাওয়ার সিদ্ধান্ত নিয়েছিলেন। আপনি একটি বছর নির্দিষ্ট করতে পারেন?
ইলেকট্রিক

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

37

আমি সাধারণত উত্তর হিসাবে একটি লিঙ্ক আটকানো পছন্দ করি না, তবে আমি এই বিষয়টিতে একটি ব্লগ নিবন্ধ লিখেছিলাম। এটি সম্পূর্ণ নয়, তবে এটি কয়েকটি প্রধান পয়েন্ট পেয়ে যায় the

http://symbo1ics.com/blog/?p=729

সম্পাদনা করুন : এখানে মূল নীতিগুলি:

  1. উপস্থিতি : উভয় লিপস অন্যান্য লিপস একগুচ্ছ পরে এসেছিল। স্কিমটি সর্বনিম্ন, অ্যাক্সিয়োম্যাটিক রুট নিয়েছে। সিএল বারোক রুট নিয়েছে।
  2. কেএসই : সাধারণত স্কিমটি সংবেদনশীল। সিএল নয় (যদিও এটি হতে পারে)। এটি কখনও কখনও মিস হয়ে যায় তবে এর ব্যবহারিকতাটি বিতর্কিত হয় (আমার দ্বারা)।
  3. NAMES এর : সাফ প্রতীক মধ্যে প্রতীক নাম অনেকবার অদ্ভুত এবং বিভ্রান্তিকর। TERPRI, PROGNইত্যাদি ইত্যাদি স্কিমের সাধারণত খুব বুদ্ধিমান নাম থাকে। এটি সিএলে কিছু মিস হয়েছে missed
  4. ফাংশন : সিএল এর একটি পৃথক ফাংশন নেমস্পেস রয়েছে। এটি স্কিমে মিস হয় না । একক নেমস্পেস থাকা সাধারণত খুব ক্লিন ফাংশনাল প্রোগ্রামিংয়ের জন্য মঞ্জুরি দেয় যা প্রায়শই সিএলে শক্ত বা বিশ্রী হয়। তবে এটি ব্যয় করে আসে --- আপনাকে কখনও কখনও স্কিমের " list" থেকে " lst" এর মতো নামগুলি অবলম্বন করতে হয় ।
  5. ম্যাক্রো : আমি নিম্নস্তরের মলিন ম্যাক্রো স্কিম সবচেয়ে মিস করি। হ্যাঁ, syntax-rulesআপনি যতক্ষণ না কিছু জিনিস হ্যাক করতে চান ততক্ষণ পর্যন্ত তা ঠিক আছে এবং জঘন্য। অন্যদিকে, হাইজেনিক ম্যাক্রোগুলি কখনও কখনও সিএলে মিস হয়। এগুলি করার কোনও মানক উপায় না থাকার অর্থ হুইলটি পুনরায় উদ্ভাবন করা।
  6. সাবলীলতা : এটি প্রায়শই এমন হয় যে উভয় ভাষা মানক করেও সিএল আরও বহনযোগ্য। সিএল বড়, এবং তাই বাহ্যিক লাইব্রেরি ছাড়া ব্যবহার করার জন্য আরও মানক বৈশিষ্ট্য রয়েছে। এর অর্থ আরও কার্যকরভাবে নির্ভরশীল জিনিসগুলি বহনযোগ্যভাবে করা যায় can এছাড়াও, স্কিম একটি ট্রিলিয়ন বাস্তবায়ন করে ভোগ করে, যার বেশিরভাগই কিছুটা বেমানান। এটি সিএলকে খুব আকাঙ্ক্ষিত করে তোলে।
  7. লাইব্রেরিগুলি : আমার শেষ পয়েন্টটির সাথে খুব সম্পর্কিত। স্কিমটিতে এসআরএফআই রয়েছে তবে সর্বজনীনভাবে স্বীকৃত নয়। লাইব্রেরিগুলির সাথে কাজ করার কোনও পোর্টেবল উপায় নেই। অন্যদিকে সিএল এর উপায় আছে। এবং কুইল্লিস্প godশ্বরের কাছ থেকে দেওয়া উপহার (জাচাচ) --- ব্যবহারের জন্য গ্রন্থাগারের এক ধরণের সংগ্রহস্থল।
  8. বাস্তবায়ন: স্কিম এতগুলি বাস্তবায়ন করে ভোগে। সত্যিকারের কোন প্রকার বাস্তবায়ন নেই। অন্যদিকে সিএলে কিছু খুব ভাল উচ্চ পারফরম্যান্স বা নির্দিষ্ট-ব্যবহার বাস্তবায়ন রয়েছে (উচ্চ পারফরমেন্স: এসবিসিএল, বাণিজ্যিক: অ্যালেগ্রো, এম্বেড: ইসিএল, পোর্টেবল: সিএলআইএসপি, জাভা: এবিসিএল, ...)।

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

[যদি এগুলি খুব সাধারণ হয় তবে আমি ক্ষমা চাইব না। দেখে মনে হচ্ছে আপনি আরও অনেক সুনির্দিষ্ট বিবরণ পেতে পারেন। পোস্টে কিছু নির্দিষ্ট রয়েছে]


একটি (সত্যই) সংক্ষিপ্ত টিজার সংক্ষিপ্তসারটি কী? D
ডেভ ও।

2
হাইলাইটগুলি ইনলাইন করুন। উত্তরগুলি স্ব-স্থায়ী হওয়া উচিত।

1
@ ডেভ ও। এবং @ থরবজর্ন রাভন অ্যান্ডারসন: অনুরোধ অনুসারে একটি সংক্ষিপ্তসার যুক্ত করেছেন। ধন্যবাদ।
চতুর্দিকে

2
"বারোক রুট"! এটি রাখার কি দুর্দান্ত উপায়।
মার্ক এ সি

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

25

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

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

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

উপরের সমস্ত ইমাক্স বৈশিষ্ট্য ক্লোজারের জন্যও উপলব্ধ। ক্লোজারের সাথে আমার সম্পাদনার অভিজ্ঞতা লিস্পের মতো। জাভা ইন্টারপ ভালভাবে কাজ করেছে এবং আমি পরিণত হওয়ার পরে একটি ক্লোজার প্রকল্প করতে চাই।

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

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


বিস্তারিত জানার জন্য ধন্যবাদ! আমি কি আপনাকে সঠিকভাবে বুঝতে পারি যে আপনি কী ভেবেছিলেন যে এসবিসিএল-এর এফএফআই ক্লোজারের চেয়ে ব্যবহার করা সহজ? যদি তা হয় তবে আমি তাতে অবাক হয়ে যাব, আপনি ক্লোজার থেকে সরাসরি জাভা পদ্ধতিতে কল করতে পারেন তবে সেগুলি মোড়ানো না রেখে। (বা আপনার কী নেটিভ কোড কল করতে হবে?)
ইলেক্ট্রিক

6
@ সুপার ইলেক্ট্রিক: ক্লোজার থেকে "বিল্ট ইন" জাভা পদ্ধতি কল করা তুচ্ছ; ডাউনলোড করা লাইব্রেরিতে থাকা জাভা পদ্ধতিগুলি কল করা: এত বেশি নয়। আমার প্রথম সি পদ্ধতি সিএফএফআইয়ের সাথে এসবিসিএল থেকে কাজ করার জন্য আমার প্রয়োজনের চেয়ে ক্লাসপথ এবং আমদানি লাইনগুলি পাওয়ার চেয়ে সত্যই আমি বেশি সময় ব্যয় করেছি। তবে আমি কোনও জাভা বিশেষজ্ঞ নই, তাই আপনার মাইলেজ মেটাতে পারে।
ল্যারি কোলম্যান

21

আমি সিএল এবং র‌্যাকেট দুটিতেই প্রোগ্রাম করি।

আমি এখন কমন লিস্পে একটি ওয়েবসাইট বিকাশ করছি এবং আমি রেকেটে আমার পূর্ববর্তী নিয়োগকর্তার জন্য ইন-হাউস প্রোগ্রামগুলির একটি স্যুট লিখেছি।

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

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

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

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

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

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

আমি UNWIND-PROTECT পুনরায় বাস্তবায়নও শেষ করেছি এবং র‌্যাকেটের বাকী শূন্যস্থান পূরণ করার জন্য আমার নিজের পুনঃসূচনা সিস্টেমটি আবিষ্কার করেছিলাম। র‌্যাকেট সম্প্রদায়টি শিখতে হবে যে পুনঃসূচনাগুলি খুব দরকারী, এবং কার্যকর করা সহজ।

র‌্যাকেটের লেট-ভ্যালু ফর্মটি অত্যধিক ভারবোজ ছিল, তাই আমি বহুভিত্তিক-মান-বিন্দু প্রয়োগ করেছি। এটি একেবারে প্রয়োজনীয় ছিল, কারণ র্যাকেটের জন্য আপনাকে উত্পন্ন সমস্ত মানগুলি গ্রহণ করতে হবে , আপনি সেগুলি ব্যবহার করুন বা না করুন।

পরে, আমি কমন লিস্পে একটি ইবে এক্সএমএল এপিআই ক্লায়েন্ট লেখার চেষ্টা করেছি, কেবল এটির জন্য এইচটিএমএলপ্রেজের মতো কিছু নেই। এইচটিএমএলপ্রেগ ফ্রিকইন 'দরকারী useful আমি রেকেটে সেই প্রকল্পটি শেষ করেছি। আমি র‌্যাকেটের লিটারেট প্রোগ্রামিং সুবিধাগুলি নিয়ে পরীক্ষা-নিরীক্ষা করেছি, কেবলমাত্র আমি আবিষ্কার করতে পেরেছিলাম যে আমি পৃথিবীর একমাত্র প্রোগ্রামার যিনি সাধারণ কোডের তুলনায় সঠিকভাবে লিখিত সাক্ষরতার কোডটি সম্পাদনা করা কঠিন, বা ভুলভাবে লিখিত "অতিরিক্ত মন্তব্য" সাক্ষর কোডের চেয়ে বেশি খুঁজে পেয়েছেন।

আমার নতুন প্রকল্পটি কমন লিস্পে করা হচ্ছে যা সঠিক পছন্দ ছিল কারণ র‌্যাকেট সম্প্রদায়টি কেবল সমান্তরালে বিশ্বাস করে না, যা এই প্রকল্পের জন্য প্রয়োজনীয়। কেবলমাত্র আমি ভেবেছিলাম র‌্যাকেট থেকে আমি মিস করেছি কেবল ধারাবাহিকতা। যাইহোক, পুনঃসূচনাগুলি ব্যবহার করে আমার যা প্রয়োজন তা করতে সক্ষম হয়েছি এবং পূর্ববর্তী ক্ষেত্রে সম্ভবত একটি সাধারণ বন্ধ করে এটি করতে পারতাম।


2
আমি নিজে চেষ্টা করে দেখিনি, তবে আমি ইমাক্স সহ কমান্ড-লাইন র‌্যাকেট প্রোগ্রামটি ব্যবহার করা লোকদের ব্লগ পোস্টগুলি দেখেছি। উদাহরণস্বরূপ: bc.tech.coop/scheme/scheme-emacs.htm
ল্যারি কোলেম্যান

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

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

আপনি যদি COND গুলি জুড়ে কোডটি পুনরাবৃত্তি করছেন আপনি কি বলছেন যে আপনার কেবল অন্য ফাংশন প্রয়োজন?
এলে

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

5

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

কেবলমাত্র আর 5 আরএস হাইজেনিক ম্যাক্রোগুলির সাথে স্কিম বাস্তবায়ন সবেমাত্র আমার জন্য দরকারী, কারণ আমার রূপক শৈলীর পরিচ্ছন্নতার সাথে পর্যাপ্তরূপে অনুবাদ করা যায় না।

ভাগ্যক্রমে, স্কিম বাস্তবায়ন রয়েছে (যেমন, র‌্যাকেট) যার সীমাবদ্ধতা নেই।


1
হাই, আমি স্কেপটি ইদানীং র‌্যাকেট ব্যবহার করে আমার পা ভেজাতে শুরু করেছি। আপনি কি র‌্যাকেটে অ-হাইজিয়েনিক ম্যাক্রোগুলি ব্যবহারের একটি দ্রুত উদাহরণ দেওয়ার কথা মনে করবেন? উপলভ্য ম্যাক্রোগুলির ধরণটি সিএল এবং স্কিমের মধ্যে অন্যতম তীব্র বিতর্কিত পয়েন্টগুলির মতো মনে হয়।
কমলা 80

@ অরেঞ্জ ৮০, একটি পদ্ধতির ডকস.ক্রেট-lang.org/mzlib/mzlib_defmacro.html ব্যবহার করা এবং অবশ্যই, আর 6 আরএস মোডে একটি কম সীমাবদ্ধ উপায় আছে।
এসকে-যুক্তি

@ এসকে-লজিক আপনি এমন ম্যাক্রোগুলিকে নিয়ে কী করছেন যা এতটা অপ্রয়োজনীয়?
টানা স্লেজগাড়ির

1
@ আর্টবি, আমি ইডিএসএলগুলি সংকলক ফাংশন হিসাবে প্রয়োগ করছি যা তাদের উত্স এএসটি দিয়ে বেশ কিছু করতে পারে। স্বাস্থ্যবিধি এই জাতীয় পদ্ধতির মধ্যে মোট উপদ্রব। এটি কীভাবে কাজ করে তা একবার দেখে নিতে পারেন: github.com/combintorylogic/mbase
এসকে-যুক্তি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.