এতগুলি জেভিএম ভাষাগুলি সমর্থন করার জন্য কী কী জেভিএমকে বহুমুখী করে তোলে?


18

জেভিএম জাভা ব্যতীত অন্য অনেকগুলি ভাষা সমর্থন করে Groovy,Clojure,Scalaযা জাভা থেকে পৃথক ফাংশনাল ভাষা (আমি সংস্করণ 8 এর আগে জাভা উল্লেখ করছি যেখানে Lambda'sসমর্থিত নয়) যা কার্যকরী দক্ষতা সমর্থন করে না a একটি উচ্চ স্তরের কী কী জেভিএমকে এতই বহুমুখী করে তোলে যে এটি উভয় অবজেক্টের পাশাপাশি কার্যকরী ভাষা উভয়কেই সমর্থন করতে পারে?


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

উত্তর:


37

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

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

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

জেভিএম এতটা বহুমুখী, কারণ এটি এত বিস্তৃত নয় এবং এটি খুব পরিপক্ক, ভাল-সমর্থিত এবং উচ্চ-কার্যকরী বাস্তবায়ন হয়েছে বলে নয়।

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


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

4

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

উইকিপিডিয়ায় বাইটোকোডগুলির একটি তালিকা রয়েছে:

http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

পাশাপাশি JVM কীভাবে বাইট কোডগুলি লোড করে তার একটি ব্যাখ্যা:

http://en.wikipedia.org/wiki/Java_virtual_machine

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


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

সম্মত, জেভিএম অবশ্যই সেখানে প্রথম ভিএম নয়। আমি মনে করি জেভিএম অন্যান্য ভাষার জন্য জনপ্রিয় কারণ জাভা জনপ্রিয়, ভিএম সক্রিয়ভাবে বিকাশিত এবং ভাল নথিভুক্ত।
সাসবারি

2

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

সর্বশেষে তবে জেভিএমের আবর্জনা সংগ্রহের উপ-সিস্টেমটি হ'ল (ডান টিউনিং সহ) উপরে ভাষাটি নির্বিশেষে আপনার জন্য স্মৃতি পরিচালনা করে।


জেএমএম জাভা সম্পর্কে আমার সবচেয়ে প্রিয় জিনিস। আমি কার্যকরভাবে-অপরিবর্তনীয় ডেটার ভক্ত (যেমন অ্যারেগুলি যাঁর সামগ্রীগুলি অন্য থ্রেডে দৃশ্যমান হওয়ার পরে কখনই পরিবর্তিত হবে না), তবে someField = new int[]{42};নতুন অ্যারে দেখায় যে কোনও থ্রেডের মান দেখতে পাবে তা নিশ্চিত করার একমাত্র উপায়ের মতো একটি বিবৃতি দেওয়া হয়েছে 42 হয় হয় ক্ষেত্র তৈরি করতে হবে finalবা volatile। যদি ক্ষেত্রটি অলসভাবে উত্পন্ন হয় তবে প্রায়শই অ্যাক্সেস করা হয়, এটি কার্যকর হয় finalনা, এবং এটি তৈরি করা volatileপ্রতিবার এটি অ্যাক্সেস করার সময় অযথা সিঙ্ক্রোনাইজেশন জরিমানা চাপিয়ে দিতে পারে। এমনকি loosest .NET মডেল ... ইন
supercat

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

1

এর মূল উপাদানটি হ'ল সম্পাদন পর্ব থেকে সংকলনটি পৃথক করা। এটির মাধ্যমে বাইকোডে অন্য ভাষাগুলি সংকলনকারী অন্যান্য সংকলকগুলি লেখা সম্ভব।

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

জাভাও বিশেষ নয়। জাভাতে একাধিক ভাষার উপস্থিতি এমনকি অন্য ভিএমগুলির তুলনায় ডিজাইনের লক্ষ্য ছিল না। জন্য Microsoft- এর .NET CIL একাধিক ভাষা চালানোর ক্ষমতা (VB.Net সি #,, ...) একটি কী নকশা উপাদান, এছাড়াও ছিল ParrotVM একটি জেনেরিক VM- র হতে লক্ষ্যে Perl6 প্রকল্প থেকে।

এর মজাদার জন্য আমি একবার প্রমাণ তৈরি করেছি যে এমনকি পিএইচপি-র জেন্ড ইঞ্জিনও এটির অনুমতি দেয়।

এবং প্রকৃতপক্ষে এটি নতুন কিছু নয় - এমনকি সত্যিকারের হার্ডওয়্যারগুলিতে আপনি একাধিক ভাষা চালাতে পারবেন - সি বা ফোরট্রান।

সংকলন এবং সম্পাদন থেকে এই পৃথকীকরণের পার্থক্য হ'ল ক্ল্যাসিক দোভাষী, যেমন বেসিক, শেল স্ক্রিপ্ট ইত্যাদির কিছু ফর্ম ইত্যাদি often তারা প্রায়শই এমনভাবে কাজ করে যে তারা তাত্ক্ষণিক আকারে না নিয়েই লাইন পথে লাইন কম-বেশি কোড চালায় way মাঝে.


1

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

  • কোনও কোডের একটি রেফারেন্স একটি অপরিবর্তনীয় বাস্তবায়ন হতে জানে List<String>

  • পরিবর্তনীয় তালিকার ধরণের উদাহরণের একটি উল্লেখ যা এটিকে রূপান্তর করতে পারে এমন কোনও কিছুর সামনে কখনই প্রকাশিত হবে না।

  • পরিবর্তিত তালিকার একটি রেফারেন্স, যার MyThingsপদ্ধতি প্রয়োগের সময় ব্যতীত অন্য কোনও রেফারেন্স সম্ভবত মহাবিশ্বের কোথাও উপস্থিত থাকতে পারে না।

  • পরিবর্তনীয় তালিকার একটি উল্লেখ যা অন্য কিছু বস্তুর মালিকানাধীন , যা অন্য বস্তুটি MyThingকিছু ফ্যাশনে ব্যবহার করতে চায় ।

  • পরিবর্তনীয় তালিকার একটি রেফারেন্স যা MyThingমালিকানাধীন, তবে এটি এটি অন্য কিছু বস্তুরও প্রকাশ করেছে যাতে তারা এটি দিয়ে কিছু করতে পারে।

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

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