ইউনিক্স দর্শনে প্রোগ্রামিং কি ফাংশনাল প্রোগ্রামিংয়ের মতো?


30

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

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

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

এটি কি নির্ভুল, ইউএনআইএক্স প্রোগ্রামিং দর্শনের বোঝা মূলত একটি অপরিহার্য প্রোগ্রামিং স্টাইল ব্যবহার করে তৈরি করা সরঞ্জামগুলি ব্যবহার করে কার্যকরী প্রোগ্রামিং?


5
সাদৃশ্যটি সঠিক কিনা তা আমি গুরুত্বপূর্ণ মনে করি না। প্রশ্নটি হ'ল এটি কি আপনার উপকারী উপমা? এই পদগুলিতে এটিকে ভাবনা আপনাকে প্রোগ্রাম লিখতে এবং কাজ শেষ করতে সহায়তা করে?

উত্তর:


19

আমি তোমাকে একটা বিন্দু সেখানে পেয়েছিলাম করেছি মনে করি, কিন্তু cp, rm, cdএবং অন্যদের অনেক, অবস্থা পরিবর্তন তাই তারা সত্যিই ফাংশন নয়। ইউনিক্স দর্শন কেবল একটি কাজ করা সম্পর্কে ভাল তবে এটি ভালভাবে করা; প্রায়শই এটি ভালভাবে করা মানে কার্যকরী ব্যবহারের অনুমতি দেওয়া, তবে সবসময় নয়।


9

উত্তরটি ওলেগ কিসেলিভের "মোনাডিক আই / ও এবং ইউনিক্স শেল প্রোগ্রামিং" এ রয়েছে

এটি ফিলিপ ওয়াডলারের কাগজ "কীভাবে ঘোষণা করা আবশ্যক" [ ওয়াডলার ৯ad ] দ্বারা অনুপ্রাণিত একটি প্রবন্ধ । আমরা হাসকেলে মোনাডিক আই / ও এবং পাইপ এবং পুনঃনির্দেশগুলির উপর ভিত্তি করে ইউনিক্স ফিল্টার রচনাগুলির মধ্যে অলৌকিক মিল দেখাব। ইউনিক্স পাইপগুলি (অস্থায়ী ফাইলগুলিতে লেখার মতো শব্দার্থে চিকিত্সা করা হয়) মনডের সাথে বেশ মিল। তদুপরি, ইউএনআইএক্স প্রোগ্রামিংয়ের স্তরে, সমস্ত আই / ওকে মোনাদিক হিসাবে বিবেচনা করা যেতে পারে ...


6

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


1
আপনি কি সত্যিই একটি বিমান পেয়েছেন ?? ;) (
অফটোপিক

@ ব্ল্যাকবার আমার নিজস্ব ব্যক্তিগত নয়। আমি এমন একটি ক্লাবে রয়েছি যেখানে আমাদের প্রায় 50 জন সম্মিলিতভাবে 4 টি বিমানের মালিক। সেভাবে আর কিছুটা সাশ্রয়ী। :-)
ব্রায়ান নোব্লাচ

@ ব্রায়ান নোব্লাচ: আমি ভবিষ্যতে একটি বিমান রাখতে চাই .. অর্থের অনুমতি দেওয়া: পি
ব্ল্যাকবিয়ার

5
কার্যকরী প্রোগ্রামিং "কোনও পার্শ্ব প্রতিক্রিয়া" বোঝায় না। যে ধারণাটি একই ফাংশন সর্বদা একই ফলাফল তৈরি করে তাকে "আইডেম্পোটেন্স" বলা হয় এবং কোনও প্রোগ্রাম কার্যকর করার জন্য এটি প্রয়োজনীয় শর্ত নয়। এটি "খাঁটি কার্যকরী" নামেও পরিচিত।

2

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

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

সমস্ত প্রোগ্রামিংয়ে কোনও ধরণের ডেটা সংগঠন প্রয়োজন। সংগঠিত করার জন্য অনুসন্ধান প্রয়োজন ...

ক। সেখানে আপনি কেবল 'গ্রেপ', 'fgrep' এবং তার পরিবারকে এটি করতে যেতে পারেন।

একবার অনুসন্ধান করার পরে আপনাকে কিছু বাছাই করা দরকার ..

খ। এটি করার জন্য এখন আমাদের 'সাজান' কমান্ড রয়েছে

আপনি সবেমাত্র দুটি ফাইল বাছাই করেছেন, এখন আপনি সেগুলি তুলনা করতে ইচ্ছুক।

গ। এটি করার জন্য এখন আমাদের 'ডিফ', 'সিএমপি' এবং অন্যান্য রয়েছে।

আপনি সবেমাত্র খুঁজে পেয়েছেন যে ফাইলগুলির মধ্যে কোনও পার্থক্য নেই। আপনার এখন আরও সংঘবদ্ধ ডেটা প্রয়োজন।

ঘ। আপনার কাছে একটি ফাইল লিখতে 'বিড়াল', পাইপ এবং পুনর্নির্দেশ অপারেটর রয়েছে।

আপনার আরও নির্দিষ্ট পার্সিং দরকার ..

ঙ। এটি করার জন্য আপনার মাথা, লেজ, আরও কম, কাটা ইত্যাদি রয়েছে ...

'|' ব্যবহার করে এই সমস্তগুলি একসাথে সেলাই করা হয় কোনও কোড না লিখে কিছুটা সময় সত্যিকারের শক্তিশালী স্টাফ তৈরি করতে। আরও অনুসন্ধান এবং সেলাইয়ের জন্য আপনার কাছে ..

চ। awk, শেল এবং সেড।

awk, শেল এবং সেড আপনাকে কী কাটা, ডিফ এবং অন্যটি দিতে পারে তার চেয়ে বেশি পাঠ্যের উপর আপনাকে নিয়ন্ত্রণ দেয়। আপনি কি কখনও এই আজ্ঞাটি ভেবে দেখেছেন 1 | কমান্ড 2 | কমান্ড 3 ... সিরিজটি এক ধরণের ওয়ার্কফ্লো প্রক্রিয়া। যদি এর সাথে মিলিত হয় এটি আরও শক্তিশালী হয়ে ওঠে।

এখন আরও মজা আসে।

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

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

আমি reddit যেখানে কিছু এটি পড়েছি।

"যদি আপনার একমাত্র ডিজাইনের লক্ষ্যটি সরলতা হয় তবে আপনি প্ল্যান 9 হিসাবে অনেক ব্যবহারকারী পাবেন"


1

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

আশাকরি এটা সাহায্য করবে,

-tjw

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