ইউনিক্স / সি-তে অসঙ্গতি ও অসম্পূর্ণতার উদাহরণ কী?


20

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

অন্য একটি উদাহরণ আমি নিয়ে এসেছি হ'ল সংখ্যার বিভিন্ন পদ্ধতির। লিস্প নির্বিচারে বৃহত সংখ্যক (মেমরির আকার পর্যন্ত) প্রতিনিধিত্ব করতে পারে, যখন সি সংখ্যার বিটগুলির একটি নির্দিষ্ট সংখ্যায় সীমাবদ্ধ করে (সাধারণত 32-64)। আমি মনে করি এটি সঠিকতার অক্ষটি চিত্রিত করে।

ধারাবাহিকতা এবং সম্পূর্ণতার জন্য কয়েকটি উদাহরণ কি? এখানে গ্যাব্রিয়েলের সমস্ত বিবরণ (যা তিনি স্বীকার করেছেন ক্যারিকেচারগুলি):

এমআইটি / স্ট্যানফোর্ড পদ্ধতির

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

নিউ জার্সি অ্যাপ্রোচ

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

দয়া করে নোট করুন আমি গ্যাব্রিয়েল সঠিক কিনা তা জিজ্ঞাসা করছি না (যা স্ট্যাক এক্সচেঞ্জের জন্য উপযুক্ত নয় এমন একটি প্রশ্ন) তবে তিনি কী উল্লেখ করেছেন তার উদাহরণগুলির জন্য।


6
আপনি যদি কৌতূহলী হন তবে এটি কোনও হোম ওয়ার্কের সমস্যা নয়। আমি শিক্ষক। :-) দ্বিতীয় চিন্তায়, সম্ভবত এটি আমার হোমওয়ার্ক করে।
এলেন স্পারটাস

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


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

উত্তর:


15

প্রশ্নের শিরোনাম পরামর্শ দেয় যে কয়েকটি প্রাথমিক ইউজার ইন্টারফেসের অসঙ্গতিগুলি আপনার আগ্রহী হতে পারে:

ইউনিক্স কমান্ডগুলি বিকল্প এবং পতাকা নির্দিষ্ট করার জন্য কোনও নির্দিষ্ট বাক্য গঠন অনুসরণ করে না। উদাহরণস্বরূপ, বেশিরভাগ কমান্ডগুলি পতাকা হিসাবে '-' এর পূর্বে একক অক্ষর ব্যবহার করে: cat -n some_fileতবে সাধারণভাবে ব্যবহৃত কমান্ডগুলিতে পছন্দ tar tf some_file.tarএবং dd in=some_file out=some_other_file count=2বিদ্যমান থাকে।

ইউনিক্স এবং এর বংশধর এবং আত্মীয়দের একাধিক সামান্য আলাদা নিয়মিত প্রকাশের বাক্য গঠন রয়েছে। শেলগুলি "*" ব্যবহার করে যেখানে অন্যান্য প্রোগ্রামগুলি (গ্রেপ, এগ্রিপ, vi) '। *' ব্যবহার করে। egrep এর '+' এবং '|' রয়েছে অপারেটর হিসাবে, গ্রেপ না।

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


চমৎকার উত্তর. আমি যখন শিরোনামটি দেখলাম আমি তাত্ক্ষণিকভাবে "ioctl" (এবং fcntl) ভাবছিলাম তবে এখন আমার কোনও উত্তর টাইপ করতে হবে না।
লুই

1
উল্লিখিত glob নিদর্শন না regexs হয়
জে।

8

দৃঢ়তা

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

সম্পূর্ণতা

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


8

সি এর স্ট্রিংগুলিতে 0 টি অক্ষর থাকতে পারে না এবং এর লাইব্রেরি ফাংশন বাইনারি ডেটা নিয়ে কাজ করার জন্য অনুপযুক্ত।

ইউনিক্স সিস্টেমের ফাইলের নামগুলিতে 0 বা অক্ষর 47 (স্ল্যাশ) থাকতে পারে না।

ইউনিক্সের মূল বাস্তবায়নে ফাইলের নামগুলি 14 টি অক্ষরে সীমাবদ্ধ ছিল। পরবর্তী সংস্করণগুলি এই সীমাবদ্ধতাটি শিথিল করে; তারা এটি নির্মূল করেনি।

যোগ করা হয়েছে : E2BIGসিস্টেম ত্রুটির শর্তটি যখন কেউ execএকটি যুক্তিযুক্ত তালিকার সাথে অনেকগুলি আর্গুমেন্ট যুক্ত, বা অত্যধিক মেমরি দখল করে বা এমন একটি পরিবেশ যে খুব বড় ছিল তার চেষ্টা করে।

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


অনুমতি /না দেওয়া স্বেচ্ছাসেবী নয়, /পথ বিভাজকের মতো অস্পষ্টতাগুলি সমাধান করা প্রয়োজন (?) । আমি সবেমাত্র একটি ফাইল তৈরি করেছি 000, সম্ভবত একটি আধুনিক জিএনইউ / লিনাক্সের দিনগুলিতে নির্দিষ্ট সীমাবদ্ধতা চলে গেছে।
রাফেল

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

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

আপনার বক্তব্য কি তা আমি বুঝতে পারছি না। প্রশ্নটি "ইউনিক্স / সি-তে অসঙ্গতি এবং অসম্পূর্ণতার উদাহরণ" চেয়েছে; এটি কর্মক্ষমতা উল্লেখ করে না।
মার্ক ডোমিনাস

1
@ রাফেল: আপনি একটি pathবিমূর্ত তথ্য প্রকারের সংজ্ঞা দিয়ে বোকা বিভাজক সমস্যাগুলি থেকে মুক্তি পেয়েছেন এবং কোনও নির্দিষ্ট বাস্তবায়ন (নাল-টার্মিনেটেড এ্যাসকি স্ট্রিং) প্রকাশের পরিবর্তে আপনার ইন্টারফেসে এটি ব্যবহার করুন।
যুক্তি

4

আইআইআরসি আমার শিক্ষক বলেছিলেন যে সি char *তে switchজবানবন্দিতে ভেরিয়েবল ব্যবহার করতে অক্ষমতা অসঙ্গতি বিষয়, তবে আমার কাছে এটি ছিল জেনারালিটি (সম্পূর্ণতা) ইস্যু। আমি মনে করি কেবলমাত্র আপনার অ্যালগরিদমে বা সফ্টওয়্যার ডিজাইনে প্রোগ্রামিং ভাষা নিজেই নয় (কমপক্ষে সি এর মতো ভাষায় নয়, সম্ভবত কোনও বগি ভাষার একটি ধারাবাহিকতা রয়েছে), কারণ প্রোগ্রামিং ভাষাগুলির নিয়মগুলির ডোমেন সংজ্ঞায়নের দৃ standards় মান রয়েছে বলে আমি মনে করি এবং নিয়মে ইনপুট প্রয়োগ করে কাজ করুন। তাই যদি ভাষায় কোনও কিছুর অনুমতি না পাওয়া যায় তবে এটি পরিকল্পনা করার অনুমতি দেয় না এবং ভাষায় অসঙ্গতি না হয়, আইএমএইচও।


  1. আমি সম্পূর্ণতা হিসাবে সাধারণতা ব্যবহার করেছি। আমি মনে করি তারা একই জিনিস। হয়তো আমি ভুল.
  2. এটি কোনও উত্তর নয়। হয়তো পরামর্শ বা আমার মতামত

3

আমার কাছে সর্বোত্তম উদাহরণটি হ'ল দরিদ্র ব্যবহারকারীর কাছে নাম .. -rলেখানো এবং টাইপ করা ফাইল rm *

এই গল্পটি সত্য হোক বা না হোক এটি ইউনিক্স বিদ্বেষের ক্লাসিক হয়ে উঠেছে।

দেখুন ইউনিক্স-বিদ্বেষীরা হ্যান্ডবুক , যা এই উদাহরণ প্রচুর জন্য ডেনিস নিজে রিচি দ্বারা একটি ভূমিকা রয়েছে।

আমি আরও যোগ করব যে এই ধরণের সমস্যা এড়ানো মাইক্রোসফ্টের পাওয়ার শেলের ডিজাইনের একটি বড় শক্তি ছিল।


আমি দ্য ইউনিক্স-হ্যাটার্স হ্যান্ডবুকের পিছনে রিচার্ড গ্যাব্রিয়েলের প্রবন্ধটি পড়েছি। :-)
এলেন স্পার্টাস

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

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

সুতরাং, হ্যাঁ, ইউনিক্স বেমানান। অন্যান্য সিস্টেমগুলিও ঠিক অন্যভাবে ;-)


2

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

সি এর বিন্দুটি ছিল মেশিনটির খুব কাছাকাছি থাকা একটি ভাষা যা অপারেটিং সিস্টেমগুলি প্রয়োগ করতে ব্যবহৃত হতে পারে। মেশিনগুলি (বেশিরভাগ ক্ষেত্রে) অসীম-নির্ভুল দশমিক সংখ্যা সমর্থন করে না। মেশিনগুলির (বেশিরভাগ ক্ষেত্রে) নির্দিষ্ট বিট-দৈর্ঘ্যের পূর্ণসংখ্যা থাকে।

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