ডিএসএল তৈরি করা: সাধারণ-উদ্দেশ্যমূলক ভাষার উপরে লিখিত বা একা একা?


10

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

আপনারা যারা ডিএসএল ডিজাইনের অভিজ্ঞতার সাথে রয়েছেন, আপনার কাছে কি উপযুক্ত / কনস এবং সঠিক পদ্ধতির একটি নিশ্চিত আগুনের উত্তর আছে?


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

আমি স্বাগতিকদের জন্য কোনও সম্ভাবনা বিবেচনা করি। গ্রাহক হবেন যারা অ্যাসিক্রোনাস প্রোগ্রামগুলি লিখবেন (গন্তব্যগুলির সাথে বার্তা)।
Jé ক্যু

উত্তর:


9

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

আইএমও, পাইথনের মতো একটি ভাষা (হোস্ট সিস্টেমটি যদি নেট বা জাভা হয় তবে আয়রন পাইথন বা জাইথন) বা রুবি (আয়রণরবি, জেবি) জাভা বা সি # এর চেয়ে আপনার ডিএসএলকে বেস করার জন্য ভাল।

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

কিছু উপকার:

  • বিল্ডিংয়ের ব্যয় কম। আপনার বাস্তবায়নের জন্য অনেক কম। পার্সার / সংকলক / দোভাষীকে বাস্তবায়নে সময় ব্যয় করার পরিবর্তে আপনি সমস্যার দিকে মনোযোগ দিতে পারেন।
  • হোস্ট ভাষার অ্যাক্সেস: আপনার ভাষাতে বিদ্যমান ভাষা / প্ল্যাটফর্মের সম্পূর্ণ শক্তিতে অ্যাক্সেস থাকবে।

আমি সুন্দর ভাষা অজ্ঞেয়বাদী, তবে কেন আপনি পাইথন অবতারগুলি আরও উপযুক্ত বলে মনে করেন?
Jé কাতার

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

1
"ফ্রি" কম্পাইল-টাইম স্ট্যাটিক টাইপ চেকিংয়ের সঠিকভাবে অভ্যন্তরীণ ডিএসএল বাস্তবায়নের জন্য আমি সি # নির্বাচন করেছি। গতিশীল ভাষা ডিএসএল বাহ্যিক ডিএসএল-এর চেয়ে বেশি সুবিধা দেয় না।
ডেন

@ পাইথনে আইডিএসএল করার চেষ্টা করার সময় আমাকে ঠিক হতাশ করা হয়েছে। জাভাতে আপনার আইডিএসএল মনে হয় এটি আইডিই থেকে তাত্ক্ষণিক সমর্থন পেয়েছে। পাইথনের জন্য এমন কোনও IDE খুঁজে পাওয়া যায় নি।
candied_orange

2

এ লুক Xtext (http://www.eclipse.org/Xtext/) এবং Xbase (http://blog.efftinge.de/2010/09/xbase-new-programming-language.html)। যদি ব্যবহারকারীরা নন প্রোগ্রামার হয় তবে আমি মনে করি না যে আপনার ডিএসএলটি একটি বিদ্যমান প্রোগ্রামিং ভাষার ভিত্তিতে করা উচিত। এটি তাদের জন্য খুব জটিল হবে। একটি "ক্লিন" ডিএসএল সঠিকভাবে তৈরি করা গেলে খুব দক্ষ হতে পারে।


2

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


1

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


1

মার্টিন ফলোয়ার তাঁর "ডোমেন-নির্দিষ্ট ভাষা" বইয়ে অভ্যন্তরীণ এবং বাহ্যিক ডিএসএল বর্ণনা করেছেন describes
Internal DSL= হ'ল বিদ্যমান প্রোগ্রামিং ল্যাঙ্গুয়েজের একটি উপসেট যেমন রুবি / জাভা ইত্যাদি
External DSL= আপনি একটি বাক্য গঠন এবং একটি শব্দভাণ্ডার সংজ্ঞায়িত করেন।
একটি বাহ্যিক ডিএসএল অনেক বেশি ভাবপূর্ণ হতে পারে তবে একটি বাহ্যিক বিশ্লেষণ এবং কোড উত্পন্নকরণের প্রয়োজন হতে পারে।
যদিও কোনও অভ্যন্তরীণ ডিএসএলকে অতিরিক্ত প্রক্রিয়াজাতকরণের প্রয়োজন হয় না, তবে কখনও কখনও নন-প্রোগ্রামিং ডোমেন বিশেষজ্ঞদের (যেমন ব্যবসায় বিশ্লেষক, পরীক্ষক) এর পক্ষে বোঝা শক্ত।

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

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