কোনও এপিআই কখন এমবেডড ডিএসএল হিসাবে বিবেচিত হয়?


10

একটি এপিআই এবং এম্বেড থাকা ডোমেন নির্দিষ্ট ভাষা (ডিএসএল) এর মধ্যে পার্থক্য কী?

এটা কি শুধু বাক্য গঠন?

ওপেনজিএল এর মতো একটি এপিআই বিবেচনা করুন। গ্রাফিক্স ডিএসএল থেকে এটি কীভাবে আলাদা?

অন্য কথায়, যদি কোনও এপিআই যথেষ্ট জটিল হয় তবে কী এটি এম্বেডড ডিএসএল হিসাবে বিবেচনা করা যেতে পারে?


1
একটি ডিএসএল এর বিষয় হ'ল বিষয়গুলি সহজ করে তোলা। আপনার কি জিজ্ঞাসা করা উচিত নয় যে পর্যাপ্ত সরল এপিআইকে ডিএসএল হিসাবে বিবেচনা করা যেতে পারে?
ডোভাল

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

1
প্রশ্নটি হল একটি এপিআই এবং এম্বেডেড ডিএসএল এর মধ্যে পার্থক্য কী ?
প্রকোসার

উত্তর:


8

পার্থক্যটি তৈরি করা শক্ত, এবং ব্যবহৃত ভাষার উপর নির্ভরশীল। এটি বিষয়গতও বটে।

ক্লোজারে, আপনি এমন এপিআইগুলি সংজ্ঞায়িত করতে পারেন যা ডিএসএল এর মতো লাগে। উদাহরণস্বরূপ, হিক্কার আপনাকে এইচটিএমএল তৈরি করতে দেয়:

(html [:span {:class "foo"} "bar"])

এটি একটি লিস্প সিনট্যাক্স সহ একটি ডিএসএল হিসাবে বিবেচনা করা যেতে পারে। htmlম্যাক্রো হতে পারে এই সত্যটি এটিকে একই পরিমাণ শক্তি প্রদান করে যেন আপনি এস-এক্সপ্রেশন সহ কোনও এইচটিএমএল টেম্প্লেটিং লিব লিখছেন ( এসএক্সএমএল দেখুন )

পাইথনে, একই এপিআই দেখতে পারে:

html(["span", {"class" : "foo"}, "bar"])

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

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

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


4

এপিআই এবং ডিএসএলগুলি বেশ আলাদা ধারণা এবং এখানে কেবলমাত্র কয়েকটি অঞ্চল রয়েছে যেখানে সেগুলি ওভারল্যাপ করে বলে to

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

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

সংজ্ঞাগুলি দিয়ে আপনি কেন কেবল সাদৃশ্য দেখতে পাচ্ছেন সে সম্পর্কে আমি কিছুটা বিভ্রান্ত।


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

2
যা সত্যিই আমার উত্তরকে প্রভাবিত করে না। যদি এটি কোনও ভাষা হয় তবে এর নিজস্ব বাক্য গঠন ইত্যাদি it's এটি ডিএসএল। একটি জটিল ইন্টারফেস যা সেই ভাষার বৈশিষ্ট্যগুলির অভাবের সাথে একটি ডিএসএল নয়। আপনার সম্ভবত আপনার প্রশ্নটি আপডেট করা উচিত এবং আমি আমার উত্তর আপডেট করার বিষয়টি বিবেচনা করব।
ব্রুস

2
একটি মাতৃভাষা এখনও একটি ভাষা। এটির নিজস্ব নিজস্ব বাক্য গঠন থাকা প্রয়োজন নয়, এটি হোস্ট ভাষা থেকে এটি "ধার" করতে পারে।
প্রকোসার

সুতরাং তখন যখন সমস্ত প্রকল্পগুলি প্রায় শেষ হয়ে যায় তখন (যেমন সাধারণ প্রোগ্রামিং ভাষাগুলি শেষ পর্যন্ত ডিএসএল হয়) হয় না? সাধারণ থেকে ডোমেন নির্দিষ্টে ধরণের ক্রমাগত।
ফিলোস্টাচিস

4

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

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

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


সুতরাং সম্ভবত কেউ এমন একটি জিনিস তৈরি করতে পারে যা একটি স্ট্রিং (ডিএসএল) কে পার্স করে যা বড় এপিআইয়ের জন্য একটি সাধারণ মোড়কের কাজ করে। আমি মনে করি ডিএসএলকে যে জিনিসটি ডিএসএলকে বিশ্লেষণ করে তা থেকে বিচ্ছিন্নতা is
Phyllostachys

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

"গ্রোভির মতো নতুন অপারেটর আবিষ্কার করছেন" সম্ভবত আপনি স্কালাকে বোঝালেন; গ্রোভিতে অপারেটর সেট স্থির থাকলেও সি ++ এর মতো ওভারলোড করা যায় can
ভোরগ ভ্যান গির

@ ভার্জভানগির দুঃখিত, স্থির
কিলিয়ান ফুট

2

এখানে, মার্টিন ফাউলারের ডিএসএলবাউন্ডারি থেকে

নিবন্ধ থেকে, আমার বোধগম্যতা মূলত এমএস্বেড ডিএসএল এবং এপিআইগুলি তেমন পার্থক্য নয়। তবে, এখানে কিছুটা পার্থক্য রয়েছে।

  1. এপিআই একটি নতুন সুবিধা সরবরাহের উপর জোর দেয়।
  2. ডিএসএল কেবল আপনাকে একটি নতুন সুবিধা সরবরাহ করে না তবে আপনাকে একটি নতুন বাক্য গঠন এবং কোডিংয়ের নতুন উপায়ও সরবরাহ করে।

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


1

আমি মনে করি প্রতিটি API একটি এম্বেডড ডিএসএল তবে কনভার্সটি সত্য নয়: প্রতিটি এম্বেড থাকা ডিএসএল কোনও এপিআই নয়। কেবলমাত্র ভাষাটি উপাদানগুলিকে সংহত করার মাধ্যম হিসাবে ব্যবহৃত হলে এটিকে এপিআই বলা যেতে পারে।

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

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


এটি কি কেবল আপনার মতামত বা আপনি এটি কোনওভাবে ব্যাক আপ করতে পারেন?
gnat

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