মাইক্রোসফ্ট রোজলিন বনাম কোডডম


110

নতুন মাইক্রোসফ্ট রোজলিন সম্পর্কিত ইনফো ওয়ার্ল্ডে গতকাল একটি প্রেস বিজ্ঞপ্তি থেকে :

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

.NET 4 প্রকাশের পর থেকে আমি এটি করতে সক্ষম CSharpCodeProvider.CompileAssemblyFromSourceহয়েছি যার সাহায্যে আমি কিছুক্ষণ আগে লিখিত একটি এএসপি. নেট প্রকল্পে ব্যবহার করি যা ঠিক এটি করে - কোনও ব্যবহারকারীকে একটি পাঠ্যবক্সে কোড টাইপ করতে, অ্যাসেম্বলি / নেমস্পেসগুলি চয়ন করতে দেয় রেফারেন্সের জন্য, এবং তারপরে উইন্ডোজ অ্যাজুরে লাইভ এনভায়রনমেন্ট কোড টেস্টিংয়ের জন্য সেই কোডটি থেকে উড়ন্তটিকে আউটপুট কার্যকর এবং প্রদর্শন করবে।

এর CodeDomঅংশ / কি রোজলিনের পূর্বসূরী? রোজলিনের বিশেষ সুবিধা কী CodeDom?

উত্তর:


240

দাবি অস্বীকার : আমি মাইক্রোসফ্টের হয়ে রোজলিন দলে কাজ করি।

কোডডম রোজলিনের পূর্বসূরী, তবে কেবল সামান্যভাবে সম্পর্কিত। মূলত, কোডডম হ'ল কোড তৈরি করার এক সহজ এবং (কিছুটা) ল্যাঙ্গেজ অজ্ঞেয়িক উপায় যা ডিজাইনারকে সমর্থন করার জন্য নেট নেট 1.0 এ যুক্ত হয়েছিল (একটি লা উইনফোর্ডস)। কোডডম একটি ইউনিফাইড মডেল সরবরাহের একটি প্রচেষ্টা ছিল যা সি #, ভিবি এবং অন্যান্য ভাষায় কোড উত্পন্ন করতে পারে, তাই এটি যে কোনও ভাষা সমর্থন করে সেগুলির সাথে উচ্চ বিশ্বস্ততার অভাব রয়েছে (এজন্য আপনি কোডডম দিয়ে একটি স্যুইচ বিবৃতি তৈরি করতে পারবেন না)। CSharpCodeProvider.CompileAsorsesFromS Source কেবল csc.exe নির্বাহ করার চারপাশে একটি মোড়ক।

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

সংকলক পাইপলাইনের প্রতিটি উপাদান তৈরি করার সময়, আমরা উপরে পাবলিক এপিআইগুলি উন্মুক্ত করেছি:

  • পার্সার -> সিনট্যাক্স ট্রি এপিআই
  • প্রতীক টেবিল / মেটাডেটা আমদানি -> সিম্বল এপিআই
  • বাইন্ডার -> বাঁধাই এবং প্রবাহ বিশ্লেষণ API গুলি
  • আইএল ইমিটার -> এমিট এপিআই

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

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

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


2
@ ডাস্টিন: রোজলিন কি অন্য ভাষা সমর্থন করবেন? উদাহরণস্বরূপ জাভাস্ক্রিপ্ট (.NET)?
দিয়েগো ব্যারোস

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

এটি দুর্দান্ত হবে যদি কেউ ইতিমধ্যে রোজলিন-এর সিনট্যাক্স ফ্যাক্টরি ব্যবহার করে এমন কোডে কোডডম ব্যবহার করে এমন কোডে রূপান্তর করার জন্য একটি রোজলিন-ভিত্তিক সরঞ্জাম তৈরি করে রেখেছিল ... (আংশিক কারণ। নেট নেটটিতে রোজলিন রয়েছে তবে কোডডম নেই এবং আমি কোডডমের চারপাশে নির্মিত একটি লিব ব্যবহার করছি )
এমির

43

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

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

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


12

আমি দেখতে পাচ্ছি একটি বড় পার্থক্য: কোডডমের সাথে প্রতিবার আপনি কয়েকটি সি # বা ভিবি.এনইটি সংকলন করেন, প্রক্রিয়াটি শেষ হয়ে যায়। সিএসসি.এক্সে বা ভিবিসি.এক্সই হলেন প্রকৃত কর্মী।

আপনি যদি আর্কিটেকচার, স্কেলিবিলিটি, বিচ্ছিন্নকরণ ইত্যাদির (যদি আপনি অ্যাউজুরের কথা উল্লেখ করেছেন) দিক থেকে কোনও পরিষেবা তৈরি করতে চান তবে এটি খুব ভাল নয়।

রোজলিনের সাথে এটি প্রক্রিয়াধীন।

আমি মনে করি এটির একটি কারণেই তারা এটিকে "পরিষেবা হিসাবে সংকলক" বলে।

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

PS: CSC.exe এবং VBC.exe এর একটি উল্লেখযোগ্য পার্থক্য: রোজলিন খাঁটি। নেট (এবং সিসিআই ব্যবহার করে ) বলে মনে হচ্ছে ।


8

রোজলিন পুরো প্রক্রিয়াটির অনেক সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয় - উদাহরণস্বরূপ আপনি স্ট্রিংটি বিশ্লেষণ করতে পারেন এবং এমনকি অতিরিক্ত কোডও তৈরি করতে পারেন (বিশ্লেষণের উপর ভিত্তি করে সংকলন প্রক্রিয়াটির মধ্যে-অন-ফ্লাই) ইত্যাদি etc.

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

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

বর্তমান রোজলিন রাজ্য এবং এটি সরবরাহ করে এমন বিভিন্ন স্তরের অ্যাক্সেস এবং নিয়ন্ত্রণের একটি সংক্ষিপ্তসার জন্য, দেখুন http://msdn.microsoft.com/en-us/hh500769

হালনাগাদ

মাইক্রোসফ্ট অতিরিক্ত বৈশিষ্ট্য এবং প্রচুর এপিআই পরিবর্তন / সংযোজন সহ একটি নতুন সিটিপি উপলব্ধ করেছে। বিশদ জন্য এখানে দেখুন


1
আসলে, এটি সত্য নয় যে আপনি অতিরিক্ত কীওয়ার্ড সহ সি # বাড়ানোর জন্য রোজলিন ব্যবহার করতে পারেন।
ডাস্টিন ক্যাম্পবেল

ধন্যবাদ ... সংশোধন করা হয়েছে ... যদিও প্রথম প্রকাশে না হলেও আমি খুব সুন্দর যে এটি সম্ভব হবে ...
ইয়াহিয়া

2
@ ডাস্টিন ক্যাম্পবেল, যদি আপনি কোড তৈরির ফলে সিউডো কীওয়ার্ড দ্বারা সংকলক ত্রুটিটি যা কিছু সংশোধন করে তা পরিচালনা করেন?
রড্রিক চ্যাপম্যান

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

@ ডাস্টিন ক্যাম্পবেল: তবে রোজলিন ফাইনালে কিছুটা এওপি বুনতে দিবে? আমার মনো.সিসিল আইএনপিসি বয়নটি যেমন ঠিক তেমনই কাজ করে তবে আমি যদি লিখতে public notifying string Name {get;set;}পারি তবে এটি আরও দুর্দান্ত হবে
টিডেভার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.