আমি এফ # এবং হাস্কেলের মধ্যে তুলনা করার জন্য ইন্টারনেটে অনুসন্ধান করেছি কিন্তু সত্যিকারের কোনও নির্দিষ্ট খুঁজে পাইনি। প্রাথমিক পার্থক্যগুলি কী কী এবং কেন আমি অন্যগুলির মধ্যে একটি বেছে নিতে চাই?
উত্তর:
হাস্কেল একটি "খাঁটি" কার্যকরী ভাষা, যেখানে F # হিসাবে অপরিহার্য / OO এবং কার্যকরী উভয় ভাষার দিক রয়েছে। হাস্কেলের অলস মূল্যায়নও রয়েছে যা কার্যকরী ভাষার মধ্যে বিরল fair
এই জিনিসগুলির অর্থ কী? একটি খাঁটি কার্যকরী ভাষা, এর অর্থ কোনও পার্শ্ব প্রতিক্রিয়া নেই (বা ভাগ করা অবস্থায় পরিবর্তিত হওয়া, যখন কোনও ফাংশন বলা হয়) যার অর্থ আপনার গ্যারান্টিযুক্ত যে আপনি যদি ফ (এক্স) কল করেন তবে ফাংশন থেকে কোনও মান ফিরিয়ে নেওয়া ছাড়া আর কিছুই হবে না, যেমন কনসোল আউটপুট, ডাটাবেস আউটপুট, গ্লোবাল বা স্ট্যাটিক ভেরিয়েবলের পরিবর্তন .. এবং যদিও হাস্কেলের কোনও খাঁটি ফাংশন থাকতে পারে (মনডের মাধ্যমে), এটি অবশ্যই 'স্পষ্টত' ঘোষণার মাধ্যমে বোঝানো উচিত।
খাঁটি কার্যকরী ভাষা এবং 'নো পার্শ্ব প্রতিক্রিয়া' প্রোগ্রামিংটি জনপ্রিয়তা অর্জন করেছে কারণ এটি বহুবিধ ভিত্তিক সম্মতিতে নিজেকে ভাল ndsণ দেয়, কারণ অবিস্মৃত লকস এবং সেমোফোরের পরিবর্তে কোনও অংশীদারি রাষ্ট্রের সাথে ভুল হওয়া অনেক কঠিন।
অলস মূল্যায়ন হয় যেখানে কোনও ক্রিয়াকলাপটি একেবারে প্রয়োজনীয় না হওয়া অবধি মূল্যায়ন করা হয় না। যার অর্থ যখন প্রয়োজন হয় না তখন অনেকগুলি অপারেশন এড়ানো যায়। একটি মৌলিক সি # এ সম্পর্কে চিন্তা করুন যদি এর মতো ক্লজ থাকে:
if(IsSomethingTrue() && AnotherThingTrue())
{
do something;
}
যদি IsSomethingTrue()
মিথ্যা হয় তবে AnotherThingTrue()
পদ্ধতিটি কখনই মূল্যায়ন করা হয় না।
যদিও হাস্কেল একটি আশ্চর্যজনক ভাষা, তবে এফ # এর বড় সুবিধা (আপাতত) এটি হ'ল এটি সিএলআর শীর্ষে বসে on এটি বহুভোগ প্রোগ্রামিংয়ের জন্য এটি leণ দেয়। একদিন, আপনি এএসপিএনটি এমভিসিতে আপনার ওয়েব ইউআই, সি # তে আপনার ব্যবসায়ের যুক্তি, এফ # তে আপনার মূল অ্যালগরিদম এবং আয়রনুবিতে আপনার ইউনিট পরীক্ষা লিখতে পারেন .... সমস্ত নেট নেট ফ্রেমওয়ার্কের মধ্যে।
হাস্কেল সম্পর্কিত আরও তথ্যের জন্য সাইমন পাইটন জোনের সাথে সফটওয়্যার ইঞ্জিনিয়ারিং রেডিও শুনুন: পর্ব 108: কার্যকরী প্রোগ্রামিং এবং হাস্কেলের সায়মন পাইটন জোন্স
বড় পার্থক্য:
পার্থক্যগুলির চেয়ে মিলগুলি আরও গুরুত্বপূর্ণ। মূলত, আপনি ইতিমধ্যে .NET চালু থাকলে আপনার F # ব্যবহার করা উচিত, অন্যথায় হ্যাস্কেল। এছাড়াও, ও ও অলসতার অর্থ হ'ল এফ # আপনার (সম্ভবত) ইতিমধ্যে যা জানা রয়েছে তার কাছাকাছি, সুতরাং এটি শেখা সম্ভবত সহজ।
প্ল্যাটফর্ম: হাস্কেলের নিজস্ব রানটাইম রয়েছে, এফ # ব্যবহার করে। নেট। পারফরম্যান্স পার্থক্য কী তা আমি জানি না, যদিও আমি সন্দেহ করি যে অনুকূলিতকরণের আগে গড় কোডটি একই রকম। আপনার নেট। লাইব্রেরিগুলির প্রয়োজন হলে F # এর সুবিধা রয়েছে।
অবজেক্ট ওরিয়েন্টেশন: এফ # এর ওও রয়েছে এবং আপনার কোড ওও না থাকলেও নেট নেট ক্লাসগুলি ব্যবহার করা সহজ তা নিশ্চিত করার জন্য খুব যত্নশীল। হাস্কেলের টাইপ ক্লাস রয়েছে যা আপনাকে একটি অদ্ভুত উপায়ে ওওর মতো কিছু করতে দেয়। এগুলি হ'ল কমন লিস্প জেনেরিক ফাংশন সহ রুবি মিক্সিনগুলি। এগুলি কিছুটা জাভা / সি # ইন্টারফেসের মতো।
অলসতা: হাস্কেল অলস, এফ # নয়। অলসতা কিছু দুর্দান্ত কৌশলগুলি সক্ষম করে এবং এমন কিছু জিনিস দেয় যা ধীর দেখায় আসলে দ্রুত কার্যকর হয়। তবে আমার কোডটি কত দ্রুত চলবে তা অনুমান করা আমার পক্ষে অনেক বেশি কঠিন find উভয় ভাষা আপনাকে অন্য মডেলটি ব্যবহার করতে দেয়, আপনাকে কেবল আপনার কোডটিতে এটি স্পষ্ট করতে হবে।
গৌণ পার্থক্য:
এফ # ভাষা এমএল পরিবারের অংশ এবং এটি ওক্যামেলের খুব কাছাকাছি। আপনি হাস্কেল এবং ওক্যামেলের মধ্যে পার্থক্য নিয়ে এই আলোচনাটি পড়তে চাইতে পারেন ।
একটি প্রধান পার্থক্য, যা সম্ভবত বিশুদ্ধতার ফলস্বরূপ তবে আমি উল্লেখ করা কম দেখি, হ'ল স্নেহের বিস্তৃত ব্যবহার। যেমনটি প্রায়শই ইঙ্গিত করা হয়েছে, স্নাদগুলি বেশিরভাগ যে কোনও ভাষায় নির্মিত হতে পারে তবে লাইব্রেরিগুলিতে যখন সেগুলি ব্যাপকভাবে ব্যবহৃত হয় এবং আপনি নিজে সেগুলি ব্যবহার করেন তখন জীবন পরিবর্তন হয়।
মনাদগুলি অন্য ভাষায় আরও সীমাবদ্ধ উপায়ে দেখা কিছু সরবরাহ করে: প্রবাহ নিয়ন্ত্রণের বিমূর্ততা। এগুলি সমস্ত ধরণের জিনিস করার অবিশ্বাস্যভাবে কার্যকর এবং মার্জিত উপায়ে এবং হেস্কেলের এক বছর আমার প্রোগ্রামের পুরোপুরি পরিবর্তন করেছে, একইভাবে অনেক বছর আগে ওও প্রোগ্রামিংয়ের দিকে চলে যাওয়া এটিকে পরিবর্তন করেছে, বা অনেক পরে, উচ্চতর অর্ডার ফাংশন ব্যবহার করে।
দুর্ভাগ্যক্রমে, পার্থক্য কী তা আপনাকে দেখতে দেওয়ার জন্য পর্যাপ্ত উপলব্ধি করার মতো এই জায়গার আর কোনও উপায় নেই। আসলে, কোন পরিমাণে লেখা এটি করবে না; সত্যিকারের বোঝার জন্য আপনাকে কেবল কোড শিখতে এবং লেখার জন্য যথেষ্ট সময় ব্যয় করতে হবে।
পাশাপাশি, যখন আপনি .NET প্ল্যাটফর্ম / লাইব্রেরিগুলির সাথে ইন্টারফেস করেন তখন এফ # কখনও কখনও কিছুটা কম কার্যকরী বা আরও বিশ্রী হয়ে উঠতে পারে (কার্যকরী প্রোগ্রামিং দৃষ্টিকোণ থেকে), কারণ গ্রন্থাগারগুলি স্পষ্টতই ওও দৃষ্টিকোণ থেকে ডিজাইন করা হয়েছিল।
সুতরাং আপনি নিজের সিদ্ধান্তটি এইভাবে বিবেচনা করতে পারেন: দ্রুত, তুলনামূলকভাবে সামান্য উন্নয়নের জন্য আপনি কি এই ভাষাগুলির মধ্যে একটি চেষ্টা করার চেষ্টা করছেন, বা আপনি আরও কিছুটা সময় দিতে এবং আরও বড় কোনও কিছুর জন্য কম তাত্ক্ষণিক সুবিধা পেতে ইচ্ছুক? দীর্ঘমেয়াদী। (বা, কমপক্ষে, যদি আপনি আরও বড় কিছু না পান তবে দ্রুত অন্যটিতে স্যুইচ করার সহজ ক্ষমতাটি?) যদি প্রাক্তন, এফ # আপনার পছন্দ হয়, যদি উত্তরোত্তর, হাস্কেল হয়।
অন্যান্য কিছু সম্পর্কিত সম্পর্কযুক্ত পয়েন্ট:
হাস্কেলের কাছে কিছুটা সুন্দর সিনট্যাক্স রয়েছে, যা কোনও আশ্চর্যের নয়, যেহেতু হাস্কেলের ডিজাইনাররা এমএলকে বেশ ভাল জানত। তবে, এফ # 's' লাইট 'সিনট্যাক্স এমএল সিনট্যাক্সের উন্নতির দিকে অনেক এগিয়ে গেছে, সুতরাং সেখানে বিশাল ব্যবধান নেই।
প্ল্যাটফর্মের ক্ষেত্রে, F # অবশ্যই .NET; মনোতে এটি কতটা ভাল কাজ করবে তা আমি জানি না। জিএইচসি তার নিজস্ব রানটাইম সহ মেশিন কোডে সংকলন করে, উইন্ডোজ এবং ইউনিক্স উভয়েরই অধীনে ভাল কাজ করে, যা NET এর সাথে একইভাবে তুলনা করে, বলে, সি ++ করে does কিছু পরিস্থিতিতে এটি বিশেষত গতি এবং নিম্ন-স্তরের মেশিন অ্যাক্সেসের ক্ষেত্রে সুবিধা হতে পারে। (উদাহরণস্বরূপ, হাস্কেল / জিএইচসিতে একটি ডিডিই সার্ভার লিখতে আমার কোনও সমস্যা হয়নি; আমি মনে করি না যে আপনি কোনও। নেট ভাষায় এটি করতে পারতেন, এবং নির্বিশেষে এমএস আপনাকে অবশ্যই এটি করতে চাইবে না।)
ওয়েল, একটির জন্য আমি একটি প্রধান সুবিধা বলব যে F # .NET প্ল্যাটফর্মের বিরুদ্ধে সংকলন করে যা উইন্ডোতে মোতায়েন করা সহজ করে। ওয়েব অ্যাপ্লিকেশন তৈরি করতে ASP.NET এর সাথে মিলিত F # ব্যবহার করে ব্যাখ্যা করা উদাহরণগুলি আমি দেখেছি ;-)
অন্যদিকে, হাস্কেল দীর্ঘকাল ওয়াহআয়ের জন্য রয়েছে, সুতরাং আমি মনে করি যে ভাষার লোকেরা যারা বিশেষজ্ঞ ছিলেন তাদের ভাষা আরও বড়।
এফ # এর জন্য আমি কেবলমাত্র এখনও পর্যন্ত একটি বাস্তব বাস্তবায়ন দেখেছি, যা ধারণা ওএসের এককতার প্রমাণ ular আমি হাস্কেলের আরও বাস্তব বাস্তবায়ন দেখেছি।