জাভা ভার্চুয়াল মেশিন কীভাবে অন্যান্য ভাষায় লিখিত কোডটি কার্যকর করে?


12

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


2
আপনার ইন্টেল / এএমডি / সোলারিস (??) প্রসেসর হিসাবে একইভাবে "যে কোনও ভাষা" চালানো যেতে পারে (যদিও আপনি সত্যিই ভাষা চালান না, তবে কেবল এখানে প্রবাহের সাথে চলেছেন) যা তার মূল সমাবেশ কোডটিতে সংকলিত হতে পারে।
অপুরভ খুরসিয়া

13
কথাটি হচ্ছে, জেভিএম জাভা চালায় না । এটি একটি স্বতন্ত্র (যদিও সম্পর্কিত এবং জাভা সংকলক তৈরি করতে ইচ্ছাকৃতভাবে সহজ) চালায়, আরও নিম্ন-স্তরের ভাষা।

ঐটা সত্য. তবে জেভিএম সংস্করণ from থেকে অন্যান্য ভাষা চালানো শুরু করেছে; সংস্করণ 1.4.2 এ আপনি অজগর বা গ্রোভি চালাতে পারেন নি (বা কেউ করেনি)। কেন যে এত? কি বদলে গেছে?
পোমারিও

@ ডেলান বা বরং "মৃত্যুর আরও নিম্ন-স্তরের মডেল, যা জাভ্যাক প্রোগ্রামটি জাভা কোডটি তৈরি করতে জানে"।
অপুরভ খুরসিয়া

9
@Pomario Jython এখন কিছুদিনের জন্য হয়েছে প্রায়। এবং এই পৃষ্ঠাটি মনে হচ্ছে যে জাইথন ​​স্ক্রিপ্টগুলি 1.4.2 এ চলতে পারে।
অপুরভ খুরসিয়া

উত্তর:


23

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

নিম্নলিখিত নিবন্ধ / থ্রেড এ সম্পর্কে আরও বিশদ জানতে পারেন:

আমি জাভা 5 বা 6 জেভিএম- তে কোনও মৌলিক পরিবর্তন সম্পর্কে অবগত নই যা এটি অন্যান্য ভাষার (কোড থেকে সংকলিত) কোড চালানো সহজ বা সহজ করে দিত । আমার উপলব্ধি অনুসারে, জেভিএম ১.৪ জেভিএম respect এর মতো সেই সম্মানে কম বা বেশি সক্ষম ছিল (যদিও পার্থক্য থাকতে পারে; আমি জেভিএম বিশেষজ্ঞ নই)। দশকের প্রথমার্ধে লোকেরা অন্যান্য ভাষাগুলি এবং / অথবা বাইটকোড সংকলক বিকাশ শুরু করেছিল এবং জাভা 6 প্রকাশিত হওয়ার পরে 2006 এর কাছাকাছি ফলাফলগুলি (এবং আরও বিস্তৃত হিসাবে পরিচিত হওয়া) শুরু হয়েছিল।

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


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

3
@ মিশেলবার্গওয়ার্ড, আমরা কী জেভিএম প্রাক ভি 7 সহ গতিশীল ভাষাগুলি (কিছুটা হলেও) সহ্য করতে পারি ? :-)
পিটার তারেক

1
এটি রাখার একটি ভাল উপায় :)
মাইকেল বর্গওয়ার্ট

3

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

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

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

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


3

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


এরম .... আমাদের তখন সংকলকগুলির দরকার কেন? ;-)
পিটার তারেক

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

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

আপনার "মেশিন" কেবল সিপিইউর চেয়ে বেশি।
হটপাউ 2

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

2

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


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