নিরাপদ প্রোগ্রামিং ভাষা কী?


55

নিরাপদ প্রোগ্রামিং ভাষা (পিএল) জনপ্রিয়তা পাচ্ছে। আমি ভাবছি নিরাপদ PL এর আনুষ্ঠানিক সংজ্ঞা কি ? উদাহরণস্বরূপ, সি নিরাপদ নয়, তবে জাভা নিরাপদ। আমার সন্দেহ হয় যে সম্পত্তিটি "নিরাপদ" PL এর পরিবর্তে পিএল প্রয়োগের ক্ষেত্রে প্রয়োগ করা উচিত। যদি তা হয় তবে আসুন নিরাপদ পিএল বাস্তবায়নের সংজ্ঞা নিয়ে আলোচনা করা যাক। এই ধারণাটি আনুষ্ঠানিক করার জন্য আমার নিজের প্রচেষ্টা একটি অদ্ভুত পরিণতির দিকে পরিচালিত করেছিল, তাই আমি অন্যান্য মতামত শুনতে চাই। দয়া করে, এটা বলবেন না যে প্রতিটি পিএল-এর অনিরাপদ আদেশ রয়েছে। আমরা সর্বদা একটি নিরাপদ উপসেট নিতে পারি।


মন্তব্যগুলি বর্ধিত আলোচনার জন্য নয়; এই কথোপকথন চ্যাটে সরানো হয়েছে ।
গিলস 'অশুচি হওয়া বন্ধ করুন'

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

"সম্পত্তি" নিরাপদ "পিএল নিজেই পরিবর্তে পিএল প্রয়োগের ক্ষেত্রে প্রয়োগ করা উচিত" - যদি কোনও নিরাপদ বাস্তবায়ন বিদ্যমান থাকে তবে আপনি কোনও পিএল নিরাপদ কল করতে পারেন।
দিমিত্রি গ্রিগরিয়েভ

উত্তর:


17

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

কয়েকটি গুরুত্বপূর্ণ বিষয়গুলি হ'ল:

  • অ্যান্ড্রু রাইট এবং ম্যাথিয়াস ফেলেলিসেনের "টাইপ সাউন্ডনেস" এর সংজ্ঞা , যা অনেক জায়গায় (উইকিপিডিয়া সহ) "টাইপ সুরক্ষা" এর একটি স্বীকৃত সংজ্ঞা হিসাবে উল্লেখ করা হয়েছে এবং তাদের 1994 এর প্রমাণ যে এমএলটির একটি উপসেট এটি পূরণ করে meets

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

  • একইভাবে, থ্রেড-নিরাপদ কোডটি সাধারণত কোড হিসাবে সংজ্ঞায়িত হয় যা ডেটা রেস এবং ডেডলক সহ থ্রেড এবং ভাগ করা মেমরির সাথে জড়িত কিছু ধরণের বাগ প্রদর্শন করতে পারে না। এই বৈশিষ্ট্যগুলি প্রায়শই ভাষা স্তরে প্রয়োগ করা হয়: মরিচা গ্যারান্টি দেয় যে ডেটা দৌড়গুলি এর ধরণের সিস্টেমে ঘটতে পারে না, সি ++ গ্যারান্টি দেয় যে এর std::shared_ptrস্মার্ট পয়েন্টারগুলি একাধিক থ্রেডে একই জিনিসগুলিকে অকালবোধী মুছে ফেলবে না বা শেষ রেফারেন্সটি মুছে ফেলতে ব্যর্থ হবে এটি ধ্বংস হয়ে যায়, সি এবং সি ++ এর পাশাপাশি atomicভাষাতে ভেরিয়েবলগুলি নির্মিত হয়, পারমাণবিক ক্রিয়াকলাপগুলি সঠিকভাবে ব্যবহার করা হলে নির্দিষ্ট ধরণের মেমরি-ধারাবাহিকতা প্রয়োগ করার গ্যারান্টিযুক্ত। এমপিআই স্পষ্ট বার্তাগুলির জন্য আন্ত: প্রসেস যোগাযোগকে সীমাবদ্ধ করে এবং বিভিন্ন থ্রেড থেকে ভেরিয়েবলের অ্যাক্সেস নিরাপদ কিনা তা নিশ্চিত করার জন্য ওপেনএমপি-র সিনট্যাক্স রয়েছে।

  • যে সম্পত্তিটি স্মৃতি কখনও ফাঁস হবে না তাকে প্রায়শই স্থানের জন্য নিরাপদ বলা হয়। এটি নিশ্চিত করার জন্য স্বয়ংক্রিয় আবর্জনা সংগ্রহের একটি ভাষা বৈশিষ্ট্য।

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

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

  • কিছু ভাষা যেমন স্পার্ক বা ওক্যামল প্রোগ্রামের যথার্থতা প্রমাণ করার সুবিধার্থে ডিজাইন করা হয়েছে। এটি বাগ থেকে "নিরাপদ" হিসাবে বর্ণিত হতে পারে বা নাও হতে পারে।

  • প্রমাণগুলি যে কোনও সিস্টেম একটি আনুষ্ঠানিক সুরক্ষা মডেল লঙ্ঘন করতে পারে না (তাই এই পদক্ষেপ, "যে কোনও সিস্টেম সম্ভবত সম্ভবত সুরক্ষিত সেগুলি সম্ভবত তা নয়” ")


1
এটি বাগ থেকে "নিরাপদ" হিসাবে বর্ণিত হতে পারে বা নাও হতে পারে। আপনি কি দয়া করে এটিকে কিছুটা ব্যাখ্যা করতে পারেন? "বাগ থেকে" বলতে কী বোঝ?
scaaahu

2
@scaahu এখানে এমন একটি ওয়েবসাইটের একটি উদাহরণ রয়েছে যা সফ্টওয়্যারটিকে "যথাযথভাবে নিরাপদ" হিসাবে আনুষ্ঠানিকভাবে সঠিক প্রমাণিত বলে উল্লেখ করে this এই প্রসঙ্গে, বিমানটি সংঘর্ষ থেকে রোধ করার জন্য এটি সফ্টওয়্যারকে উল্লেখ করছে, সুতরাং এর অর্থ সংঘর্ষ থেকে নিরাপদ।
ডেভিস্লোর

1
আমি এই উত্তরটি গ্রহণ করছি কারণ এটি নিরাপত্তার ধরণের তালিকাবদ্ধ করে। আমার মনে যে ধরণটি ছিল তা হ'ল মেমরির সুরক্ষা।
বেরোয়াল

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

94

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


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

17
@ ওয়ালফ্র্যাট এটি এরই একটি অংশ। জাভাতেও কোনও অপরিবর্তিত আচরণ নেই, যা এমন একটি ভাষা যা আমরা নিজেকে 'নিরাপদ' বলি of টাইপ সিস্টেমের ক্ষেত্রে, আমি মনে করি না একটি শক্তিশালী স্ট্যাটিক টাইপ সিস্টেমটিই লোকেরা 'নিরাপদ' বলতে বোঝায়। পাইথনের মতো গতিময় টাইপ করা ভাষাগুলি সাধারণত সর্বোপরি 'নিরাপদ'।
সর্বোচ্চ ব্যারাক্লফ

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

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

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

42

আপনি যদি পরিচয় করে বেনিয়ামিন পিয়ার্সের প্রকার এবং প্রোগ্রামিং ভাষার একটি অনুলিপিটিতে হাত পেতে পারেন তবে "নিরাপদ ভাষা" শব্দটি সম্পর্কে তাঁর বিভিন্ন দৃষ্টিকোণ সম্পর্কে ভাল ধারণা রয়েছে।

এই শব্দটির একটি প্রস্তাবিত ব্যাখ্যা যা আপনাকে আকর্ষণীয় মনে করতে পারে তা হ'ল:

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

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


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

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

7
@ গাইলস: এটি ঘটনা নয়। ধরুন, প্রতিটি নন-টার্মিনেটিং প্রোগ্রামের জন্য সমাপনীকরণের প্রমাণ রয়েছে। তারপরে আপনি প্রদত্ত প্রোগ্রামটি বন্ধ রয়েছে কিনা তা খুঁজে পাওয়ার জন্য আপনি সমাপনীকরণের প্রমাণগুলি গণনা করতে পারেন। সুতরাং থামার সমস্যাটি নিষ্পত্তিযোগ্য। দ্বন্দ্ব। সুতরাং কিছু নন-টার্মিনেটিং প্রোগ্রামগুলি কার্যকরভাবে নন-টার্মিনেটিং হয় না।
কেভিন

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

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

18

নিরাপদ বাইনারি নয়, এটি একটি ধারাবাহিকতা

অনানুষ্ঠানিকভাবে বলতে গেলে, সুরক্ষা বোঝা বাগের বিরোধিতা দ্বারা বোঝানো হয়, ২ টি প্রায়শই উল্লেখ করা থাকে:

  • মেমোরি সুরক্ষা: ভাষা এবং এটির প্রয়োগটি মেমরি সম্পর্কিত বিভিন্ন ত্রুটি যেমন-ব্যবহারের পরে-মুক্ত, ডাবল-মুক্ত, সীমার অ্যাক্সেস, ...
  • প্রকার সুরক্ষা: ভাষা এবং এটির প্রয়োগ বিভিন্ন ধরণের সম্পর্কিত ত্রুটি যেমন চেক না করা ক্যাসেটগুলি, ...

এগুলি একক শ্রেণীর বাগ নয় যা ভাষাগুলি প্রতিরোধ করে, ডেটা-রেসের স্বাধীনতা বা অচলাবস্থার স্বাধীনতা বরং কাঙ্ক্ষিত, নির্ভুলতার প্রমাণগুলি বেশ মিষ্টি ইত্যাদি ...

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

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


7
আমি বলব এটি একটি জালিস।
প্যাটজে

1
বেশিরভাগ প্রোগ্রামিং ল্যাঙ্গুয়েজ বাস্তবায়নের ক্ষেত্রে অনিরাপদ বৈশিষ্ট্য রয়েছে (যেমন Obj.magicওকামালে)। এবং অনুশীলনে, এগুলি সত্যই দরকার
বেসাইল স্টারিনকিভিচ

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

15

যদিও আমি ডিডব্লিউর জবাবের সাথে একমত নই, তবে আমি মনে করি এটি "নিরাপদ" অংশের একটি অংশ ছাড়িয়ে গেছে।

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

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

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


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

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

9

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

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

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

 uint32_t test(uint16_t x)
 {
   if (x < 50000) foo(x);
   return x*x; // Note x will promote to "int" if that type is >16 bits.
 }

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


3
@ ডেভিডথর্নলি: সম্ভবত আমার উদাহরণটি খুব সূক্ষ্ম ছিল। যদি int32 বিট হয় তবে xস্বাক্ষরিত হয়ে পদোন্নতি পাবেন int। যুক্তি থেকে বিচার করে, স্ট্যান্ডার্ডের লেখকরা প্রত্যাশা করেছিলেন যে অ-অদ্ভুত বাস্তবায়নগুলি নির্দিষ্ট কিছু ক্ষেত্রে বাইরে সমতুল্য ফ্যাশনে স্বাক্ষরযুক্ত এবং স্বাক্ষরবিহীন প্রকারের আচরণ করবে, তবে জিসিসি মাঝে মাঝে এমনভাবে "অনুকূলিত" হয় যেগুলি যদি একটি গুণ uint16_tদ্বারা uint16_tINT_MAX ছাড়িয়ে ফলাফল দেয় তবে ভেঙে যায় এমনকি ফলাফলটি স্বাক্ষরবিহীন মান হিসাবে ব্যবহৃত হওয়ার পরেও।
ক্যাট

4
ভালো উদাহরণ. আমাদের সর্বদা (জিসিসি বা বিড়ম্বনায়) সংকলন করা উচিত এটির একটি কারণ -Wconversion
ডেভিস্লোর

2
@ ডেভিস্লোর: আহ, আমি কেবল লক্ষ্য করেছি যে গডবোল্ট ক্রম অনুসারে সংকলক সংস্করণগুলির তালিকাভুক্ত হয়েছে, সুতরাং তালিকায় জিসিসি-র শেষ সংস্করণ নির্বাচন করে তাড়াতাড়ি না হয়ে সর্বশেষতম ফলন করে। আমি মনে করি না যে সতর্কবাণীটি বিশেষভাবে কার্যকর কারণ যেহেতু এটি এমন অনেক পরিস্থিতিতে পতাকাঙ্কিত করার প্রবণতা রয়েছে return x+1;যা সমস্যাযুক্ত হওয়া উচিত নয় এবং ফলাফলটি uint32_t এ ছড়িয়ে দেওয়া সমস্যার সমাধান না করে বার্তাটি প্রশমিত করে দেবে।
সুপারক্যাট

2
@ সুপের্যাট বিলোপ পরীক্ষাগুলি অর্থহীন, যদি সংকলককে পরীক্ষাগুলি অন্য জায়গায় ফিরিয়ে দিতে হয়।
ব্যবহারকারী 253751

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

7

একটি ভাষায় নির্ভুলতার কয়েকটি স্তর রয়েছে। ক্রমবর্ধমান বিমূর্তির ক্রম:

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

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

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

  • ভাষাটি মডুলারাইজেশন এবং সহযোগিতার উপায় সরবরাহ করতে হবে। উপরের থেকে শক্তিশালী, বিস্তৃত, ব্যবহারকারী-সংজ্ঞায়িত প্রকারগুলি এক্সপ্রেশনাল এপিআই তৈরি করতে সহায়তা করে।

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


1 তবে যেহেতু সাধারণত ভার্চুয়াল মেশিনের নির্ভুলতা প্রমাণ করা যায় না এমন ভাষাগুলি কিছুটা বিপরীত দিক থেকে খুব কঠোর সুরক্ষার প্রয়োজনীয়তার জন্য উপযুক্ত নাও হতে পারে।


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

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

1

দয়া করে, এটা বলবেন না যে প্রতিটি পিএল-এর অনিরাপদ আদেশ রয়েছে। আমরা সর্বদা একটি নিরাপদ উপসেট নিতে পারি।

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


সুরক্ষা বহুমাত্রিক এবং বিষয়গত।

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

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

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


-1

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

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