হাস্কেল এবং এফ # এর মধ্যে প্রাথমিক পার্থক্যগুলি কী কী? [বন্ধ]


135

আমি এফ # এবং হাস্কেলের মধ্যে তুলনা করার জন্য ইন্টারনেটে অনুসন্ধান করেছি কিন্তু সত্যিকারের কোনও নির্দিষ্ট খুঁজে পাইনি। প্রাথমিক পার্থক্যগুলি কী কী এবং কেন আমি অন্যগুলির মধ্যে একটি বেছে নিতে চাই?


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

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

উত্তর:


128

হাস্কেল একটি "খাঁটি" কার্যকরী ভাষা, যেখানে F # হিসাবে অপরিহার্য / OO এবং কার্যকরী উভয় ভাষার দিক রয়েছে। হাস্কেলের অলস মূল্যায়নও রয়েছে যা কার্যকরী ভাষার মধ্যে বিরল fair

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

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

অলস মূল্যায়ন হয় যেখানে কোনও ক্রিয়াকলাপটি একেবারে প্রয়োজনীয় না হওয়া অবধি মূল্যায়ন করা হয় না। যার অর্থ যখন প্রয়োজন হয় না তখন অনেকগুলি অপারেশন এড়ানো যায়। একটি মৌলিক সি # এ সম্পর্কে চিন্তা করুন যদি এর মতো ক্লজ থাকে:

if(IsSomethingTrue() && AnotherThingTrue())
{
    do something;
}

যদি IsSomethingTrue()মিথ্যা হয় তবে AnotherThingTrue()পদ্ধতিটি কখনই মূল্যায়ন করা হয় না।

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

হাস্কেল সম্পর্কিত আরও তথ্যের জন্য সাইমন পাইটন জোনের সাথে সফটওয়্যার ইঞ্জিনিয়ারিং রেডিও শুনুন: পর্ব 108: কার্যকরী প্রোগ্রামিং এবং হাস্কেলের সায়মন পাইটন জোন্স


8
এফ # এর আরও একটি সম্ভাব্য বড় সুবিধা (অবস্থার উপর নির্ভর করে) হ'ল এটি অলস নয়, যার অর্থ স্পেস-টাইম আচরণ সম্পর্কে যুক্তির জন্য শেখার বক্ররেখা কার্যত প্রত্যেকের পক্ষে অনেক সহজ হবে।
সিজেএস

4
SE-রেডিও পর্ব 108 (সাইমন Peyton জোন্স) ডাইরেক্ট লিংক: se-radio.net/podcast/2008-08/...
Herrmann

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

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

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

53

বড় পার্থক্য:

  • প্ল্যাটফর্ম
  • অবজেক্ট ওরিয়েন্টেশন
  • অলসতা

পার্থক্যগুলির চেয়ে মিলগুলি আরও গুরুত্বপূর্ণ। মূলত, আপনি ইতিমধ্যে .NET চালু থাকলে আপনার F # ব্যবহার করা উচিত, অন্যথায় হ্যাস্কেল। এছাড়াও, ও ও অলসতার অর্থ হ'ল এফ # আপনার (সম্ভবত) ইতিমধ্যে যা জানা রয়েছে তার কাছাকাছি, সুতরাং এটি শেখা সম্ভবত সহজ।

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

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

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

গৌণ পার্থক্য:

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

4
কর্মক্ষমতা জন্য দেখুন । এটি কতটা বৈধ তা নিশ্চিত নন
নওফাল

35

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


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

33

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

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

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

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

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

অন্যান্য কিছু সম্পর্কিত সম্পর্কযুক্ত পয়েন্ট:

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

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


2

ওয়েল, একটির জন্য আমি একটি প্রধান সুবিধা বলব যে F # .NET প্ল্যাটফর্মের বিরুদ্ধে সংকলন করে যা উইন্ডোতে মোতায়েন করা সহজ করে। ওয়েব অ্যাপ্লিকেশন তৈরি করতে ASP.NET এর সাথে মিলিত F # ব্যবহার করে ব্যাখ্যা করা উদাহরণগুলি আমি দেখেছি ;-)

অন্যদিকে, হাস্কেল দীর্ঘকাল ওয়াহআয়ের জন্য রয়েছে, সুতরাং আমি মনে করি যে ভাষার লোকেরা যারা বিশেষজ্ঞ ছিলেন তাদের ভাষা আরও বড়।

এফ # এর জন্য আমি কেবলমাত্র এখনও পর্যন্ত একটি বাস্তব বাস্তবায়ন দেখেছি, যা ধারণা ওএসের এককতার প্রমাণ ular আমি হাস্কেলের আরও বাস্তব বাস্তবায়ন দেখেছি।


4
এফ # এর ইতিমধ্যে বেশ কয়েকটি বড় সাফল্যের গল্প রয়েছে (হ্যালো 3, অ্যাডসেন্টার, এফ # ভিজ্যুয়ালাইজেশনের জন্য) যা হাস্কেলের কাছে একটি সাফল্যের গল্প (দার্কস) এর নিকটতম জিনিসটিকে বামন করে।
জেডি

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