স্ট্যান্ডার্ড লাইব্রেরি কেন প্রোগ্রামিং ভাষার আদিম নয়? [বন্ধ]


30

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


4
আপনার অর্থ কী "সংকলক কেবল কোনও ফাংশন কলকে নির্দেশাবলীর একটি কেন্দ্রে অনুবাদ করতে পারে না"? মোটামুটি এটি সংকলকটি কি করে, স্ট্যান্ডার্ড লাইব্রেরিটি করে বা না (ঠিক আছে, পাইথন কেবল পার্টওয়ে এবং জাভা থেকে জেভিএম বাইটকোড; অনুরূপ ধারণা)। স্ট্যান্ডার্ড লাইব্রেরিতে কোড -> নির্দেশাবলীর সংকলনের সাথে আসলেই কিছু করার নেই।
বিতরণ করুন

25
@ ডেলিওথ আমার ধারণা সিমোন জিজ্ঞাসা করছে কেন ভাষার স্ট্যান্ডার্ড লাইব্রেরিতে সবকিছু নেই - পরিবর্তে সেই ভাষার একটি আদিম নির্মাণ / ফাংশন LANG করুন। আমি বলতে চাই যে প্রোগ্রামিং ভাষাগুলিতে খুব নতুন যে কোনও ব্যক্তির পক্ষে এটি একটি যুক্তিসঙ্গত প্রশ্ন :)
আন্দ্রেস এফ।

33
স্ট্যান্ডার্ড লাইব্রেরি সাধারণত একটি কর্মক্ষম প্রোগ্রামিং ভাষা এবং একটি দরকারী যা লোকেরা ব্যবহার করবে তার মধ্যে শূন্যস্থান পূরণ করে ।
টেলাস্টিন

6
পাইথনের স্ট্যান্ডার্ড লাইব্রেরির একটি উল্লেখযোগ্য অংশ আসলে সি-তে লেখা এবং ইতিমধ্যে সংকলিত।
এলমোভ্যানকিয়েলমো

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

উত্তর:


32

আমাকে @ ভিনসেন্টের (+1) ভাল উত্তরটিতে কিছুটা প্রসারিত করার অনুমতি দিন :

সংকলক কেন নির্দেশাবলী একটি সেট মধ্যে সহজভাবে একটি ফাংশন কল অনুবাদ করতে পারেন?

এটি কমপক্ষে দুটি পদ্ধতির মাধ্যমে এটি করতে এবং করতে পারে:

  • একটি ফাংশন কল ইনলাইন করে - অনুবাদ চলাকালীন, সংকলক ফাংশনে একটি আসল কল করার পরিবর্তে সরাসরি ইনলাইনের সাথে উত্স কোড কলটি প্রতিস্থাপন করতে পারে। এখনও ফাংশনটির একটি বাস্তবায়ন কোথাও সংজ্ঞায়িত হওয়া দরকার এবং এটি স্ট্যান্ডার্ড লাইব্রেরিতে থাকতে পারে।

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

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

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

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


3
চমৎকার উত্তর. সি-তে এই সিদ্ধান্ত কেন নেওয়া হয়েছিল তার মধ্যে একটি শব্দ যুক্ত করা উচিত : আমি যদি সঠিকভাবে মনে করি তবে এর মূল কারণটি ছিল কারণ এটি বিভিন্ন হার্ডওয়ার আর্কিটেকচারের জন্য সি সংকলক তৈরি করা সহজতর করে তুলেছিল।
ডক ব্রাউন 21

10
@ ডকব্রাউন ১৯ 197৫ সালের মধ্যে প্রোগ্রামিং ভাষা বিকাশের ক্ষেত্রে যথেষ্ট পরিমাণে উদাহরণ রয়েছে (ALGOL-68, যে কেউ?) যা দেখিয়েছিল যে ভাষাকে সবকিছু বেক-ইন করার চেষ্টা সরাসরি ভাষার বৈশিষ্ট্যগুলিকে ফিনিশিংয়ে উভয় ক্ষেত্রে যথেষ্ট ধীরগতির দিকে নিয়ে যায় এবং ভাষা বাস্তবায়নের উত্পাদন।
জোকার_ভিডি

5
অনুরূপ উদাহরণ পাইথন যা করেছিল তা print: 2.x সালে এটি একটি বিবৃতি ছিল যার নিজস্ব বিশেষ ব্যাকরণ ছিল, তবে 3.x এ এটি অন্য একটি ফাংশন কল হয়ে দাঁড়িয়েছিল। অফিসিয়াল ব্যাখ্যার জন্য পিইপি 3105 দেখুন ।
dan04

1
@ ডকব্রাউন, বহনযোগ্যতা প্রায় কোনও কারণ ছিল না। যখন ইউনিক্স এবং সি তৈরি করা হয়েছিল, তখন সেগুলি ঠিক একটি মেশিনের জন্য তৈরি এবং তৈরি করা হয়েছিল, একটি অতিরিক্ত পিডিপি -7, কেন থম্পসন বিস্মিত হয়েছিলেন যে ব্যর্থ মাল্টিক্স প্রকল্প থেকে কোন ধারণাগুলি উদ্ধারযোগ্য। সিও একটি কারণে তৈরি করা হয়েছিল: উচ্চ স্তরের ভাষা থাকতে যাতে ইউনিক্স প্রয়োগ করতে হবে (পুনরায়)। এগুলি আমরা মূলত সফ্টওয়্যার ডিজাইনের একটি পরীক্ষা, বাণিজ্যিক মাল্টি-প্ল্যাটফর্ম ওএস এবং ভাষার কোনও গুরুতর প্রচেষ্টা নয়। উদাহরণস্বরূপ bell-labs.com/usr/dmr/www/chist.html দেখুন ।
ইউরো মিশেল্লি

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

70

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

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


3
সবসময় না। PHPউদাহরণস্বরূপ এর বিশাল ভাষার কার্যাবলী এবং ভাষার মধ্যেই কোনও পার্থক্য নেই।
ওয়াহিদ আমিরি

15
আমি পিএইচপি কোনও সরল ভাষার উদাহরণ হিসাবে নেব না
ডাঃব্রেয়াকলোট

3
@ DRBreakalot পিএইচপি একটি অত্যন্ত সহজ ভাষা। এটির ধারাবাহিক ডিজাইন রয়েছে তা বলার অপেক্ষা রাখে না, তবে এটি অন্য একটি বিষয়।
মনিকার সাথে লাইটনেস রেস

19
@ লাইটনেসেসিনআরবিট আমি পিএইচপি কে একেবারেই "সরল" বলব না: এতে একটি শ্রেণিবদ্ধ অবজেক্ট সিস্টেম রয়েছে, 'আদিম মানগুলির পৃথক সেট', স্বতন্ত্র ফাংশন, অবজেক্ট সিস্টেমে নির্মিত প্রথম শ্রেণীর ক্লোজার, একটি নেমস্পেস প্রক্রিয়া, বিভিন্ন ধারণার "স্ট্যাটিক" বলা, বিবৃতি এবং সেইসাথে এক্সপ্রেশন, include, requireএবং require_once, যদি / জন্য / যখন (কাঠামোবদ্ধ প্রোগ্রামিং), ব্যতিক্রম, 'ত্রুটি মান' একটি পৃথক সিস্টেম, দুর্বল টাইপিং নিয়ম জটিল, জটিল অপারেটর প্রাধান্য নিয়ম, এবং এবং উপর । এর সরলতার সাথে এর তুলনা করুন, বলুন, স্মলটালক, স্কিম,
প্রোলজ

3
মূল কারণ, যা ইঙ্গিতযুক্ত কিন্তু এই উত্তরটিতে স্পষ্টভাবে বলা হয়নি, তা হ'ল ভাষা যতটা সম্ভব সহজ রেখে, অন্যান্য প্ল্যাটফর্মগুলিতে প্রয়োগ করা অনেক সহজ। যেহেতু প্রমিত পাঠাগারগুলি সাধারণত ভাষায় লেখা থাকে তাই এগুলি তুচ্ছভাবে পোর্ট করা যায়।
ব্লুরাজা - ড্যানি পিফ্লুঘুফ্ট

34

অন্যান্য উত্তরগুলি ইতিমধ্যে যা বলেছে তা ছাড়াও একটি লাইব্রেরিতে স্ট্যান্ডার্ড ফাংশন স্থাপন করা উদ্বেগকে আলাদা করা :

  • ভাষার পার্স করা এবং এর জন্য কোড তৈরি করা সংকলকের কাজ। ইতিমধ্যে সেই ভাষায় লেখা যেতে পারে এবং একটি লাইব্রেরি হিসাবে সরবরাহ করা যায় এমন কোনও বিষয় ধারণ করা সংকলকের কাজ নয়।

  • কার্যত সমস্ত প্রোগ্রাম দ্বারা প্রয়োজনীয় মূল কার্যকারিতা সরবরাহ করার জন্য এটি স্ট্যান্ডার্ড লাইব্রেরির (সর্বদা স্পষ্টভাবে উপলব্ধ একটি) কাজ । এটি কার্যকর হতে পারে এমন সমস্ত ফাংশন ধারণ করা স্ট্যান্ডার্ড লাইব্রেরির কাজ নয়।

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

  • দরকারী পুনরায় ব্যবহারযোগ্য ফাংশনগুলির সংগ্রহ সরবরাহ করা ব্যবহারকারীর গ্রন্থাগারগুলির কাজ। কখনও লেখা হয়েছে এমন সমস্ত কোড ধারণ করা ব্যবহারকারী লাইব্রেরির কাজ নয়।

  • এই কোডটির বাকী বিটগুলি সরবরাহ করা কোনও অ্যাপ্লিকেশনটির সোর্স কোডের কাজ যা কেবলমাত্র সেই এক আবেদনের সাথে প্রাসঙ্গিক।

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

  • থ্রেডিং লাইব্রেরি একক-কোর এম্বেডড নিয়ামককে মূল্যহীন। এই এমবেডড কন্ট্রোলারের জন্য কেবলমাত্র pthreadলাইব্রেরি অন্তর্ভুক্ত না করার জন্য ভাষা প্রয়োগের অনুমতি দেওয়া হ'ল সঠিক কাজ।

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

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

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

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


16

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

এই পরিমিতিটি আপনাকে একগুচ্ছ সুবিধা দেয়:

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

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


6

অতিরিক্ত কোণার ক্ষেত্রে উত্তর: বৌদ্ধিক সম্পত্তি পরিচালনা

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


এটা সন্দ্বিহান. আপনি যে পৃষ্ঠার সাথে লিঙ্ক করেছেন সেই পৃষ্ঠায় Math.Powকোনও ক্রয়, বা ইন্টেল সম্পর্কিত কিছু উল্লেখ করা হয়নি এবং ফাংশনটি বাস্তবায়নের উত্স কোডটি পড়া লোকদের সম্পর্কে কথা বলা আছে।
মনিকার সাথে লাইটনেস রেস

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

5

বাগ এবং ডিবাগিং।

বাগগুলি: সমস্ত সফ্টওয়্যারটিতে বাগ রয়েছে, আপনার স্ট্যান্ডার্ড লাইব্রেরিতে বাগ রয়েছে এবং আপনার সংকলকটিতে বাগ রয়েছে। ভাষার ব্যবহারকারী হিসাবে যখন এই সংকলকটির বিপরীতে স্ট্যান্ডার্ড লাইব্রেরিতে থাকে তখন এ জাতীয় বাগগুলি খুঁজে পাওয়া ও তার সাথে কাজ করা আরও সহজ।

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


5

এটি একটি চমৎকার প্রশ্ন!

শিল্পের রাজ্য

উদাহরণস্বরূপ, সি ++ স্ট্যান্ডার্ড কখনই সংকলক বা স্ট্যান্ডার্ড লাইব্রেরিতে প্রয়োগ করা উচিত তা নির্দিষ্ট করে না: এটি কেবল বাস্তবায়নকে বোঝায় । উদাহরণস্বরূপ, সংরক্ষিত প্রতীকগুলি সংকলক (আন্তঃসংশ্লিষ্ট হিসাবে) এবং স্ট্যান্ডার্ড লাইব্রেরি দ্বারা বিনিময়যোগ্য উভয় দ্বারা সংজ্ঞায়িত করা হয়।

তবুও, আমি জানি যে সমস্ত সি ++ বাস্তবায়নগুলি সংকলক দ্বারা প্রদত্ত ন্যূনতম সম্ভাব্য সংখ্যার অন্তর্ভুক্ত থাকবে এবং যতটা সম্ভব মানক পাঠাগার সরবরাহ করবে provided

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

কেন?

আসুন স্ট্যান্ডার্ড লাইব্রেরি থেকে সংকলকটিতে কার্যকারিতার কিছু অংশ সরানোর ধারণাটি বিবেচনা করি।

সুবিধাদি:

  • আরও ভাল ডায়াগনস্টিক্স: ইন্টার্নিক্স বিশেষ-ক্ষেত্রেযুক্ত হতে পারে।
  • আরও ভাল পারফরম্যান্স: ইন্টার্নিক্স বিশেষ-ক্ষেত্রেযুক্ত হতে পারে।

অসুবিধা:

  • সংকলক ভর বৃদ্ধি: প্রতিটি বিশেষ ক্ষেত্রে সংকলক জটিলতা যুক্ত করে; জটিলতা রক্ষণাবেক্ষণ ব্যয় এবং বাগগুলির সম্ভাবনা বৃদ্ধি করে।
  • ধীরে ধীরে পুনরাবৃত্তি: কার্যকারিতার বাস্তবায়ন পরিবর্তনের জন্য নিজেই সংকলক পরিবর্তন করতে হবে, stdপরীক্ষার জন্য কেবল একটি ছোট লাইব্রেরি (এর বাইরে ) তৈরি করা আরও শক্ত করে তোলে making
  • প্রবেশের উচ্চতর বার: কোনও কিছু পরিবর্তন করা যত বেশি ব্যয়বহুল / বেশি কঠিন, লোকেরাও এতে ঝাঁপিয়ে পড়ার সম্ভাবনা কম।

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


5

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

আপনি এটিতে যা কিছু করতে পারেন তা শেষ করার পরে একটি এপিআই শেষ হয় না। আপনি যখন যা করতে পারেন তার সমস্ত কিছু শেষ করার পরে একটি এআইপিআই শেষ হয়।

একটি প্রোগ্রামিং ভাষা কিছু ভাষা ব্যবহার করে নির্দিষ্ট করতে হবে। আপনার ভাষায় লিখিত যে কোনও প্রোগ্রামের পিছনে আপনাকে অর্থটি প্রকাশ করতে সক্ষম হতে হবে। এই ভাষাটি লিখতে খুব কঠিন, এবং ভাল লিখতেও আরও কঠিন। সাধারণভাবে, এটি কম্পিউটারের কাছে নয়, অন্য বিকাশকারীদের, বিশেষত যারা বিকাশকারীগণ আপনার ভাষার জন্য সংকলক বা দোভাষী লেখেন তাদের বোঝানোর জন্য ব্যবহৃত ইংরাজির একটি খুব সুনির্দিষ্ট এবং সুগঠিত রূপ বলে মনে হয়। এখানে সি ++ 11 টি স্পেসের একটি উদাহরণ রয়েছে, [ইন্ট্রো.মলিট্রিথ্রেড / 14]:

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

Blek! সি ++ 11 হ'ল মাল্টিথ্রেডিং কে কীভাবে পরিচালনা করে তা বোঝার জন্য যে কেউ এই ডুবিয়েছেন তা এই শব্দটির এত স্পষ্টরূপে কেন অস্বচ্ছ হতে হবে তা প্রশংসা করতে পারে, তবে এটি ... ভাল ... তাই অস্বচ্ছ!

std::shared_ptr<T>::resetস্ট্যান্ডার্ডের লাইব্রেরি বিভাগে সংজ্ঞাটির সাথে এটির বিপরীতে :

template <class Y> void reset(Y* p);

প্রভাব: সমানshared_ptr(p).swap(*this)

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

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

এবং আমরা অবশ্যই কিছু অস্পষ্ট রেখা দেখতে পাচ্ছি:

  • জাভাতে, কেবল স্ট্যান্ডার্ড লাইব্রেরি ক্লাসগুলি দ্বারা সাবক্লাস করা java.lang.ref.Reference<T>যেতে পারে এবং এর আচরণগুলি জাভা ভাষার স্পেসিফিকেশনের সাথে এত গভীরভাবে জড়িয়ে পড়েছিল যে তাদের "স্ট্যান্ডার্ড লাইব্রেরি" শ্রেণি হিসাবে প্রয়োগ করা প্রক্রিয়াটির অংশে কিছুটা বিধিনিষেধ তৈরি করা দরকার।java.lang.ref.WeakReference<T> java.lang.ref.SoftReference<T>java.lang.ref.PhantomReference<T>Reference
  • সি # তে, একটি শ্রেণি রয়েছে, সিস্টেম.ডেলিগেট যা প্রতিনিধিদের ধারণাকে আবদ্ধ করে। এর নাম সত্ত্বেও, এটি কোনও প্রতিনিধি নয়। এটি একটি বিমূর্ত শ্রেণি (তাত্ক্ষণিকভাবে তৈরি করা যায় না) যা থেকে আপনি উত্পন্ন ক্লাস তৈরি করতে পারবেন না। ভাষার নির্দিষ্টকরণে লিখিত বৈশিষ্ট্যগুলির মাধ্যমে কেবল সিস্টেমই এটি করতে পারে।

2

এটি বিদ্যমান উত্তরগুলির সংযোজন হিসাবে বোঝানো হয়েছে (এবং কোনও মন্তব্যের জন্য এটি খুব দীর্ঘ)।

স্ট্যান্ডার্ড লাইব্রেরির জন্য কমপক্ষে আরও দুটি কারণ রয়েছে:

প্রবেশে বাধা

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

আপনি যদি এই পথে যান তবে আপনি অনেক সম্ভাব্য অবদানকারীদের থেকে নিজেকে কেটে ফেলছেন।

হট কোড লোড হচ্ছে

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


3
"কোনও স্ব-সম্মানের সংকলকটি স্ব-হোস্ট করা উচিত" - মোটেও নয়। এই সমস্ত ভাষা সংকলন করার জন্য সি, সি ++, অবজেক্টিভ-সি, সুইফ্ট, ফোর্টরান এবং আরও কিছুতে এলএলভিএম লেখা সংস্করণগুলি অর্থহীন হবে।
gnasher729 23

@ gnasher729 এটি কি বিশেষ কিছু নয় (সিএলআরের মতো অন্যান্য ভাষাগত লক্ষ্যগুলি সহ)?
জ্যারেড স্মিথ

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

2

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

তবে, দুটি বিষয় যা আমি মনে করি না যে যথেষ্ট মনোযোগ পেয়েছে:

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

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

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

উদাহরণ স্বরূপ:

  • আপনি কোনও কমপ্লায়ার সংকলক হতে পারবেন না।

  • আপনি কীভাবে মান থেকে আপনার বিচ্যুতি নির্দেশ করবেন। নোট করুন সাধারণত আমদানির কিছু ফর্ম থাকে / সিনট্যাক্স অন্তর্ভুক্ত করে আপনি ব্যর্থ হতে পারেন অর্থ্যাৎ পাইথনস এর আমদানি বা সি এর অন্তর্ভুক্ত যা স্ট্যান্ডার্ড লাইব্রেরি মডেলটিতে কিছু অনুপস্থিত থাকলে সমস্যাটিকে সহজেই নির্দেশ করে points

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

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