জাভা বিকাশকারীদের জন্য "প্রতিটি প্ল্যাটফর্মের জন্য একটি নির্দিষ্ট জেআরই লেখার" এবং সি ++ এর জন্য "প্রতিটি প্ল্যাটফর্মের জন্য একটি সি ++ সংকলক লেখার" মধ্যে কী পার্থক্য রয়েছে?
জাভা বিকাশকারীদের জন্য "প্রতিটি প্ল্যাটফর্মের জন্য একটি নির্দিষ্ট জেআরই লেখার" এবং সি ++ এর জন্য "প্রতিটি প্ল্যাটফর্মের জন্য একটি সি ++ সংকলক লেখার" মধ্যে কী পার্থক্য রয়েছে?
উত্তর:
জাভা একবারে যে কোনও জায়গায় চালিত হয় comp সি ++ একবারে যে কোনও জায়গায় সংকলন করা হয়।
"প্রতিটি প্ল্যাটফর্মের জন্য একটি সুনির্দিষ্ট জেআরই লেখা" আপনি প্রতি সময়ই কিছু করেন না। একটি নতুন প্ল্যাটফর্মে জেআরই পোর্ট করা এমন কিছু যা আপনার কেবল একবার করা দরকার। এই টাস্কটি সাধারণত প্রোগ্রামের মূল রক্ষণাবেক্ষণকারী / বিকাশকারীরা এবং / অথবা প্ল্যাটফর্ম দ্বারা সম্পন্ন হয়। কে এবং কীভাবে জেআরই পোর্ট করা হবে তা সিদ্ধান্ত নেওয়ার সময় অনেকগুলি বিষয় কার্যকর হতে পারে। অন্যান্য জিনিসের মধ্যে এটি এটির অধীনে প্রকাশিত লাইসেন্সধারীর উপর নির্ভর করে (আমি শুনি জাভা ওপেন সোর্স, সুতরাং আমি অনুমান করি যে কেউ এটি করতে পারে)। মজার উপাখ্যান, স্টিভ জবস প্রায় এক বছর আগে ম্যাকের জাভা বন্দরের যত্ন নিতে না চাওয়ার বিষয়ে একটি বড় কথা করেছিলেন deal
মূল বিষয়টি কীভাবে বা কে জেআরই বন্দর করে তা নয়, তবে একবার এটি পোর্ট করা হওয়ার পরে প্রতিটি জাভা অ্যাপ্লিকেশনটি এখন তাত্ত্বিকভাবে নতুন মেশিনে চালানো উচিত। সেই অর্থে, জেআরই একটি বিমূর্ত স্তর তৈরি করে, মেশিনকে সম্পূর্ণভাবে লুকিয়ে রাখে, সহজেই পোর্টিংয়ের অনুমতি দেয়।
তবে, বাস্তবতা সবসময় এর মতো সুন্দর হয় না। আমি বহনযোগ্যতাটিকে "পৌরাণিক কাহিনী" বলার মতো এগিয়ে যাব না, তবে এটি সত্য যে এটি এতটা নিখুঁত নয়। উদাহরণস্বরূপ, জাভাতে একটি প্যাকেজ বলা হয়েছে JNI
যা জেআরইকে বাইপাস করে নেটিভ কলগুলি প্রেরণের অনুমতি দেয়, এইভাবে নিখুঁত বিরামহীন বহনযোগ্যতা রোধ করে, জাভা ভক্তদের "লিখিতভাবে একবারে সর্বত্র চালান" কল করতে পছন্দ করে।
মন্তব্যে উল্লিখিত হিসাবে, বহনযোগ্যতার দিকে সি ++ এর দৃষ্টিভঙ্গি আলাদা। একদিকে, এটি একটি সংকলিত ভাষা এবং সেই বাইনারিগুলি প্রায় সর্বদা প্ল্যাটফর্ম নির্দিষ্ট। সুতরাং সি ++ এক্সিকিউটেবলগুলি কখনই পোর্টেবল হবে না (জাভা থেকে আলাদা)। অন্যদিকে, সংকলকটি পোর্ট করা মাঝে মাঝে যথেষ্ট হতে পারে। সম্প্রদায়টি আবিষ্কার করেছে যে সংকলকটি বন্দর করার পাশাপাশি ভাষার কয়েকটি মূল গ্রন্থাগার, উত্স কোডগুলি (এবং বাইনারি নয়) বহনযোগ্য হতে পারে।
যাইহোক, সি ++ সংকলক, কার্নেল, রিয়েল-টাইম সিস্টেম, এম্বেডেড সিস্টেম, ইত্যাদি সমালোচনামূলক সিস্টেমে ব্যাপকভাবে ব্যবহৃত হয় ... বহনযোগ্যতার কথা বলার সময় সি ++ এর একটি "নিম্ন স্তরের" দিক রয়েছে যা উপেক্ষা করা যায় না।
এটি কেবল ভাষা নয় - এটি গ্রন্থাগারগুলি।
জাভা এবং সি ++ উভয়ই ক্রস-প্ল্যাটফর্ম লাইব্রেরি সরবরাহ করে। জাভা আরও সমৃদ্ধ সেট সরবরাহ করে।
পার্থক্যটি হ'ল জাভা কোনও প্ল্যাটফর্মে পুনরায় সংযোগ না করে চলবে । প্রতিটি প্ল্যাটফর্মের জন্য সি ++ সংকলক থাকা মোটেও এক রকম নয়।
"পার্থক্যটি হ ...", বা খুব অনুরূপ কিছু দিয়ে শুরু হওয়া সমস্ত উত্তর মূলত ভুল (দুঃখিত, তবে এটাই জীবন)। দুজনের মধ্যে সত্যই দুটি আলাদা পার্থক্য রয়েছে।
একটি (এটি প্রচুর উল্লেখ করা হয়েছে) হ'ল একটি সংকলিত জাভা প্রোগ্রাম জাভা সম্পর্কিত যে কোনও বাস্তবায়ন চালাতে পারে (বা কমপক্ষে হওয়া উচিত), তাই সংকলিত হওয়ার পরেও, আপনি পুনরায়-সংকলন ছাড়াই জাভা প্রোগ্রামটি একটি প্ল্যাটফর্ম থেকে অন্য প্ল্যাটফর্মে যেতে পারেন can । সি ++ (কমপক্ষে সাধারণত) প্রতিটি লক্ষ্য প্ল্যাটফর্মের জন্য পুনরায় সংকলন প্রয়োজন।
অন্যটি হ'ল জাভা (অন্তত চেষ্টা করে) নিশ্চিত করে যে সমস্ত লিখিত জাভা বহনযোগ্য হবে। কমপক্ষে তত্ত্ব অনুসারে, আপনার এমন কোনও কোড লিখতে সক্ষম হওয়া উচিত নয় যা পোর্টেবল নয়।
সি ++ আপনাকে পোর্টেবল নয় এমন বেশ কয়েকটি জিনিস করার অনুমতি দেয়। সি ++ স্ট্যান্ডার্ডে বহনযোগ্য নয় এমন অনেকগুলি বিষয় সম্পর্কে "সতর্কতা" রয়েছে (উদাহরণস্বরূপ, আপনি বাস্তবায়িত সংজ্ঞায়িত আচরণ বা অপরিজ্ঞাত আচরণ পাবেন) তবে এটি আপনাকে এগুলি করা থেকে বিরত করার প্রয়োজন হয় না । উদাহরণস্বরূপ, আপনি যদি পিসিআই বাস ব্যবহার করে এমন হার্ডওয়্যারের জন্য একটি অপারেটিং সিস্টেম লিখতে চান তবে আপনার পিসিআই কনফিগারেশন মেমরিটি সম্ভবত পড়তে / লিখতে হবে। এটি অবশ্যই পিসিআই বাস ব্যতীত সিস্টেমে পোর্টেবল হবে না তবে আপনি যদি পিসিআই বাসের সাথে হার্ডওয়্যারের জন্য একটি অপারেটিং সিস্টেম লেখেন তবে এটি বেশ প্রয়োজনীয়। সি ++ এটি অনুমতি দেয় যদিও এটি স্পষ্টতই পোর্টেবল হবে না।
আপনি প্রাঙ্গণটি ভুল বুঝেছেন। জাভা প্রোগ্রামগুলি খুব বহনযোগ্য, কারণ জেভিএম একই মানের গ্যারান্টিযুক্ত একটি স্ট্যান্ডার্ড আচরণ সরবরাহ করে। সি ++ প্রোগ্রামগুলির প্রকৃত হার্ডওয়্যারটির নিকটে একটি স্বল্প মানের পরিবেশ থাকে, সুতরাং প্রোগ্রামটি বিভিন্ন প্ল্যাটফর্মের নির্দিষ্ট বিবরণগুলি হ্যান্ডেল করতে সক্ষম হওয়া প্রয়োজন - যেমন কোনও int এর আকার, শব্দ প্রান্তিককরণ ইত্যাদি ইত্যাদি etc.
জেভিএম নিজেই খুব পোর্টেবল নয়। উচ্চ-পারফরম্যান্ট জেভিএমকে অন্য প্ল্যাটফর্ম বা সিপিইউ আর্কিটেকচারে পোর্ট করা হারকিউলিয়ান কাজ।
পার্থক্যটি হ'ল জাভা (এটি সংক্ষিপ্ত রূপ নয়) প্রোগ্রামগুলি এমন একটি ফর্মের মধ্যে বিতরণ করা যেতে পারে যা কোনও জেভিএম ইনস্টল থাকা কোনও কম্পিউটারে চালানো যেতে পারে, তবে সি ++ সাধারণত উভয়ই সোর্স কোড হিসাবে বিতরণ করা হয়, যা খুব ব্যবহারকারী বন্ধুত্বপূর্ণ, বা একটি গুচ্ছ হিসাবে বিভিন্ন প্ল্যাটফর্মের জন্য বিভিন্ন বাইনারি।
জাভাটিকে পোর্টেবল হিসাবে বিবেচনা করার একটি কারণ হ'ল এটি কীভাবে পাটিগণিতের এক্সপ্রেশনগুলির মূল্যায়ন করতে হবে তার সুনির্দিষ্ট বিধি রয়েছে এবং বাধ্যতামূলক ফ্যাশনে মূল্যায়ন করার সময়ও আরও সঠিকভাবে মূল্যায়নের চেয়ে ধীর কোডের প্রয়োজন হবে ফ্যাশন।
উদাহরণস্বরূপ, দেওয়া
long thing1(int x) {
return (x+1)-1L;
}
double thing2(int x, float y) {
return x/y;
}
thing1(2147483647)
এবং thing2(1123456700,11234567.0f)
এর মানগুলি যথাক্রমে -2147483649L এবং 99.9999923706054688 হওয়া আবশ্যক, যদিও গাণিতিকভাবে সঠিক মানগুলি 2147483647L এবং 100.0 হবে এবং কিছু প্ল্যাটফর্ম কোডে সংখ্যাসূচক-ভুল ফলাফল উত্পন্ন করতে কোড তৈরির চেয়ে ধীর হবে ফলাফল (কিছু -৪-বিট প্ল্যাটফর্মে, (x + 1) এর পরে মোড়কের আচরণের জন্য জোর করে অতিরিক্ত নির্দেশের প্রয়োজন হবে এবং 8x87 প্ল্যাটফর্মে 1123456700 এর মান গোল করতে বাধ্য করা হলে float
কেবল লোডিংয়ের তুলনায় অতিরিক্ত নির্দেশের প্রয়োজন হবে) এটি সরাসরি একটি বর্ধিত-নির্ভুলতার রেজিস্ট্রারে)।
(int)
উদাহরণের প্রথম উদাহরণের (x+1)
সুব্রপ্রেসনের ক্ষেত্রে প্রথম উদাহরণের সংক্ষিপ্ত বর্ণনাকে সঙ্কুচিত কাস্ট ব্যবহার না করে জাভাটির মান float
দুটি উদাহরণই x
দিতাম না, তবে স্পষ্টতই আমি ভাষাটি ডিজাইন করিনি ।
সমর্থনকারী সরঞ্জামগুলির কাজের পরিমাণ সত্যই একইরকম, পার্থক্য অন্য কোথাও রয়েছে। প্ল্যাটফর্মের জন্য একবার সি ++ প্রোগ্রাম সংকলিত হয়ে গেলে, আপনি যদি এটি অন্য প্ল্যাটফর্মে ব্যবহার করতে চান তবে আপনাকে আবার এটি সংকলন করতে হবে। তবে, যখন কোনও জাভা প্রোগ্রাম সংকলিত হয়েছে, আপনি এটি পুনরায় সংকলন না করে রানটাইম পরিবেশ সহ অন্য যে কোনও প্ল্যাটফর্মে স্থানান্তর করতে পারেন।
"বহনযোগ্যতা কি কোনও পৌরাণিক কাহিনী?" শিরোনামের জবাব দেওয়ার পরিবর্তে "কোনটি বহনযোগ্যতা, জাভা বা সি +++ এর চেয়ে ভাল" এর পরিবর্তে আমি বলব যে আংশিক বহনযোগ্যতা সম্ভব, তবে সম্পূর্ণ বহনযোগ্যতা এটি একটি মিথকথা।
এমন কিছু যা আমি লিখতে জোর দিয়েছি এবং এটি এই প্রশ্নের ক্ষেত্রে প্রযোজ্য তা হ'ল ডেভেলপাররা এখন কেবল প্রোগ্রামিং ভাষা নিয়ে কাজ করছেন না, তবে পুরো প্রোগ্রামিং ফ্রেমওয়ার্ক সহ।
এবং এই ফ্রেমওয়ার্কগুলিতে গ্রন্থাগার, ডাটাবেস, গ্রাফিকাল ইন্টারফেস অন্তর্ভুক্ত।
কোন প্রোগ্রামিং ভাষা, বা কোন প্রোগ্রামিং ফ্রেমওয়ার্কটি আরও বহনযোগ্য?
ঠিক আছে, এটি নির্ভর করে আপনার অ্যাপ্লিকেশনটি। অর্জন করার চেষ্টা করা হয়।
জিনিসটি "আপনি" JRE লিখবেন না আপনি জাভা কোডটি লেখেন যা কোনও জেআরইতে চলে। "আপনি" সি ++ কোড লিখেন যা অন্য প্ল্যাটফর্মটিতে সংকলনের আগে আপনার দ্বারা পরিবর্তনগুলির প্রয়োজন হতে পারে ।
"যখন এটি 100% বহনযোগ্য" বা এর মতো বাক্যাংশগুলি বলে তখন অনেকে জাভার বাস্তবতা ভুলে যায় বা গ্রহণ করে না।
খুব সুন্দর সব বড় কর্পোরেশন / সফ্টওয়্যার হাউস সাম্প্রতিক সময়ে সম্পর্কিত জেআরই এর সাথে জাভাটির কমপক্ষে 1 টি গৃহ-নির্মিত বাস্তবায়ন করেছে এবং কিছু এখনও এটি বজায় রাখে, উদাহরণস্বরূপ মাইক্রোসফ্ট, আইবিএম এবং অ্যাপল সকলেরই জাভাটির নিজস্ব সংস্করণ প্রতিফলিত হয়েছে তাদের শিল্প এবং এই জাতীয় ভাষা কোথায় যাওয়া উচিত সে সম্পর্কে নিজস্ব ধারণা এবং চিন্তাভাবনা।
এটি কীভাবে "পোর্টেবল" জন্য? আপনি যেদিকেই ঘুরেন একটি জেআরই।
এবং এটি সান / ওরাকল কী করছে তা বিবেচনা না করেই।
জাভা কোডটি কেন পোর্টেবিলিটির দিক থেকে সি এবং সি ++ থেকে সত্যই দূরে নয় তার একটি উদাহরণ জিইউআই এবং গ্রাফিকাল সার্ভারগুলি, অ্যাপলের নিজস্ব জেআরইয়ের জন্য জিইউআই কাঠামোর একটি মানহীন বাস্তবায়ন ছিল, ফলস্বরূপ অনেকগুলি ছিল মাথাব্যথা এবং অ্যাপল মেশিনগুলির জন্য জাভা ব্যবহার করে একটি জিইউআই তৈরি / বন্দর করতে চাইলে যার জন্য ডাবল কাজ এবং তারা মূলত কোয়ার্টজকে মোকাবেলা করতে বাধ্য হয়েছিল (এটি "লিভারেজ" এবং উচ্চ স্তরের ভাষার ক্ষেত্রে কীভাবে হয়?)
কখনও কখনও সর্বাধিক প্রচলিত ব্যবহৃত শব্দগুলি প্রকৃতপক্ষে লোকেরা যে অর্থ দেয় তা প্রকৃত অর্থে প্রতিফলিত হয় না, আমার কাছে জাভা বিশ্বে "বহনযোগ্যতা" শব্দটি প্রচলিত অর্থে "দৃষ্টিভঙ্গির" মতো; বাণিজ্যিক এবং আর্থিক দিক থেকে আপনি অন্য ভাষার চেয়ে জাভা গ্রহণ করলে আপনার পক্ষে আরও ভাল দৃষ্টিভঙ্গি থাকতে পারে (অন্তত জাভা জন্মগ্রহণের সময়) কারণ আপনার ইতিমধ্যে একদিকে অনেক কাজ হয়েছে (আপনি কোনও বিষয়ে জেআরই পেয়ে যান) এটিকে একটি "কম্পিউটার" হিসাবে বিবেচনা করা যেতে পারে) এবং আপনার কোডবেস যেমন বহনযোগ্য হবে সম্ভবত আপনার প্রোগ্রামটি পোর্ট করার জন্য আপনার কম সংস্থান দরকার, এটি হ'ল সম্পদ অর্থ, সময় বা জনশক্তি কোনও ব্যাপার না, এটি একটি কম অন্যান্য প্রযুক্তির তুলনায় থ্রেশহোল্ড এবং এটি জাভা যা, এটি সেই প্রান্তিকিকে হ্রাস করে।
অবশ্যই এটি সত্য যদি আপনি জাভা প্রাঙ্গণটি গ্রহণ করেন, যার অর্থ আবর্জনা সংগ্রহের সাথে ভার্চুয়াল মেশিন, যার অর্থ স্থানীয় ভাষার তুলনায় এটি যদি আরও সংস্থান গ্রহণ করে, আপনি যদি সত্যই নিজের সিপিইউ বা সার্ভার ফার্মের বাইরে সর্বাধিক বের করতে চান তবে ভাববেন না যে আপনি যদি রিসোর্সে খুব কম না হন বা আপনার সংস্থাটি সত্যই ছোট না হয় তবে আপনি জাভা গ্রহণ করতে পারবেন।
আমাকে এখনও একটি একক তুচ্ছ জাভা অ্যাপ্লিকেশন সন্ধান করতে হবে যা কোড বা কার্যকারিতা প্রতিটি লাইনের জন্য কেবল 1 সংস্করণ (কোনও প্ল্যাটফর্ম নির্দিষ্ট সামগ্রী ছাড়াই ওরফে) রয়েছে এবং এটি সমস্ত বড় জেআরইয়ের মধ্যে 100% বহনযোগ্য।