রাষ্ট্র ছাড়া কি * কোনও * কর্মের কাজ প্রকাশ করা যেতে পারে?


13

এটি একটি তাত্ত্বিক প্রশ্ন, তবে আমি এখন যা অনুধাবন করেছি তার বহু বছর পর প্রোগ্রামিংয়ের পরে "নরমাল" অপরিহার্য কৌশলটি সি ++ ব্যবহার করে মূলত আমি এই অন্যান্য কার্যকরী প্রোগ্রামিংয়ের জগতটি আবিষ্কার করেছি, যা জাভাস্ক্রিপ্ট শিখতে গিয়ে দুর্ঘটনাক্রমে আমি হোঁচট খেয়েছি।

এটি আমাকে ভাবতে বাধ্য করেছে যে আপনি যদি কোনও সম্পূর্ণ রাষ্ট্র-ভিত্তিক প্রোগ্রামকে বিশুদ্ধরূপে কার্যক্ষম এবং রাষ্ট্র ছাড়াই কোনও পৃথক বাস্তবায়ন দিয়ে প্রতিস্থাপন করতে পারেন?

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


1
একটি প্রাসঙ্গিক Stackoverflow উত্তর: stackoverflow.com/questions/3722084/...
jfriend00

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

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

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

উত্তর:


17

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

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


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

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

@ এমিলিও উল্লেখ করে যে কোনও সমস্যার সমতুল্য রাষ্ট্র ভিত্তিক সমাধান রয়েছে (যেমন আপনি বর্ণনা করেছেন) তার সমাধান নয় যে সমাধানের কোনও রাষ্ট্রবিহীন সংস্করণ নেই।
বিলি ওনিল

2
@ এমিলিও গারাভাগলিয়া আপনি তার পরে ল্যাম্বডা-ক্যালকুলাস দোভাষী হিসাবে উল্লেখ করছেন। ল্যাম্বডা ক্যালকুলাসে যুক্তি দেখানোর সময়, রাষ্ট্র সম্পর্কে যুক্তি করার প্রয়োজন হয় না। এছাড়াও "পরিবর্তন" এর দিকটিও আলাদা of
ভাইরবল

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

14

যে কোনও গতিশীল ব্যবস্থায়, "রাষ্ট্র" হ'ল যা আপনার বর্তমানকে আপনার অতীত বা ভবিষ্যতের দ্বারা প্রভাবিত করে তোলে (সময়ের তীর একটি গাণিতিক সমস্যা নয়, কেবল একটি শারীরিক বাধা)।

আপনার "স্মরণে রাখার" জন্য কিছু আছে বা এটি আপনি যা করেছেন তার উপর নির্ভর করে, আপনার একটি রাষ্ট্র রয়েছে।

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

এখন, আপনি যে গণনা মডেলটি উল্লেখ করেছেন তার উপর নির্ভর করে একটি রাষ্ট্রকে সুস্পষ্টভাবে (পরিবর্তনশীল আকারে) বা সুস্পষ্টভাবে ("রিটার্ন ঠিকানাগুলির আকারে) উপস্থাপন করা যেতে পারে can

যখন আপনি fna(fnb(x))fnb কে এমন একটি রাষ্ট্র দিচ্ছেন যে ফলস্বরূপ fna এর জন্য একটি রাজ্য তৈরি করবে। এটি xfnb বলার আগে উপস্থিত থাকার কারণে (তাই এটি এটি নিজের "অতীত" থেকে আসে)।

এটি "রাষ্ট্রের অস্তিত্ব" বা "রাষ্ট্রের অস্তিত্ব নেই" এর বিষয় নয়। এটি "আই কেয়ার" বা "আমি করি না" এর একটি ম্যাটার।


0

রাষ্ট্র বলতে বোঝায় যে বর্তমান অনুপ্রেরণাকে এমনভাবে সাড়া দেওয়ার ক্ষমতা যা কেবল বর্তমান উদ্দীপনার উপর ভিত্তি করে নয় অতীত উদ্দীপনার উপর নির্ভর করে।

খাঁটি কার্যকর ক্রিয়াকলাপগুলি কেবল ফাংশন are সুতরাং ব্যবহারিক অ্যাপ্লিকেশনগুলির জন্য খাঁটি কার্যকরী প্রোগ্রামটি একটি জুড়ি (পুরানো_সেট * উপস্থিত_ স্টিমিউলাস) ইনপুট করে এবং একটি জুড়ি আউটপুট করে (নতুন_সেট * উপস্থিত_সংশ্লিষ্ট)। পরবর্তী উদ্দীপনাটির জন্য অপেক্ষা এবং রাষ্ট্রের প্রচারের জন্য একটি বাহ্যিক, রাষ্ট্রীয় "লুপার" প্রয়োজন।

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

এইভাবে কোনও রাষ্ট্র-ভিত্তিক কর্মসূচী কোনও পৃথক বাস্তবায়নের সাথে প্রতিস্থাপন করা যাবে না যা খাঁটিভাবে কার্যকর এবং রাষ্ট্র ব্যতীত।


0

আপনি যতক্ষণ না বাইরের বিশ্বের সাথে ইন্টারঅ্যাক্ট করতে না হয় আপনি সুস্পষ্ট পরিবর্তনযোগ্য রাষ্ট্র এড়াতে পারেন।

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

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

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


0

আপনি কীভাবে রাষ্ট্র ছাড়াই প্রোগ্রামিং ভাষায় একটি "স্টেট মেশিন" প্রয়োগ করবেন তা চিন্তা করুন।

আপনি সম্ভবত এটি করতে পারেন তবে আপনি স্টোরেজ হিসাবে ফাংশন নাম ব্যবহার করে শেষ হবে। গব্বিডেদিনের মতো শেষ হয়ে গেল:

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