বিল্ডিং সরঞ্জামগুলি অন্তর্নিহিত প্রোগ্রামিং ভাষার চেয়ে আলাদা স্ক্রিপ্টিং ভাষা কেন ব্যবহার করে?


23

আমি সম্প্রতি কর্মক্ষেত্রে একটি নোডেজ প্রকল্পের জন্য কিছু বিল্ড সরঞ্জাম ব্যবহার করছি যখন আমি বুঝতে পেরেছিলাম যে বেশিরভাগ ভাষার মূল বিল্ড সরঞ্জাম / সিস্টেম অন্তর্নিহিত প্রোগ্রামিং ভাষার চেয়ে আলাদা ভাষা ব্যবহার করে।

উদাহরণস্বরূপ, মেক স্ক্রিপ্ট লিখতে সি বা সি ++ ব্যবহার করে না এবং পিঁপড়া (না মাভেন) স্ক্রিপ্টিংয়ের জন্য তাদের ভাষা হিসাবে জাভা ব্যবহার করে না।

রুবির মতো নতুন ভাষা রেকের মতো সরঞ্জাম তৈরিতে একই ভাষা ব্যবহার করে , যা আমার কাছে বোধগম্য। তবে কেন সবসময় এমন হয় নি? অন্তর্নিহিত ভাষা থেকে পৃথক ভাষা ব্যবহার করে এমন বিল্ড টুল থাকার সুবিধা কী?


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

13
অন্য একটি কোণ থেকে এটি দেখুন: অ্যাপ্লিকেশন সফ্টওয়্যার লিখতে মেক ব্যবহার করবেন না কেন?
হোয়াটসাইম

4
এই নিবন্ধটি মূলত লেখক বিশ্বাস করে যে লিপ্পকে দুর্দান্ত করে তোলে সে সম্পর্কে, তবে এন্ট জাভা পরিবর্তে এক্সএমএল কেন ব্যবহার করে সে সম্পর্কে কিছু প্রাসঙ্গিক তথ্য রয়েছে।
বিট্রি

6
আপনি যদি সি তে এমন একটি প্রোগ্রাম লিখতে চেয়েছিলেন যা বিল্ডিং সি প্রোগ্রামগুলিকে স্বয়ংক্রিয় করে তোলে, আপনি কি কেবল makeআবার লেখার শেষ করবেন না (যা যাইহোক সি তে প্রয়োগ হয়)?
ব্র্যান্ডিন

6
@ joshin4colours করা হয় সি তে লেখা ভাষা ব্যবহার করা, তবে, একটি ঘোষণামূলক ভাষা পূজা প্রয়োজন যেমন শেল হয়।

উত্তর:


36

যে কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ কোনও কাজ শেষ করতে ব্যবহার করতে হবে তা বেছে নেওয়া অবশ্যই সেই লক্ষ্যের নির্দিষ্ট বৈশিষ্ট্যগুলির উপর নির্ভর করে এবং সেই প্রকল্পের সাথে সম্পর্কিত অন্যান্য কাজের উপর নয়।

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

মূল প্রকল্পটি তৈরির চেষ্টা করা এবং এর বিল্ড টুলটি খুব খারাপ সিদ্ধান্ত হতে পারে। বিল্ড টুলের সাহায্যে আপনার যা দরকার তা হ'ল ফাইল এবং আইও এর দ্রুত পরিচালনা সহ সাধারণ নিয়মের একটি দ্রুত প্রক্রিয়া।

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


18

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

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

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


13
Imagine the pain and boilerplate of writing a makefile (or build.xml, or whatever) in C.একটি ঘোষিত এক্সএমএল স্ক্রিপ্টে অ-তুচ্ছ শর্তসাপেক্ষ যুক্তি (আপনি জানেন, স্ট্যান্ডার্ড অপরিহার্য জিনিসগুলি) প্রকাশ করার চেষ্টা করার বেদনা এবং গণ্ডগোল কল্পনা করুন। ওহ, অপেক্ষা করুন, আপনি কল্পনা করতে হবে না; আপনি সম্ভবত এটি মোকাবেলা করতে হয়েছে, এবং এটি সম্ভবত একটি গোলযোগ এবং একটি অর্ধ ছিল, তাই না? বিল্ডসগুলি একটি ঘোষণামূলক স্ক্রিপ্টিং ভাষার জন্য সবচেয়ে খারাপ বিকল্পগুলির মধ্যে একটি, কারণ গুরুতর সমস্যাগুলি খুব শীঘ্রই ঘোষণাপত্র-নেসের সীমাবদ্ধতার বিরুদ্ধে দাঁড়ায়, এবং যেগুলি বিল্ড সরঞ্জামের প্রয়োজন না হওয়ার জন্য যথেষ্ট সহজ নয়।
ম্যাসন হুইলারের

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

2
যথেষ্ট ফর্সা। প্রযুক্তিগতভাবে পুরোপুরি সৎ হতে, "আমি যদি ভুল উত্তর জিজ্ঞাসা করি তবে উত্তরটি যদি X হয় তবে এর মধ্যে একটি হ'ল সি আমি সর্বদা অনুভব করেছি; এটা ঠিক যে এক্সএমএল "স্ক্রিপ্টস" এর সাথে কাজ করা প্রতিটি সময় দুঃস্বপ্ন হয়ে পড়েছিল যখনই আমি এর মধ্যে ডুব দিয়েছি। আমি সম্মত যে ডিএসএল ক্ষমতা সহ একটি উচ্চ-স্তরের অপরিহার্য ভাষা আদর্শ হবে।
ম্যাসন হুইলার

@ অ্যান্ড্রেসএফ .: ফাইলগুলি তৈরি করার মতো পদ্ধতির পদ্ধতির একটি মিশ্রণ প্রয়োজন। কাঙ্ক্ষিত আউটপুট অবস্থা ঘোষিতভাবে নির্দিষ্ট করা হয়, তবে সেই অবস্থা অর্জনের জন্য প্রয়োজনীয় ক্রিয়াগুলি আবশ্যকভাবে নির্দিষ্ট করা হয়।
সুপারক্যাট

1
@ ম্যাসনওহিলার আমি মনে করি যে এটি XML নিজেই কনফিগারেশন ভাষাটি ডিজাইনকারীদের সমস্যা হিসাবে অনেক বেশি। এই জাতীয় ভাষার লেখকদের সাধারণ ভুলটি ধরে নেওয়া হয় যে কোনও কিছু এক্সএমএল-তে রয়েছে বলে এটি স্বয়ংক্রিয়ভাবে মানব-পঠনযোগ্য হবে। (আমি জানি যে আমি স্বাচ্ছন্দ্যের চেয়ে এই ভুলটি আরও বেশিবার করেছি It's এটি এতই লোভনীয়)) একটি সু-নকশাকৃত এবং চর্বিযুক্ত কনফিগারেশন ভাষা অন্য কোনও রূপের মতো এক্সএমএল-তেও কাজ করতে পারে।
বিজিকলপ

12

আসুন আপনাকে একটি বাস্তব বিশ্বের উদাহরণ দিন।

প্রায় 15 বছর আগে আমি সিটিতে লিখিত একটি বৃহত সিস্টেমটি ইউনিক্স থেকে উইন্ডোজে পোর্ট করে কাজ করেছি, এটি কোডের প্রায় 3 মিলিয়ন লাইনের ছিল। আপনাকে স্কেল সম্পর্কে কিছু ধারণা দেওয়ার জন্য, আমাদের ইউনিক্স সিস্টেমগুলির কয়েকটি (আরএস 6000) সংকলন করতে 24 ঘন্টা লাগল, উইন্ডোজ প্রায় 4 ঘন্টা সিস্টেমে সংকলন করতে পারে।

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

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

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

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

  • বিভিন্ন প্ল্যাটফর্মের সি সিস্টেমগুলির মধ্যে যখন রেগেক্স খুব মানক ছিল না, তখন পাইথনটি রেজিএক্সে তৈরি করেছিল।

  • কয়েকটি মডিউল কাস্টম বিল্ড স্টেপগুলির প্রয়োজন, পাইথন ক্লাস ফাইলগুলিকে গতিশীলভাবে লোড করার অনুমতি দেয়। ফোল্ডারে একটি ম্যাজিক নামের পাইথন ফাইল থাকার উপর ভিত্তি করে আমরা একটি কাস্টম শ্রেণিকে মডিউল (lib) তৈরি করতে ব্যবহার করার অনুমতি দিয়েছিলাম। অজগর ব্যবহারের এটি হত্যাকারী কারণ।

  • আমরা জাভা বিবেচনা করেছি, কিন্তু এটি সেই সময়ে সমস্ত প্ল্যাটফর্মে শিপিং করা হয়নি।

(আমাদের সোর্স কোড কন্ট্রোল সিস্টেমের জন্য ইউআই একটি ওয়েব ব্রাউজার ব্যবহার করেছিল যেটি সমস্ত প্ল্যাটফর্মের মধ্যে বহনযোগ্য ছিল। এটি আমাদের ইন্টারনেট সংযোগের 6 মাস আগে ছিল X আমাদের এক্স 25 এর মাধ্যমে ব্রাউজারটি ডাউনলোড করতে হয়েছিল!)


বেশ কয়েকটি বিগিশ সিস্টেমে কাজ করা আমার মাঝে মাঝে মনে হয় যে কীভাবে বিকাশের স্কেল হয় তার একটি হাতল আমার আছে। তারপরে আমি এরকম গল্প পড়ি। Sheesh।
dmckee

@ ইমিবিস 15 বছর আগে এটি করা ফ্যাশনেবল জিনিস ছিল। আরও বেশি, এই অনুশীলনটি প্রকৃতপক্ষে শীর্ষস্থানীয় ইউনিক্স বিক্রেতারা (বিশেষত এসজিআই এবং ডিসি, তবে আইবিএম) দ্বারাও সমর্থন ও উত্সাহিত হয়েছিল।
ওকাদ

1
লোকেরা ভুলে যায় যে ইউনিক্সের অর্থ "ব্যয়বহুল" ছিল। উইন্ডোজ সস্তা হয়ে ডেস্কটপ / ওয়ার্কস্টেশন যুদ্ধ জিতেছে। এটি একই কারণে লিনাক্স পরে সার্ভার যুদ্ধে জিতেছিল।
slebetman

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

3
@ স্লেবেটম্যান এটি কেবল ন্যায্য - ইউনিক্স সস্তা "LISPM এবং অনুরূপ মেশিনের তুলনায়) সস্তা হয়ে আগের" যুদ্ধ "জিতেছিল। এটি একেবারে ভয়াবহ, ক্রমাগত ডিজাইন করা এবং ক্রমাগত ক্র্যাশ করা ছিল (তবে এটি এলআইএসপিএমের চেয়ে অনেক দ্রুত বেড়ে যায়!: পি), সিটিকে প্রাথমিক প্রোগ্রামিং ভাষা হিসাবে (এলআইএসপি এবং অনুরূপ থেকে বেশ উচ্চতর পতন) হিসাবে ব্যবহার করে, তবে এটি অনেক সস্তা ছিল। প্রকৃতপক্ষে, অনেকে এটিকে গ্রহণ করেছিলেন কারণ এটি নিখরচায় ছিল (লিনাক্সের অনেক আগে থেকেই অনেকগুলি মুক্ত পরিবর্তন হয়েছিল)। প্রকৃতপক্ষে, আমি প্রচুর পুরানো-স্কুলের এলআইএসপি'র সাথে দেখা করেছি যারা এই সময়ের ইউনিক্সে এমএস-ডসকে পছন্দ করেছিলেন। হ্যাঁ, এটা ভয়ঙ্কর।
লুয়ান

3

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

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

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

* মাইক্রোসফ্টের ভিজ্যুয়াল স্টুডিওতে এক নজরে আপনাকে বিপরীত দর্শনের উদাহরণ দেখাবে। :)


2

বিল্ড সরঞ্জামটি প্রথম এবং সর্বাগ্রে একটি সরঞ্জাম, যেমন 'জিসিসি', 'এলএস', 'অ্যাওক' বা 'গিট' এর মতো। আপনি সরঞ্জামটিকে একটি ইনপুট (ফাইলের নাম, পরামিতি, ইত্যাদি) খাওয়ান এবং এটি সেই অনুযায়ী কিছু স্টাফ করবে।

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

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

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

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