আধুনিক বস্তু-ভিত্তিক প্রোগ্রামিং ভাষার ক্ষেত্রে কি প্রথম শ্রেণির ধারাবাহিকতা কার্যকর হয়?


10

ক্রিয়াকলাপের প্রোগ্রামিং ভাষাগুলিতে (যেমন Contহাস্কেলের মোনাড) চালিয়ে যাওয়া চূড়ান্তভাবে কার্যকর কারণ তারা প্রয়োজনীয় স্টাইলের কোডের জন্য একটি সাধারণ এবং নিয়মিত স্বরলিপি দেয়। এগুলি কিছু পুরানো অপরিহার্য ভাষাগুলিতেও কার্যকর কারণ তারা অনুপস্থিত ভাষার বৈশিষ্ট্যগুলি (যেমন ব্যতিক্রম, কর্টাইন, সবুজ থ্রেড) প্রয়োগ করতে ব্যবহার করা যেতে পারে। তবে এই বৈশিষ্ট্যগুলির জন্য অন্তর্নিহিত সমর্থন সহ একটি আধুনিক অবজেক্ট-ভিত্তিক ভাষার জন্য, প্রথম-শ্রেণির ধারাবাহিকতাগুলির জন্য সমর্থন যুক্ত করার জন্য কী যুক্তি থাকতে হবে (আরও আধুনিক বিস্মৃত শৈলী resetএবং shiftকি স্কিম-মত call-with-current-continuation)?

কার্যকারিতা এবং বাস্তবায়নের জটিলতা ছাড়াও সমর্থন যোগ করার বিরুদ্ধে যুক্তি রয়েছে কি?

উত্তর:


15

এরিক উত্তর দিন:

এই মুহুর্তে সুস্পষ্ট প্রশ্নটি হ'ল: সিপিএস যদি এত দুর্দান্ত হয় তবে আমরা কেন এটি সারাক্ষণ ব্যবহার করি না? কেন বেশিরভাগ পেশাদার বিকাশকারীরা এটি সম্পর্কে কখনও শোনেনি, বা যাদের আছে, তারা এটিকে কেবল সেই ক্রেজি স্কিম প্রোগ্রামাররা কিছু মনে করে?

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

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

ইন পরের নিবন্ধ , তিনি কীভাবে asynchrony এবং continuations ঠিক পরস্পর সমতুল্য, এবং, একটি সহজ গ্রহণ (কিন্তু ব্লক,) সমলয় নেটওয়ার্ক অপারেশন এবং asyncronous শৈলী এটা rewriting একটি বিক্ষোভের ধরে যায়, সব গোপন আবরণ নিশ্চিত এটি সঠিকভাবে পেতে কভারগুলি থাকতে হবে। এটি কোডের একটি বিশাল মেসে পরিণত হয় । শেষে তার সংক্ষিপ্তসার:

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

মনে রাখবেন আমি সিপিএসের সুবিধাগুলি সম্পর্কে কী বলছিলাম?

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

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

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

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

ক্রমাগত উত্তীর্ণ শৈলী শক্তিশালী, হ্যাঁ, তবে উপরের কোডের চেয়ে সেই শক্তির ভাল ব্যবহারের আরও ভাল উপায় হতে পারে।

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


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

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

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