খালি বাশে কোনও প্রোগ্রাম কীভাবে লেখা যায়? [বন্ধ]


17

কিছু তাত্ক্ষণিক গবেষণার পরে, মনে হচ্ছে বাশ একটি টুরিং-সম্পূর্ণ ভাষা

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

সুতরাং, এই জাতীয় প্রোগ্রামগুলি কীভাবে পেতে পারে তার সীমাবদ্ধতা রয়েছে? খাঁটি বাশ কি জটিল প্রোগ্রাম লেখার জন্য ব্যবহৃত হয়? খাঁটি বাশে কোনও ফাইল সংক্ষেপক / ডেকম্প্রেসার লিখতে, বলতে কি সম্ভব? একটি সংকলক? একটি সাধারণ ভিডিও গেম?

কেবলমাত্র খুব সীমিত ডিবাগিং সরঞ্জাম আছে বলেই কি এটি এত কম ব্যবহার করা হয়?


2
shস্ক্রিপ্ট configureযা বহুসংখ্যক ইউনিক্স প্যাকেজের জন্য বিল্ড প্রক্রিয়ার অংশ হিসাবে ব্যবহার করা হয় 'অপেক্ষাকৃত সহজ' নয়।
ব্যবহারকারী 4556274

@ user4556274 এটি নয়, তবে এটি সাধারণত হাত দ্বারা লেখা হয় না তবে m4ম্যাক্রোগুলির একটি বিস্তৃত সেট থেকে ।
কুসালানন্দ

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

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

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

উত্তর:


30

মনে হচ্ছে বাশ একটি টুরিং-সম্পূর্ণ ভাষা

ট্যুরিং সম্পূর্ণতার ধারণাটি বৃহত্তর প্রোগ্রামিংয়ের জন্য কোনও ভাষাতে কার্যকর অন্যান্য অনেক ধারণার থেকে সম্পূর্ণ পৃথক : ব্যবহারযোগ্যতা, অভিব্যক্তি, বোঝাপড়া, গতি ইত্যাদি

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

তুলনামূলক সহজ স্ক্রিপ্টগুলি লেখার জন্য বাশ প্রায় একচেটিয়াভাবে কেন ব্যবহৃত হয়?

বৃহত্তর, জটিল শেল স্ক্রিপ্টগুলি - যেমন configureজিএনইউ অটোকনফ দ্বারা লিখিত স্ক্রিপ্টস আউটপুট - অনেকগুলি কারণে অ্যাটিক্যাল:

  1. তুলনামূলকভাবে সম্প্রতি পর্যন্ত, আপনি কোথাও একটি পসিক্স-সামঞ্জস্যপূর্ণ শেল থাকার বিষয়ে বিশ্বাস করতে পারেন না

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

    প্রাক-পসিক্স বোর্ন শেলগুলিতে বিল্ট-ইন গাণিতিকও নেই; আপনার কাছে ফোন করতে হবে exprবা এটি bcকরতে হবে।

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

    ইতিহাসের এই সত্যটির অর্থ হ'ল আধুনিক বোর্নে পারিবারিক শেল স্ক্রিপ্ট অনুবাদকারী বিশুদ্ধরূপে অনেক শক্তিশালী বৈশিষ্ট্যগুলিকে উপেক্ষা করার এক দশক-দীর্ঘ traditionতিহ্য রয়েছে কারণ আপনি এগুলি সর্বত্র রাখার বিষয়ে বিশ্বাস করতে পারবেন না।

    এটি এখনও অব্যাহত রয়েছে, বাস্তবে: বাশ সংস্করণ 4 পর্যন্ত সম্মিলিত অ্যারে পায় নি , তবে আপনি অবাক হতে পারেন যে এখনও কতগুলি সিস্টেম ব্যবহার করছে বাশ 3 এর উপর ভিত্তি করে অ্যাপল এখনও 2017 সালে ম্যাকোস সহ বাশ 3 জাহাজে বহন করে - আপাতদৃষ্টিতে লাইসেন্সিংয়ের কারণগুলি - এবং ইউনিক্স / লিনাক্স সার্ভারগুলি প্রায়শই উত্পাদন ব্যতীত সমস্ত দীর্ঘসময় ধরে চালিত হয়, তাই আপনার কাছে একটি স্থিতিশীল পুরাতন সিস্টেম এখনও বাশ 3 চলতে পারে যেমন একটি সেন্টোস 5 বাক্স। আপনার পরিবেশে যদি এই জাতীয় সিস্টেম থাকে তবে আপনি শেল স্ক্রিপ্টগুলিতে চালানোর জন্য মিশ্র অ্যারেগুলি ব্যবহার করতে পারবেন না।

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

    যদি আপনার সমস্যার উত্তরটি হয়, "সুতরাং কেবল বাশ 4," বা ksh93, বা যা কিছু ইনস্টল করুন তবে তার পরিবর্তে পার্ল বা পাইথন বা রুবি ইনস্টল করবেন না কেন? এটি অনেক ক্ষেত্রে অগ্রহণযোগ্য; ডিফল্ট ব্যাপার।

  2. বোর্ন পরিবারের শেল স্ক্রিপ্টিং ভাষাগুলির কোনও মডিউল সমর্থন করে না ।

    শেল স্ক্রিপ্টে আপনি মডিউল সিস্টেমে সবচেয়ে কাছাকাছি আসতে পারেন .- হ'ল কমান্ডটি - sourceআরও আধুনিক বোর্ন শেল রূপের মধ্যে - যা সঠিক মডিউল সিস্টেমের সাথে একাধিক স্তরে ব্যর্থ হয়, যার মধ্যে বেশিরভাগটি প্রাথমিক নাম নামকরণ

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

    তুলনার জন্য, এটির মতো হবে যদি সি প্রোগ্রামিং ভাষার কোনও লিঙ্কার না থাকে, কেবল #includeবিবৃতি থাকে। এই জাতীয় সি-লাইট উপভাষার জন্য externবা যেমন কীওয়ার্ডের প্রয়োজন হবে না static। এই বৈশিষ্ট্যগুলি মডুলারিটির অনুমতি দেওয়ার জন্য বিদ্যমান।

  3. পসিক্স কোনও একক শেল স্ক্রিপ্ট ফাংশনে স্কোপ ভেরিয়েবলের কোনও উপায় সংজ্ঞায়িত করে না , কোনও ফাইলের চেয়ে অনেক কম।

    এটি কার্যকরভাবে সমস্ত পরিবর্তনশীলকে বিশ্বব্যাপী করে তোলে , যা আবার মডুলারিটি এবং সামঞ্জস্যকে ব্যথা দেয়।

    সমাধান পোস্ট POSIX শাঁস মধ্যে এই আছে - মধ্যে অবশ্যই bash, ksh93এবং zshঅন্তত - কিন্তু যে শুধু আপনাকে ফেরত উপরে বিন্দু 1 এনেছে।

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

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

  4. শেল প্রোগ্রামিং ভাষার কোনও মানক পাঠাগার নেই।

    এটি তর্ক করা সম্ভব যে শেল স্ক্রিপ্টিং ভাষার স্ট্যান্ডার্ড লাইব্রেরিটির বিষয়বস্তু PATH, তবে কেবল এটিই বলেছে যে ফলাফলের কিছু পাওয়ার জন্য একটি শেল স্ক্রিপ্টকে অন্য একটি পুরো প্রোগ্রামে ডাকতে হবে, সম্ভবত এটি একটি আরও শক্তিশালী ভাষায় লেখা হয়েছে দিয়ে শুরু.

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

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

  5. শেল স্ক্রিপ্টগুলিতে সমান্তরাল সম্পাদনের মাধ্যমে তাদের কার্যকারিতা বাড়ানোর সামান্য বিল্ট-ইন ক্ষমতা রয়েছে have

    বোর্ন শাঁস আছে &, waitএবং এই জন্য পাইপলাইনগুলি, কিন্তু যে মূলত শুধুমাত্র একাধিক প্রোগ্রাম রচনা, CPU- র বা I / O উপমা অর্জনের জন্য না করার জন্য দরকারী। আপনি সম্ভবত পাবে না হন গোঁজের কোর বা শেল স্ক্রিপ্টিং সঙ্গে একমাত্র সুসিক্ত RAID অ্যারের, এবং যদি আপনি না, আপনি সম্ভবত অন্য ভাষায় অনেক বেশী কর্মক্ষমতা অর্জন করতে পারে।

    বিশেষত পাইপলাইনগুলি সমান্তরাল সম্পাদনের মাধ্যমে কর্মক্ষমতা বাড়ানোর দুর্বল উপায়। এটি কেবল দুটি প্রোগ্রামকে সমান্তরালভাবে চলতে দেয় এবং দুটির মধ্যে একটি সম্ভবত সময়ত কোনও নির্দিষ্ট সময়ে I / O তে বা অন্যটিকে অবরুদ্ধ করা হবে ।

    এর চারপাশে উত্তরোত্তর উপায়গুলি রয়েছে, যেমন xargs -Pএবং জিএনইউparallel , তবে এটি কেবল উপরের 4 পয়েন্টে রূপান্তরিত হয়।

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

  6. শেল স্ক্রিপ্টিং ভাষার পয়েন্টার বা রেফারেন্স নেই

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

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

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

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

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

এটি একটি বিশাল সুবিধা, যা কিছু ক্ষেত্রেই ভাষার মধ্যস্বত্বের জন্য ক্ষতিপূরণ দিতে পারে।

অবশ্যই, এবং ঠিক এই কারণেই জিএনইউ অটোকনফ তার configureস্ক্রিপ্ট আউটপুটগুলির জন্য শেল স্ক্রিপ্ট ভাষার বোর্ন পরিবারের একটি উদ্দেশ্যমূলক-সীমাবদ্ধ উপসেট ব্যবহার করেছে : যাতে এর configureস্ক্রিপ্টগুলি সর্বত্র বেশ কার্যকর হবে।

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

সুতরাং, এই জাতীয় প্রোগ্রামগুলি কীভাবে পেতে পারে তার সীমাবদ্ধতা রয়েছে?

প্রযুক্তিগতভাবে বলতে গেলে, না, যেমন আপনার টুরিং-সম্পূর্ণতা পর্যবেক্ষণের পরামর্শ দেয়।

তবে এটি একথা বলার মতো নয় যে নির্বিচারে-বড় শেল স্ক্রিপ্টগুলি লেখার পক্ষে সুন্দর, ডিবাগ করা সহজ, বা দ্রুত কার্যকর করা যায়।

খাঁটি বাশে কোনও ফাইল সংক্ষেপক / ডেকম্প্রেসার লিখতে, বলতে কি সম্ভব?

"খাঁটি" বাশ, কোনও বিষয় ছাড়াই ডাকে PATH? সংক্ষিপ্তকারক সম্ভবত ব্যবহারযোগ্য echoএবং হেক্স অব্যাহতি ক্রম, তবে এটি করা মোটামুটি বেদনাদায়ক হবে। শেলের মধ্যে বাইনারি ডেটা হ্যান্ডেল করতে না পারার কারণে ডিকম্প্রেসারটি সেভাবে লেখা অসম্ভব । আপনি odবাইনারি ডেটা টেক্সট ফর্ম্যাটে অনুবাদ করার জন্য শেষ করতে চাইবেন , ডেটা পরিচালনা করার শেলের আদি উপায় calling

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

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

একটি সাধারণ ভিডিও গেম?

এখানে শেল টেট্রিস । আপনি যদি যান তবে এই জাতীয় অন্যান্য গেমগুলি উপলভ্য।

কেবলমাত্র খুব সীমাবদ্ধ ডিবাগিং সরঞ্জাম রয়েছে

বৃহত্তর প্রোগ্রামিং সমর্থন করার জন্য প্রয়োজনীয় বৈশিষ্ট্যগুলির তালিকায় আমি ডিবিগিং সরঞ্জাম সমর্থনটি প্রায় 20 তম স্থানে রেখে দেব। পুরো প্রোগ্রামাররা ভাষা নির্বিশেষে সঠিক ডিবাগারগুলির চেয়ে printf()ডিবাগিংয়ের উপর অনেক বেশি নির্ভর করে।

শেল ইন, আপনার আছে echoএবং set -x, যা একসাথে একটি দুর্দান্ত অনেক সমস্যা ডিবাগ যথেষ্ট।


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

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

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

9

আমরা যেকোন জায়গায় হাঁটতে বা সাঁতার কাটাতে পারি, তাই আমরা সাইকেল, গাড়ি, ট্রেন, নৌকা, প্লেন এবং অন্যান্য যানবাহন নিয়ে কেন বিরক্ত হব? অবশ্যই, হাঁটা বা সাঁতার কাটানো ক্লান্তিকর হতে পারে তবে বাড়তি কোনও সরঞ্জামের প্রয়োজন না পড়ার একটি বিশাল সুবিধা রয়েছে।

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

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

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

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

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

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


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

7

বড় প্রোগ্রামগুলির জন্য শেল স্ক্রিপ্টগুলি ব্যবহার না করার কয়েকটি কারণ, আমার মাথার উপরের অংশটি বন্ধ:

  • বেশিরভাগ ফাংশন বহিরাগত কমান্ড বন্ধ করে দিয়ে করা হয় যা ধীর। এর বিপরীতে, পার্ল মত প্রোগ্রামিং ভাষার সমতুল্য কি করতে পারেন mkdirবা grepঅভ্যন্তরীণভাবে।
  • সি লাইব্রেরিগুলিতে অ্যাক্সেস করার বা সরাসরি সিস্টেম কল করার সহজ উপায় নেই, যার অর্থ ভিডিও গেম তৈরি করা শক্ত হবে
  • জটিল প্রোগ্রাম স্ট্রাকচারের জন্য উপযুক্ত প্রোগ্রামিং ভাষাগুলির আরও ভাল সমর্থন রয়েছে have যদিও বাশের অ্যারে এবং সহযোগী অ্যারে রয়েছে তবে আমি কোনও লিঙ্কযুক্ত তালিকা বা গাছের কথা ভাবতে চাই না।
  • শেলটি কমান্ডগুলি প্রক্রিয়াকরণের জন্য তৈরি করা হয় যা যদি পাঠ্য হয়। বাইনারি ডেটা (এটি হল, NUL বাইট (মান শূন্য সহ বাইট) ধারণকারী ভেরিয়েবলগুলি) পরিচালনা করা অসম্ভব কঠিন। শেলের উপর কিছুটা নির্ভর করে, zshকিছু সমর্থন আছে। এটিও কারণ বাহ্যিক প্রোগ্রামগুলির জন্য ইন্টারফেসটি বেশিরভাগ পাঠ্য-ভিত্তিক এবং \0বিভাজক হিসাবে ব্যবহৃত হয়।
  • বাহ্যিক কমান্ডের কারণেও কোড এবং ডেটার মধ্যে পৃথক হওয়া কিছুটা কঠিন। অন্য শেলটিতে ডেটা উদ্ধৃত করার সময় (যেমন চলমান bash -c ...বা ssh -c ...)

এটি আমার কাছে negativeণাত্ম্যের সবচেয়ে সঠিক সেট, যে কেউ অনেক বড় ব্যাশ স্ক্রিপ্টগুলি করে, এগুলি প্রায় আমি নেতিবাচক হিসাবে তালিকাভুক্ত করব। তবে, আমি একটি জিনিস খুঁজে পেয়েছি যে বাশ আসলে অনুরূপ কার্যকারিতার তুলনা করার সময় অন্যান্য সংকলিত ভাষার তুলনায় এতটা ধীর হয় না। আমার কাছে একটি সন্দেহজনক সন্দেহ রয়েছে যে আমি পাইথনকে বাশ নিয়ে আরো কিছু জটিল জিনিস লেখার চেষ্টা করছিলাম, গতির পার্থক্যটি ভয়াবহ কাজকে কখনও মূল্যবান করে তুলবে না। তবে একা বাশ আমি খুব সীমাবদ্ধ দেখতে পেয়েছি তবে বাশ + গাক ভাল কাজ করে, গাওক প্রায় বাস্তব।
Lizardx
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.