জেভিএমের জন্য সি # কার্যকর করছে


91

কেউ কি জেভিএম-এর জন্য সি # বাস্তবায়নের চেষ্টা করছেন? জাভা বিকাশকারী হিসাবে, আমি সি # তে withর্ষার সাথে নজর রেখেছি, তবে জেভিএম এর বহনযোগ্যতা এবং পরিপক্কতা ছেড়ে দিতে রাজি নই, এর জন্য বিভিন্ন ধরণের সরঞ্জামের কথা উল্লেখ না করে।

আমি জানি যে জেভিএম এবং সিএলআরের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে তবে শোস্টোপারের মতো কিছু আছে কি?


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

4
আমাদের প্রধান পণ্যটি উইন্ডোজ, ওএস এক্স এবং লিনাক্স অপরিবর্তিত অবস্থায় চলে। এটি করা সত্যিই কঠিন নয়।
থোরবজর্ন রাভন অ্যান্ডারসন 21

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

4
জাভাভিএম। নেট এ প্রয়োগ করা হয়েছে; জাভা এলআইবিএস এর নেট বাস্তবায়ন; উভয় দুনিয়ার আন্তঃক্রিয়াশীলতা -> IKVM.NET ( ikvm.net )
gsscoder

4
আমার কাছে মনে হচ্ছে আপনি যদি নেটকে জাভাস্ক্রিপ্টে রূপান্তর করতে পারেন (উদাহরণস্বরূপ জেএসআইএল এটি করে), আপনি এটি জাভাতে রূপান্তর করতে সক্ষম হবেন ...
BrainSlugs83

উত্তর:


93

সিএলআর এবং জেভিএম-এর মধ্যে খুব উল্লেখযোগ্য পার্থক্য রয়েছে।

কয়েকটি উদাহরণ:

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

আপনি সম্ভবত প্রচুর সি # বন্দর ফেলতে পারেন - তবে আপনাকে আইএমওর একটি চমত্কার অসন্তোষজনক অভিজ্ঞতা থেকে ছেড়ে যেতে হবে।

অন্য পথে যাচ্ছেন, আপনি কি আইকেভিএম সম্পর্কে সচেতন ? এটি আপনাকে। নেট এ জাভা কোড চালানোর অনুমতি দেয়।


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

4
আমি মনে করি আপনি রেফারেন্স ধরণের উপর মান প্রকার মানচিত্র করতে পারেন। প্রতিটি অ্যাসাইনমেন্টটি কেবল অগভীর ক্লোন করুন!
ড্যানিয়েল আর্উইকার

4
@ ইয়ারউইকার: ... এবং অ্যারে বরাদ্দ পরিবর্তন করুন এবং অন্যান্য বিভিন্ন জায়গাতে যেখানে শব্দার্থবিজ্ঞান একটি পার্থক্য রাখে? আমার সন্দেহ হয় যদি এটি সম্ভব হয় তবে এটি কাজ করা খুব কঠিন হবে এবং ফলাফলটি আপনি ব্যবহার করতে চান এমন কিছু না হয়।
জন স্কিটি

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

30
@ জোন স্কিকেট: এটি আপনাকে উভয় বিশ্বের সবচেয়ে খারাপ দেয়: মাইক্রোসফ্টের মালিকানাধীন প্ল্যাটফর্মের জাভা কিছুটা পুরানো ভাষা।
বার্ট ভ্যান হিউকেলোম

43

পরিদর্শন http://code.google.com/p/stab-language

JVM এর জন্য কোনও স্ট্যাব ভাষার কোড যদি নীচের কোড

using java.lang;
using stab.query;
public class Test {
   public static void main(String[] args) {
   // Sorts the arguments starting with "-" by length and then using the default   
        // string comparison
        var query = from s in Query.asIterable(args)
                    where s.startsWith("-")
                    orderby s.length(), s
                    select s;
        foreach (var s in query) {
            System.out.println(s);
        }
    }
}

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

4
ভাল ভাষা, ভাল প্ল্যাটফর্মে ... আশা করি আমি এই বছরগুলি আগে হোঁচট খেয়েছি।
জেফেরি কেভ

15

বাইটকোড ট্রান্সপোর্টার

ঘাসফড়িং একটি সিএলআর বাইকোড নিতে পারে এবং এটি জেভিএম-এর জন্য স্থানান্তর করতে পারে। মূলত ওয়েব অ্যাপ্লিকেশনগুলির জন্য উদ্দিষ্ট, এটি উইন্ডোজ ফর্মগুলির ক্লাসগুলির জেভিএম বাস্তবায়ন সরবরাহ করে না। কিছুটা হলেও তারিখ বলে মনে হচ্ছে। ওয়েবে ASP.NET 2.0, ভিজ্যুয়াল স্টুডিও 2008 এবং আরও সম্পর্কে কথা বলে about @Alex দ্বারা প্রথম উল্লেখ করা হয়েছে

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

আইপিভিএম ওপি চেয়ে অন্য দিকে চলে যায়। এটি সিএলআরতে চলমান একটি জেভিএম বাস্তবায়ন, একটি জেভিএম থেকে সিএলআর বাইটকোড ট্রান্সপেলার এবং জাভার জন্য একটি সিএলআর লাইব্রেরি পদ্ধতি স্টাব জেনারেটর সরবরাহ করে। http://www.ikvm.net/uses.html @ জন স্কিটি উল্লেখ করেছেন

আরপিসি

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

রাব্বিটএমকিউতে একটি বিনামূল্যে বিকল্প রয়েছে, এটি সিআর, জাভা এবং আরও অনেকের জন্য এপিআই লাইব্রেরি সহ এরলংয়ে লিখিত একটি আরপিসি সার্ভার।

jnBridge , কিছু সম্ভাব্য ব্যবহারকারীদের জন্য লাইসেন্সটি খুব ব্যয়বহুল হতে পারে।

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

প্রোগ্রামিং ভাষা

একবার লিখুন, সর্বত্র চালান;)

হ্যাক্স , সি # / সিএলআর, জাভা / জেভিএম, জাভাস্ক্রিপ্ট, ফ্ল্যাশ, পাইথন,… এর সংকলন করে ... প্রতিটি লক্ষ্য ভাষার জন্য আন্তঃব্যবস্থা সরবরাহ করে। অ্যাকশনস্ক্রিপ্ট 3 উত্তরাধিকারী হিসাবে কিছুটা ডিগ্রী নিয়ে ভাবা যেতে পারে। কমপক্ষে একটি সংস্থা আসলে এর উপর নির্ভর করে, বেশ শক্ত স্টাফ বলে মনে হচ্ছে। তারপরে উল্লেখ করা স্ট্যাবের চেয়ে অনেক বেশি বিশ্বাসযোগ্য।

স্ট্যাব কিছু সি # বৈশিষ্ট্য এবং জাভা আন্তঃক্ষমতা নিয়ে আসে। খুব কার্যকর নয়, আপনি কিছু সি # বৈশিষ্ট্য পেয়েছেন তবে আপনি যা জাভা কোডটি ব্যবহার করেন তা সেগুলি ব্যবহার করে না। https://softwareengineering.stackexchange.com/a/132080/45826 ভাষাটি তুলনামূলকভাবে অস্পষ্ট, সম্ভবত পরিত্যাজ্য, আরও ভাল হওয়ার প্রতিশ্রুতি রয়েছে। এখানে প্রথমে @Vns দ্বারা উল্লিখিত হয়েছে।

জেভিএম প্ল্যাটফর্মের জন্য তাজা বাতাসের গোস্ট;)

স্কালা , কোটলিন , অন্যরা জেভিএম এর শীর্ষে চলমান মোটামুটি সুন্দর ভাষা যা এমন বৈশিষ্ট্য নিয়ে আসে যা একটি সি # প্রোগ্রামার জাভাতে মিস করতে পারে। বিশেষত কোটলিন জেভিএম বিশ্বে সি # এর একটি যুক্তিসঙ্গত বিকল্প বলে মনে করে। প্রোগ্রামার অল্প সময়ের মধ্যে স্বাচ্ছন্দ্য বোধ করার জন্য স্কালা কিছুটা বড় ভাষা হতে পারে।

মনো

এটি অবশ্যই একটি বিকল্প। মনো যেমন আছে তেমন চালাতে পারে কেন তা জেভিএম-এ স্থানান্তরিত করে। প্রথমে @ferhrosa দ্বারা উল্লিখিত

নিউ ইয়র্ক - 12 নভেম্বর, 2014 - বুধবার, মাইক্রোসফ্ট কর্পস সম্পূর্ণ সার্ভার-সাইড .NET স্ট্যাক এবং লিনাক্স এবং ম্যাক ওএস প্ল্যাটফর্মগুলিতে চালানোর জন্য .NET সম্প্রসারণের মাধ্যমে ক্রস-প্ল্যাটফর্ম বিকাশকারীদের অভিজ্ঞতার প্রতিশ্রুতি জোরদার করেছে।

এই প্রেস বিজ্ঞপ্তি অনুসারে যেখানে উদ্ধৃতিটি এসেছে, ভিজ্যুয়াল স্টুডিও 2015 লিনাক্স / মনোকে একটি সমর্থিত প্ল্যাটফর্ম হিসাবে যুক্ত করবে।

এটি অন্য দিকে থেকে মনো প্রকল্পের লোকেরা দ্বারা লেখা একটি ব্লগ: নেট নেট সোর্স কোড ইন্টিগ্রেশন (নভেম্বর 2014)।

.NET কোর

উইন্ডোজ / লিনাক্স মাল্টিপ্লাটফর্ম সংস্করণ (কিছু)। মাইক্রোসফ্ট দ্বারা পরিচালিত নেট। 'নফ বলেছেন https://github.com/dotnet/core

উপসংহার

এখন এই সরঞ্জামগুলি / ফ্রেমওয়ার্কগুলিকে চেষ্টা করে দেখার দরকার হবে যে কতটা ঘর্ষণ আছে। ওভিটি সিভিতে জেভিএম-এর জন্য লিখতে চায়, যা গ্রাসোপার ব্যবহার করে বাস্তবে বেশ ভালভাবে কাজ করতে পারে।

একক কোডবাসে সি # এবং জাভা ওয়ার্ল্ড লাইব্রেরি মিশ্রিত করার লক্ষ্যে এটি করা এত ভাল কাজ করতে পারে না।

সূত্র

http://blog.pluralsight.com/new-course-making-java-and-c-work-together-jvm-and-net-clr-interop


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

9

আইএল থেকে বাইকোডে রূপান্তরকারীটি লেখা সহজ হতে পারে। এইভাবে আপনি স্বয়ংক্রিয়ভাবে JVM- এ কোনও নেট নেটওয়ার্কের জন্য সমর্থন পেতে চাইবেন।

তবে এটি এমন একটি সুস্পষ্ট ধারণা যে এটি যদি ইতিমধ্যে না হয়ে থাকে তবে এটি সম্ভবত অত্যন্ত শক্ত, বা ভাল / কার্যকরভাবে করা শক্ত।


6
বিভিন্ন জেনেরিক্স ইত্যাদি - তুমি সমস্যার আমি তালিকাভুক্ত অধিকাংশ মধ্যে চালানো চাই
জন স্কিট

8
গ্রাসহ্পার ঠিক এটিই করেন (উপরে @ অ্যালেক্সের উত্তর দেখুন) ভাল করা সত্যিই চূড়ান্ত (আমি গ্রাসেপারে কাজ করতাম)।
মোটি

7

ঘাসফড়িং তাকান । এটি একটি ভিজ্যুয়াল স্টুডিও-ভিত্তিক এসডিকে এবং জাভা কনভার্টারের কাছে নেট। পেটেন্ট যা আপনাকে লিনাক্স এবং অন্যান্য জাভা-সক্ষম প্ল্যাটফর্মগুলিতে .NET ওয়েব এবং সার্ভার অ্যাপ্লিকেশন চালাতে সক্ষম করে।


4
এটির সাথে কি আপনার ব্যবহারিক অভিজ্ঞতা আছে? এছাড়াও নোট করুন লাইসেন্সটি নিখরচায় সংস্করণের জন্য।
থোরবজর্ন রাভন অ্যান্ডারসন 21

13
আপনি "পেটেন্ট" শব্দটি বলার মুহুর্তে আপনি আমার আগ্রহ হারিয়ে ফেলেছেন। দীর্ঘশ্বাস.
স্টিফেন সি

4
কেবলমাত্র কয়েকটি সংবাদ: গ্রাস্পপারটি এখন বিনা সমর্থন এবং ওয়ারেন্টি ছাড়াই (বেশিরভাগ ওপেন-সোর্স পণ্যগুলির মতো) নিখরচায়
ফার্নাকোলো

4
মেনসোফ্ট পুরোপুরি মরে গেছে বলে মনে হয় এবং গ্রাস্পপার লিঙ্কগুলি আর কাজ করে না।
ডেভিড

4
স্পষ্টত কেবল একটি নেট wibble তখন। দুটি লিঙ্কই এখন কাজ করে। দুর্ভাগ্যক্রমে এখন আমি কেন এটি চেয়েছিলাম তা মনে করতে পারি না ...
ডেভিড


1

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


0

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


0

এটি কেন এত উত্সাহ পাচ্ছে না তার দুটি কারণ আমি দেখতে পাচ্ছি।

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

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

সুতরাং, একটি জাভা বিকাশকারী, যিনি পরিচিত সরঞ্জামগুলির উপরে উপরে একটি ফ্যানসিয়ার ভাষা ব্যবহার করতে চান, আমার পরামর্শ হ'ল বিদ্যমান জেভিএম ভাষাগুলি পরীক্ষা করা ।

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

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