জাভার নতুন বিকাশ কীভাবে স্কালা এবং ক্লোজারের মতো ভাষার সাথে এর আন্তঃব্যবহারকে প্রভাবিত করবে?


11

আমি যতদূর বুঝতে পেরেছি, স্কালা এবং ক্লোজার উভয়ই নতুন ভাষা হিসাবে ডিজাইন করা হয়েছে

  1. জেভিএম উপর নির্ভর করে, এবং
  2. জাভা কোডের সাথে সহজেই সংহত করুন, এই দিক থেকে যে তারা স্কালা এবং ক্লোজার কোডের মধ্যে জাভা ক্লাস ব্যবহার করতে দেয়।

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

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

আমি নিম্নলিখিত পরিস্থিতিতে সম্পর্কে চিন্তা করতে পারি:

  1. নতুন জাভা শব্দার্থবিজ্ঞানের সাথে মানিয়ে নিতে (নতুন অ-অবজেক্ট ভ্যালুগুলি পরিচালনা করতে) এবং জাভার সাথে আন্তঃব্যবযোগিতা সমর্থন করার জন্য স্কালা বা ক্লোজার ভাষাটি প্রসারিত হবে।
  2. স্কালা বা ক্লোজার ভাষার প্রসারিত হবে না । এটি তখনই সম্ভব যখন ফাংশন মানগুলির মতো নতুন জাভা বৈশিষ্ট্যগুলি বিদ্যমান ধারণাগুলিতে ম্যাপ করা যায়। উদাহরণস্বরূপ, স্কালায় এমনকি কোনও ফাংশন একটি বস্তু, তাই আমি অনুমান করি জাভা ফাংশনগুলি আবার কোনও ধরণের বস্তুগুলিতে আবৃত হবে যখন তারা স্কালায় দৃশ্যমান হবে।
  3. স্কালা বা ক্লোজার ভাষা সাম্প্রতিক জাভার বিকাশ অনুসরণ না করে জাভা or বা to পর্যন্ত আন্তঃযোগিতা সমর্থন করে। এটির প্রয়োজন হবে যে জাভার পুরানো সংস্করণগুলি এখনও সমর্থিত হবে (কমপক্ষে ওপেনজেডিকে বা অন্য কোনও প্রকল্প দ্বারা), যাতে এই ভাষাগুলি জাভার আরও রক্ষণশীল / স্থিতিশীল শাখার উপর ভিত্তি করে তৈরি করা যায়।

সংক্ষিপ্তসার: আমরা কী আশা করতে পারি যে জাভার ভবিষ্যতের বিকাশের সাথে জাভা দিয়ে আন্তঃব্যবহারযোগ্যতা বজায় রাখতে স্কালা এবং ক্লোজারের মতো ভাষার প্রভাব পড়বে? এই বিষয়ে ইতিমধ্যে কিছু (লিঙ্ক) চলমান আলোচনা আছে?

বিঃদ্রঃ

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


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

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

@ কিলিয়ান ফথ: আমি শব্দটি নির্ভর শব্দটিকে সরিয়ে দিয়েছি কারণ আমার প্রশ্নের কেন্দ্রবিন্দু স্ক্যালাল এবং জাভা রেসপন্থের মধ্যে আন্তঃব্যবহারযোগ্যতার উপর। ক্লোজার এবং জাভা
জর্জিও

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

3
@ ম্যাপেল_শ্যাফ্ট: আমি আমার প্রশ্ন সংশোধন করে "নির্ভর" শব্দটি সরিয়েছি। আমি অন্য একটি মন্তব্যে যেমন উল্লেখ করেছি, আমার সমস্যাটি স্ক্যালা বা ক্লোজার কীভাবে জাভা বা জেভিএম বৈশিষ্ট্যগুলির উপর নির্ভর করে তা নয়, তবে স্কালা / ক্লোজার কীভাবে জাভা বৈশিষ্ট্যগুলি "দেখতে" পারে। আমি যতদূর জানি তারা জাভা features টি বৈশিষ্ট্য যেমন ক্লাস, ইন্টারফেস, অবজেক্টস, পদ্ধতি, আদিম ডেটা ধরণের দেখতে পাবে। এটি স্কালা / ক্লোজারকে জাভা 6 কোডটি ব্যবহার করার (কল) অনুমতি দেয়। আমার প্রশ্ন হ'ল এই ভাষাগুলিও কি ভবিষ্যতের জাভা ভাষার নির্মাণগুলি "দেখতে" (এবং তাই ব্যবহার করতে সক্ষম হবে) বা এর জন্য স্ক্যালা / ক্লোজার ভাষাগুলির সম্প্রসারণের প্রয়োজন হবে?
জর্জিও

উত্তর:


15

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

আন্তঃরূপকে প্রভাবিতকারী বৃহত্তম পরিবর্তনটি আসলে জাভা with এর সাথে এসেছিল - ইনভোকেডাইনামিক বাইটকোডের সাহায্যে যা জেভিএমের মধ্যে ডায়নামিক / দেরী বাঁধাই কলগুলিকে অনুমতি দেয় - এমন কিছু যা প্রাথমিকভাবে জেভিএমের অন্যান্য ভাষার জন্য ডিজাইন করা হয়েছিল। এটি যেহেতু লামদ্বাসের জন্য খুব কার্যকরভাবে অভিযোজিত হয়েছে, তাই জাভা 8 হিসাবে, জাভা আসলে এই বাইকোডগুলি নির্গমন শুরু করবে।

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

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


1
তবে, যতদূর আমি জানি, স্কালার ক্লোজার হ'ল একটি অবজেক্ট।
জর্জিও

1
হাঁ। স্কেল মাত্র সম্প্রতি জাভা 1.5 এর জন্য সমর্থন বাদ দিয়েছে, তারা 1.6 ছাড়ার অনেক দিন হবে long
Jörg ডব্লু মিটাগ

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

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

2
@ জর্জিও: অবশ্যই, তবে জাভা 8 প্ল্যাটফর্মের জন্য এ জাতীয় কোনও পরিবর্তন পরিকল্পনা করা হয়নি। আসলে, জেভিএমএস 2003 এবং 2010 সালে জাভা প্ল্যাটফর্মের পুরো ইতিহাসে কেবল দুবার বাড়ানো হয়েছিল এবং দ্বিতীয়বার ( invokedynamicবাইটকোডের পরিচিতি ) জাভা ব্যতীত অন্য ভাষাগুলি সমর্থন করার জন্য ছিল ; আসলে, জাভা 7 ভাষা সেই বাইটকোড সমর্থন করে না বা ব্যবহার করে না
Jörg ডব্লু মিটাগ

2

জাভা যখন ল্যাম্বডাস যুক্ত করে তখন স্কালার পিছনে ফেলে রাখা হবে কারণ জাভা ল্যাম্বডাস তাদের ব্যবহৃত প্রেক্ষাপট অনুসারে একটি টাইপ অর্পণ করে, অন্যদিকে স্কালা ল্যাম্বডাস তাদের বৈশিষ্ট্য, প্যারামিটারের ধরন এবং রিটার্নের ধরণের উপর ভিত্তি করে একটি টাইপ অর্পণ করে, যেমন,

executor.execute(() -> { System.out.println("hello world"); });

জাভা 8 থেকে স্কালায় এইভাবে লেখা যেতে পারে:

executor execute new Runnable {
    override def run() { println("hello world") }
}

আপনি স্কালার () => ইউনিটকে চলমানযোগ্য রূপান্তর করতে কিছু মোড়ক ব্যবহার / লিখেন না।


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

1
@ জিওরজিও জাভা 8-তে একটি ল্যাম্বডা এক্সপ্রেশন হ'ল একটি ভাষা-স্তরের শর্টকাট যা ইন্টারফেসের একটি উদাহরণ তৈরি করে যা একক পদ্ধতি ঘোষণা করে এবং যা প্রসঙ্গ দ্বারা পিছিয়ে। সুতরাং যখন একটি জাভা 8 পদ্ধতিটি একটি ল্যাম্বদা ফেরত দেয়, এটি আসলে ইন্টারফেসের একটি উদাহরণ দেয় যা পদ্ধতির ফেরতের ধরণ হিসাবে ঘোষণা করা হয়। স্কেল ২.৯.১ অনুসারে, রিটার্নের ধরণটি কিছু ইন্টারফেসের (রান্নেবল বা তুলনাকারী) কথার একটি উদাহরণ হতে চলেছে যা আপনি স্কালা ল্যাম্বডা হিসাবে বিবেচনা করতে পারবেন না , যদি না আপনি বা স্ক্যাল লিবারির প্রকাশিত ভবিষ্যত প্রকাশগুলি সেই থেকে কোনও প্রকৃত রূপান্তর উপস্থাপন না করে unless ইন্টারফেস স্কেল ল্যাম্বদা টাইপ।
Hellodanylo

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

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

@ স্কাইডান: এখন এটি পড়ছে। এটা আমার মনে হচ্ছে যে lambdas না বস্তু প্রতিনিধিত্ব (যদিও প্রকার / ইন্টারফেস প্রেক্ষাপটে যা তারা সংজ্ঞায়িত করা হয় থেকে অনুমিত হয় না)। সুতরাং mail.openjdk.java.net/pipermail/lambda-dev/2011-August/… (" ল্যাম্বডাস বস্তু নয়") এ দেওয়া তথ্য ভুল বা, অন্তত, বিভ্রান্তিকর।
জর্জিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.