জাভাতে অপরিজ্ঞাত আচরণ


14

আমি এই প্রশ্নটি এসওতে পড়ছিলাম যা সি ++ তে কিছু সাধারণ অপরিজ্ঞাত আচরণ নিয়ে আলোচনা করে আমি ভাবলাম: জাভাতেও কি অপরিজ্ঞাত আচরণ রয়েছে?

যদি তা হয় তবে জাভাতে অপরিজ্ঞাত আচরণের কিছু সাধারণ কারণ কি?

যদি তা না হয় তবে জাভার কোন বৈশিষ্ট্যগুলি এ জাতীয় আচরণগুলি থেকে মুক্ত করে এবং কেন সি এবং সি ++ এর সর্বশেষ সংস্করণগুলি এই বৈশিষ্ট্যগুলির সাথে প্রয়োগ করা হয়নি?


4
জাভা খুব কঠোরভাবে সংজ্ঞায়িত করা হয়। জাভা ভাষার স্পেসিফিকেশন পরীক্ষা করুন।


4
@ ব্যবহারকারী 1249, "অপরিজ্ঞাত আচরণ" আসলে বেশ কড়াভাবে সংজ্ঞায়িতও করা হয়েছে।
পেসারিয়ার


আপনি যখন "চুক্তি" লঙ্ঘন করেন তখন জাভা কী বলে? যেমন আপনি যখন ওভারলোড করেন। .ষালকোডের সাথে অসম্পূর্ণ হতে না হয়? docs.oracle.com/javase/7/docs/api/java/lang/… তা কি চালাকিভাবে অপরিজ্ঞাত , তবে প্রযুক্তিগতভাবে সি ++ এর মতো নয়?
মাকিং হাঁস

উত্তর:


18

জাভাতে, আপনি ভুলভাবে সিঙ্ক্রোনাইজড প্রোগ্রামের আচরণটি অপরিজ্ঞাতভাবে বিবেচনা করতে পারেন।

জাভা 7 জেএলএস 17.4.8 এ একবার " অপরিজ্ঞাত " শব্দটি ব্যবহার করে ফাঁসি এবং কার্যকারিতা প্রয়োজনীয়তা :

আমরা ব্যবহার f|dফাংশনের ডোমেইন সীমাবদ্ধ কর্তৃক প্রদত্ত বোঝাতে fকরতে d। সব জন্য xমধ্যে d, f|d(x) = f(x)এবং সমস্ত জন্য xনেই d, f|d(x)হয় অনির্দিষ্ট ...

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

যদি কোনও প্রদত্ত যুক্তি সীমা ছাড়িয়ে যায় তবে ফলাফলটি অনির্ধারিত ...

এক্সিকিউটর সার্ভিস.in.ভোকেএল (সংগ্রহ) রাষ্ট্রের জন্য জাভাডোকস :

এই ক্রিয়াকলাপটি চলমান অবস্থায় যদি প্রদত্ত সংগ্রহটি সংশোধিত হয় তবে এই পদ্ধতির ফলাফলগুলি অপরিজ্ঞাত করা হয়েছে ...

কম আনুষ্ঠানিক ধরণের "অপরিজ্ঞাত" আচরণটি উদাহরণস্বরূপ কনকন্টারমোডিফিকেশন এক্সেপশনে পাওয়া যায় , যেখানে এপিআই ডক্সটি "সেরা প্রচেষ্টা" শব্দটি ব্যবহার করে:

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


উপাঙ্গ

প্রশ্নের একটি মন্তব্য এরিক লিপার্টের একটি নিবন্ধকে বোঝায় যা বিষয় সম্পর্কিত বিষয়ে সহায়ক ভূমিকা সরবরাহ করে: বাস্তবায়ন-সংজ্ঞায়িত আচরণ

আমি এই নিবন্ধটি ভাষা-অজ্ঞাত যুক্তির জন্য প্রস্তাব দিই, যদিও লেখক জাভা নয়, সি # কে টার্গেট করে তা মনে রাখা ভাল।

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

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

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

প্রথম প্রধান ফ্যাক্টরটি হ'ল: বাজারে ভাষার দুটি বিদ্যমান বাস্তবায়ন রয়েছে যা একটি বিশেষ প্রোগ্রামের আচরণের সাথে একমত নয়? ...

পরবর্তী প্রধান কারণটি হ'ল: বৈশিষ্ট্যটি কি প্রাকৃতিকভাবে বাস্তবায়নের জন্য বিভিন্ন সম্ভাবনা উপস্থাপন করে, যার কয়েকটি পরিষ্কারভাবে অন্যদের চেয়ে ভাল? ...

তৃতীয় উপাদানটি হ'ল: বৈশিষ্ট্যটি কী এত জটিল যে এর সঠিক আচরণের বিশদ ভাঙ্গন নির্দিষ্ট করা কঠিন বা ব্যয়বহুল হবে? ...

চতুর্থ ফ্যাক্টরটি হ'ল: বৈশিষ্ট্যটি বিশ্লেষণ করার জন্য সংকলকটির উপর একটি উচ্চ বোঝা চাপায়? ...

পঞ্চম ফ্যাক্টরটি হ'ল: বৈশিষ্ট্যটি রানটাইম পরিবেশের উপর একটি উচ্চ বোঝা চাপায়? ...

ষষ্ঠ ফ্যাক্টরটি হ'ল: আচরণকে সংজ্ঞায়িত করা কিছু বড় অপ্টিমাইজেশনকে আবদ্ধ করে দেয়? ...

এগুলি কেবল কয়েকটি কারণ যা মনে আসে; ভাষা নকশা কমিটিগুলি একটি বৈশিষ্ট্য "বাস্তবায়ন সংজ্ঞায়িত" বা "অপরিজ্ঞাত" করার আগে বিতর্ক করে অবশ্যই অনেকগুলি রয়েছে।

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

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


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

2
পছন্দ করেছেন একমাত্র কারণ কেন আমি হিসাবে "অনির্ধারিত" এটিকে ট্যাগ করতে দ্বিধাবোধ করে মেমরি মডেল ভঙ্গি সীমাবদ্ধতার পছন্দ করেন ঘটতে-পূর্বে এবং কার্যকারণ সঠিকভাবে সিঙ্ক প্রোগ্রাম সঞ্চালনের উপর
মশা

সত্য,
জল্পনাটি

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

9
@ মার্টিনভারবার্গ - কোনও সমর্থিত হার্ডওয়্যার প্ল্যাটফর্মে জেভিএম জেএলএস / জেএমএম অনুমান অনুসারে আচরণ করে তা নিশ্চিত করা জেভিএম প্রয়োগকারীদের কাজ। যদি বিভিন্ন হার্ডওয়্যার অন্যরকম আচরণ করে তবে এটি মোকাবেলা করা ... এবং এটিকে কাজ করা জেভিএম প্রয়োগকারীদের কাজ।
স্টিফেন সি

10

আমার মাথার শীর্ষে, আমি মনে করি জাভাতে কোনও অপরিজ্ঞাত আচরণ আছে, কমপক্ষে সি ++ এর মতো একই অর্থে নয়।

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

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

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


2
আমি মনে করি জাওয়ার অন্যান্য প্রধান লক্ষ্য: সুরক্ষা এবং বিচ্ছিন্নতা নোট করা গুরুত্বপূর্ণ। আমিও মনে করি এটিও 'অপরিবর্তিত' আচরণের অভাবের কারণ (সি ++ এর মতো)।
স্টেফ

3
@ কে.স্টেফ: হাইপার-মডার্ন সি / সি ++ দূরবর্তীভাবে সুরক্ষা সম্পর্কিত যে কোনও কিছুর জন্য পুরোপুরি অনুপযুক্ত। প্রদত্ত int x=-1; foo(); x<<=1;অধি-আধুনিক দর্শনের rewriting আনুকূল্য দেখাবেন fooযাতে কোনো পথ যা প্রস্থান না অনধিগম্য হতে হবে। এই যদি fooহয় if (should_launch_missiles) { launch_missiles(); exit(1); }একটি কম্পাইলার (এবং কিছু লোক অনুযায়ী উচিত) কেবল করার প্রক্রিয়া সহজ করতে পারে যে launch_missiles(); exit(1);। Traditionalতিহ্যবাহী ইউবিটি এলোমেলো কোড সম্পাদন ছিল, তবে এটি সময় এবং কার্যকারণের আইন দ্বারা আবদ্ধ ছিল। নতুন উন্নত ইউবি উভয়ের দ্বারা আবদ্ধ।
সুপারক্যাট

3

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

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


তথ্যসূত্রগুলি অন্য নামে পয়েন্টারগুলি রয়েছে
কৌতূহলী

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

@ জুলেস তারপর এটি পরিভাষার একটি বিষয়: আপনি একটি জিনিসকে পয়েন্টার বা রেফারেন্স বলতে পারেন এবং "নিরাপদ" ভাষাগুলিতে "রেফারেন্স" এবং ভাষাগুলিতে "পয়েন্টার" ব্যবহার করার সিদ্ধান্ত নিতে পারেন যা পয়েন্টার গাণিতিক এবং ম্যানুয়াল মেমরি পরিচালনার জন্য অনুমতি দেয়। (এএফআইকে "পয়েন্টার গাণিতিক" কেবল সি / সি ++ এ করা হয়))
কৌতূহলী

2

আপনাকে "অপরিবর্তিত আচরণ" এবং এর উত্স বুঝতে হবে।

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

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

সম্পাদিত বিশেষত প্রশ্নের উত্তর দেওয়া

  1. জাভা অপরিবর্তিত আচরণ থেকে মুক্ত কারণ সংকলকগুলির আগে মান তৈরি করা হয়েছিল
  2. আধুনিক সি / সি ++ সংকলকগুলি প্রয়োগগুলি আরও কম / কম মানীকৃত করেছে, তবে মানককরণের আগে প্রয়োগ করা বৈশিষ্ট্যগুলি এখনও "অপরিজ্ঞাত আচরণ" হিসাবে ট্যাগ থাকে কারণ আইএসও এই দিকগুলিতে মম রেখেছিল।

2
আপনি ঠিক থাকতে পারেন যে জাভাতে কোনও ইউবি নেই, তবে একটি সত্তা যখন সমস্ত কিছু নিয়ন্ত্রণ করে, তখন ইউবি হওয়ার কারণও থাকতে পারে, তাই আপনি যে কারণটি দিয়েছেন তা সিদ্ধান্তে পৌঁছায় না।
এপ্রোগ্রামার

2
এছাড়াও, সি এবং সি ++ উভয়ই আইএসও দ্বারা মানীকৃত। একাধিক সংকলক থাকতে পারে, এক সময়ে মাত্র একটি মান আছে।
এমসাল্টারস

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

2
@ সার্ভেক্সজাত্রাস্রা, স্বাক্ষরিত ওভারফ্লোটি ইউবি কারণ মানটি স্পষ্ট করে বলেছে (এটি ইউবির সংজ্ঞা সহকারে দেওয়া উদাহরণও)। একটি অবৈধ পয়েন্টারকে ডিফারিং করাও একই কারণে একটি ইউবি, মানটি তাই বলে।
এপ্রোগ্রামার

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

1

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

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

  • Thread.stop(), যা অবমাননিত। উদ্ধৃতি:

    অবমূল্যায়ন হয় কেন Thread.stop?

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

    https://docs.oracle.com/javase/8/docs/technotes/guides/concurrency/threadPrimitiveDeprecation.html

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