মাল্টিথ্রেডিংয়ে ক্রিয়ামূলক প্রোগ্রামিং কি দ্রুত হয় কারণ আমি জিনিসগুলি আলাদাভাবে লিখি বা জিনিসগুলি আলাদাভাবে সংকলিত হয় বলে?


63

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

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

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


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

7
দ্রষ্টব্য যে 1) আরও ভাল সত্যই সংজ্ঞায়িত করা হয়নি 2) এটি অবশ্যই "দ্রুত" হিসাবে সংজ্ঞায়িত করা হয়নি । যে ভাষা এক্স এর জন্য 0.1% পারফরম্যান্স অর্জনের জন্য কোডের আকারের এক বিলিয়ন গুন প্রয়োজন, তার কোনও যুক্তিসঙ্গত সংজ্ঞার জন্য Y এর চেয়ে ভাল নয়।
বাকুরিউ

2
আপনার কি "ফাংশনাল প্রোগ্রামিং" বা "কার্যকরী শৈলীতে লেখা প্রোগ্রামগুলি" সম্পর্কে জিজ্ঞাসা করার অর্থ ছিল? প্রায়শই দ্রুত প্রোগ্রামিং একটি দ্রুত প্রোগ্রাম দেয় না।
বেন ভয়েগট

1
ভুলে যাবেন না এমন একটি জিসি সর্বদা পটভূমিতে চলতে হবে এবং আপনার বরাদ্দের দাবিগুলি বজায় রাখতে হবে ... এবং আমি নিশ্চিত নই যে এটি মাল্টিথ্রেড হয়েছে ...
মেহরদাদ

4
এখানে সবচেয়ে সহজ উত্তর হ'ল: কার্যকরী প্রোগ্রামিং এমন প্রোগ্রামগুলিকে লেখার অনুমতি দেয় যা কম রেসের শর্ত সম্পর্কিত বিষয় বিবেচনা করবে, তবে এর অর্থ এই নয় যে প্রয়োজনীয় লিখিত প্রোগ্রামগুলি ধীরে ধীরে হবে।
দাউদ পুর 13

উত্তর:


97

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

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

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

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


2
যদি কেবল একটি থ্রেড এক টুকরো ডেটা পরিবর্তন করে; কোন বিশেষ যত্ন প্রয়োজন। এটি কেবল তখনই যখন একাধিক থ্রেড একই ডেটা সংশোধন করতে পারে যা আপনাকে কিছু ধরণের বিশেষ যত্নের প্রয়োজন (সিঙ্ক্রোনাইজেশন, লেনদেনের মেমরি, লকিং, যাই হোক না কেন)। এর উদাহরণ হ'ল একটি থ্রেডের স্ট্যাক, যা ক্রমাগত ফাংশনাল কোড দ্বারা পরিবর্তিত হয় তবে একাধিক থ্রেড দ্বারা পরিবর্তিত হয় না।
ব্রেন্ডন

31
অন্যেরা এটি পড়ার সময় একটি থ্রেডে রূপান্তরিত করে রাখা যথেষ্ট যে আপনাকে "বিশেষ যত্ন" নেওয়া শুরু করতে হবে।
পিটার গ্রিন

10
@ ব্রেন্ডন: না, যদি অন্য থ্রেডগুলি একই ডেটা থেকে পড়ার সময় কোনও থ্রেডে ডেটা সংশোধন করে তবে আপনার রেসের অবস্থা রয়েছে। শুধুমাত্র একটি থ্রেড সংশোধন করা হলেও বিশেষ যত্ন নেওয়া প্রয়োজন needed
কর্নস্টালক

3
সমান্তরাল প্রক্রিয়াজাতকরণের প্রসঙ্গে মিউটটেবল অবস্থা হ'ল "সমস্ত অশুভের মূল" = আপনি যদি এখনও মরচে নজর না দিয়ে থাকেন তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এটির দিকে নজর দিন। এটি সত্যিকারের ইস্যুটি আলিয়াসিংয়ের সাথে মিশে যেতে পারে এমন পরিবর্তন করে খুব দক্ষতার সাথে পরিবর্তনের অনুমতি দেয়: যদি আপনার কাছে কেবল এলিয়াসিং থাকে বা কেবল মিউটেশন থাকে তবে কোনও সমস্যা নেই।
ম্যাথিউ এম।

2
@MatthieuM। ঠিক আছে, ধন্যবাদ! আমি আমার উত্তরে আরও স্পষ্টভাবে প্রকাশ করার জন্য সম্পাদনা করেছি। পারস্পরিক পরিবর্তনগুলি কেবল তখন "সমস্ত অশুভের মূল" যখন এটি সমবর্তী প্রক্রিয়াগুলির মধ্যে ভাগ করা হয় - রাস্ট তার মালিকানা নিয়ন্ত্রণ ব্যবস্থার সাথে কিছু এড়ায়।
মিশেলহেনরিচ

8

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

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


7

সাধারণ নিয়ম হিসাবে কার্যকরী প্রোগ্রামিং দ্রুত প্রোগ্রামের জন্য তৈরি করে না। এটি যা করে তা সহজ সমান্তরাল এবং সমবর্তী প্রোগ্রামিংয়ের জন্য। এটির জন্য দুটি মূল কী রয়েছে:

  1. পরিবর্তনীয় স্থিতি এড়ানো কোনও প্রোগ্রামের মধ্যে ভুল হতে পারে এমন জিনিসগুলির সংখ্যা হ্রাস করতে ঝুঁকির প্রবণতা তৈরি করে এবং এরপরে আরও অনেকগুলি একসাথে প্রোগ্রামে।
  2. উচ্চ স্তরের ধারণাগুলির পক্ষে ভাগ করা মেমরি এবং লক-ভিত্তিক সিঙ্ক্রোনাইজেশন আদিমতার পরিহার কোডের থ্রেডের মধ্যে সুসংগতকরণকে সহজতর করে।

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

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

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

এগুলি ছাড়াও মার্লো উল্লেখ করেছেন যে নির্ধারণের মাত্রাও রয়েছে :

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

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

হাস্কেলের মধ্যে সমান্তরালতা এবং সম্মতিযুক্ত বৈশিষ্ট্যগুলি এই ধারণাগুলির চারপাশে নকশা করা হয়েছে। বিশেষত, অন্যান্য বৈশিষ্ট্যগুলি কীভাবে একটি বৈশিষ্ট্য সেট হিসাবে একত্রিত করে, হাস্কেল দুটি ভাগে বিভক্ত:

  • সমান্তরালতার জন্য নির্ধারিত বৈশিষ্ট্য এবং গ্রন্থাগারগুলি ।
  • অ নির্ণায়ক বৈশিষ্ট্য এবং জন্য লাইব্রেরি সম্পাতবিন্দু

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

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

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

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


2

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

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

এটি হাস্কেলের মধ্যে সমান্তরালতাটিকে অনেক সময় সহজ করে তোলে এবং বাস্তবে এটিকে স্বয়ংক্রিয় করার চেষ্টা চলছে। সাধারণ কোডের জন্য, সমান্তরালতা এবং যুক্তি এমনকি পৃথক করা যেতে পারে।

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

"রিয়েল-ওয়ার্ল্ড হাস্কেল" -এ সমান্তরাল এবং মাল্টিকোর প্রোগ্রামিংয়ের মধ্যে
সাসন মার্লো দ্বারা সমান্তরাল এবং সমকালীন প্রোগ্রামিংয়ের মধ্যে হাস্কেল (হাস্কেলউইকি) আরও সমান্তরাল পাঠ


7
grep java this_postgrep scala this_postএবং grep jvm this_postকোনও ফলাফল ফেরত দেবেন না :)
আন্দ্রেস এফ।

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

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

2
সংজ্ঞা # 1 সম্পর্কিত দুটির মধ্যে, কেবল সংজ্ঞা # 2।
Jörg ডব্লু মিটাগ

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