F # OCaml এ পরিবর্তন [বন্ধ]


126

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


3
ওসিএএমএল বিকাশকারীদের দৃষ্টিকোণ থেকে অন্য একটি তুলনা যাতে এটি বেশ পক্ষপাতদুষ্ট তবে তবুও দরকারী।
মৌরিসিও শেফার

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

1
নিবন্ধন করুন
জেডি

2
@ জোনহরপ আমি মনে করি এই লিঙ্কটি সম্ভবত আপডেট হওয়া। (কেইকো নাকাটা দ্বারা)
বার্ট

উত্তর:


89

প্রধান পার্থক্য হ'ল এফ # সমর্থন করে না:

  • functors
  • ওক্যামেল-স্টাইলের অবজেক্ট
  • বহুমুখী রূপগুলি
  • camlp4 / 5 প্রিপ্রসেসর বা এক্সটেনশন পয়েন্ট (পিপিএক্স)

এছাড়াও, এফ # এর লেবেলযুক্ত এবং optionচ্ছিক পরামিতিগুলির জন্য পৃথক বাক্য গঠন রয়েছে।

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

পার্থক্যের সম্পূর্ণ তালিকা এখানে রয়েছে (দ্রষ্টব্য: আর্কাইভ.অর্গ মৃত লিঙ্কটির প্রতিস্থাপন)।


3
এফ # এর জন্য কি ক্যাম্পল 4 সমান?
nlucaroni

এমন ভাববেন না। তবে আপনি ক্যাম্পল 4 এর মাধ্যমে এবং F # সংকলকটিতে সম্ভবত আপনার প্রোগ্রামটি পাইপ করতে পারেন। (এটির সুপারিশ করবে না))
ক্রিস কনওওয়ে

6
এফ # এর নামকরণ এবং alচ্ছিক আর্গুমেন্ট রয়েছে তবে এটি আলাদা সিনট্যাক্স এবং শব্দার্থবিজ্ঞান ব্যবহার করে। এফ # দিয়ে ক্যাম্যালপ 4 ব্যবহার করতে আপনার সমস্যা হবে কারণ এফ # প্রায় সবসময় ইনডেন্টেশন সংবেদনশীল তাই এটির জন্য একটি নতুন লেক্সারের প্রয়োজন হবে এবং লেক্সারগুলিতে ক্যাম্পল 4 নথিপত্র প্রায় দুই বছর অলিখিত লেখা থেকে যায়।
জেডি

4
এবং এখন লিঙ্কটি মারা গেছে। আমি সম্ভবত এটি ভাল। আমি নিশ্চিত যে '08 সাল থেকে এফ # উন্নত হয়েছে।

1
আমি কোথাও শুনেছি যে মাইক্রোসফ্ট এফ # তে ক্যাম্পল 4-এর মতো কার্যকারিতা যুক্ত করতে চায় না কারণ তারা ভীত ছিল যে এই জাতীয় কার্যকারিতা লোকদের মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও ছাড়াও অন্যান্য বিকাশের পরিবেশ ব্যবহার করতে উত্সাহিত করতে পারে।
ক্রিসমোম 1

118

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

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

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

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


18
ওহো! ওসিএএমএলকে বিশেষত রূপান্তর করার জন্য বংশবৃদ্ধি করা হয়েছিল এটি প্রসঙ্গে F # এবং .NET এর চেয়ে অনেক বেশি উন্নত। ক্যাম্পল 4 এফ # এর চেয়ে অনেক বেশি শক্তিশালী উদ্ধৃতি ব্যবস্থা। OCaml এর লেক্সার এবং পার্সারগুলি নেট .NET- র জন্য উপলব্ধ যে কোনও কিছুর চেয়ে ভাল। এছাড়াও, ক্যাম্প্প 4 ম্যাক্রোগুলি উপলব্ধ যা সক্রিয় নিদর্শন এবং গণনার অভিব্যক্তিগুলি কার্যকর করে। ওক্যামেলের আইডিই রয়েছে যা ভিজুয়াল স্টুডিও এফ # এর জন্য একই সুবিধা দেয়।
জেডি

4
ক্যাম্প 4 এ যা পাওয়া যায় তার চেয়ে F # উদ্ধৃতিগুলির সম্পূর্ণ ভিন্ন লক্ষ্য রয়েছে (একপাশে, এটি OCaml ভাষা নয় - এটি এর শীর্ষে থাকা একটি সিস্টেম), সুতরাং তাদের তুলনা করা মোটেও ন্যায়সঙ্গত নয়। ক্যামএলপ 4 এর অস্তিত্ব অবশ্যই ওক্যামেলের একটি সুবিধা, তবে কোটেশনগুলির সাথে এর কোনও যোগসূত্র নেই (যা জিপিইউতে ওয়েবশার্পার, এফ # চালানোর মতো জিনিসগুলিকে অনুমতি দেয়)
টমাস পেট্রিসেক

12
@ টমাস: আপনি কীভাবে দাবিটি পুনর্মিলন করবেন যে ক্যাম্পলপ 4 "ওসিএএমএল এর শীর্ষে একটি সিস্টেম যখন ক্যাম্পলপ 4 বাইনারি স্তরে ওসিএএমএল এর সাথে সংহত করা হয় এবং ক্যাম্পলপ 4 ম্যাক্রোগুলি চলমান ওসিএএমএল আরপিএল-তে ফ্লাইটটিকে সংজ্ঞায়িত করা যায় এবং ব্যবহার করা যায়? ক্যাম্প 4 এর একটি উদ্ধৃতি ব্যবস্থা সরবরাহ করে এই সত্যের সাথে আপনি কীভাবে ক্যাম্পল 4 এর "কোটেশনগুলির সাথে কিছু করার নেই" এই দাবিটির সাথে কীভাবে মিলন করবেন? স্কাইডেকের ocamljs সরঞ্জাম 2007 সাল থেকে জাভাস্ক্রিপ্টে ক্যাম্পল 4 ব্যবহার করে ওক্যামল কোডটি উদ্ধৃত করে ওম্প্যামল কোডটি সংকলন করে আসছে যখন ক্যাম্পলপ 4 ওয়েবশার্পর পছন্দগুলি সহজতর করতে পারে না সে ক্ষেত্রে আপনার এই সংঘাতের সাথে কীভাবে মিলন করবেন?
জেডি

6
@ টমাস: এফ # এমনকি আনবাউন্ড ভেরিয়েবলের সাথে এক্সপ্রেশনও উদ্ধৃত করতে পারে না <@ a @>, যেমন সংজ্ঞা টাইপ করুন <@ type t = int @>এবং এটি ক্যাম্পপ 4 এর মতো স্বেচ্ছাসেবী ব্যাকরণগুলিকে অনেক কম এক্সটেনসিবল লেক্সার এবং পার্সার পরিচালনা করতে পারে না। একটি শালীন ম্যাক্রো সিস্টেমের অভাব একটি ঘাটতি তবে আইএমএইচও, এফ # এর জন্য কোনও শালীন লেক্সার এবং পার্সারের অভাব আরও গুরুতর প্রতিবন্ধকতা। আমি প্রকৃতপক্ষে বিকাশকারীদের ওসিএএমএল ব্যবহার করে তাদের লেক্সার এবং পার্সার তৈরি করার পরামর্শ দিচ্ছি, ওফ ক্যামেলের উচ্চতর সরঞ্জাম সমর্থন থেকে উপকৃত হওয়ার জন্য এফ # সমর্থন করে এমন সাবসেটটিতে নিজেকে সীমাবদ্ধ করে এফ এ ফিরে পোর্ট করে!
জেডি

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

16

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

কিছু প্রতিক্রিয়াশীলরা যা লিখেছেন তার বিপরীতে, F # এর ("নামযুক্ত") লেবেলযুক্ত এবং alচ্ছিক যুক্তির পক্ষে (সীমাবদ্ধ) সমর্থন রয়েছে।

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

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


28
সমস্ত লিঙ্কের জন্য অর্থ প্রদানের সাবস্ক্রিপশন প্রয়োজন।

2
তারা জিনিষ জন Harrop নিজে লিখেছিলেন (তিনি লেখক হিসাবে প্রতিটি সময় তালিকাবদ্ধ) এর জন্য লজ্জাহীন প্লাগ হবে বলে মনে হচ্ছে @Will
symbiont

@ সিমবায়ান্ট হ্যাঁ, আমরা এটি কিছুটা স্প্যামি জানি। আপনি বিনামূল্যে কিছু অতিরিক্ত তথ্যের সাথে লিঙ্ক দিলে ভাল লাগবে। উত্তরগুলি লিঙ্কগুলি ছাড়াই ঠিক আছে, তাই আপনি সেখানে রয়েছেন।

@Will চমৎকার হবে যদি আপনি কিছু অতিরিক্ত তথ্য নিজেকে সংযুক্ত
symbiont

@ সিম্বিওনট আমি যখন আপনি "আপনি" বলেছিলেন তখন আমি আপনাকে জন হিসাবে বোঝাতে চাইনি। অদ্ভুত লাগছে, পড়েছি। জোন কোনও আন্তঃদেশীয় মন্তব্য মুছে ফেলেছে কিনা তা নিশ্চিত নয়।

9

এফ # এবং ওক্যামল ভাষাশাস্ত্রের এমএল পরিবারে ট্যাক্সোনিকভাবে ক্লাস, যার মধ্যে অন্যান্য অদ্ভুত প্রাণীরও পুরো পাসল রয়েছে। এফ # ওসিএএমএল থেকে নতুন, এবং এটিতে এখনও ফান্টেক্টর নেই [মডিউল -> মডিউল এর ফাংশন] বা সারি প্রকার [অবজেক্ট ক্লাস এবং পলিমারফিক ভেরিয়েন্ট] এখনও নেই। তাদের মধ্যে, এই দুটি সরলীকরণ সম্ভবত। নেট প্ল্যাটফর্মে বিকাশকারী কারও জন্য শেখার বক্ররেখা সহজতর করে। দুঃখের বিষয়, এই দুটি ভাষার বৈশিষ্ট্য ওসিএএমএলে প্রচুর শক্তিশালী, সুতরাং F # এর কোড কীভাবে কোড করা যায় সে সম্পর্কে অন্তর্দৃষ্টি অর্জনের জন্য ওসিএএমএল সাহিত্যের পড়া সম্ভবত পরবর্তী সময়ের সাথে হতাশার দিকে পরিচালিত করবে যখন এটি সম্ভবত সি # এর একটি দুর্দান্ত বিকল্প যেখানে উভয়ই উপলব্ধ।


2

এফ # সরাসরি ওসিএএমএল সিনট্যাক্স সমর্থন করে। এটি 100% সামঞ্জস্যপূর্ণ নাও হতে পারে তবে আমি মনে করি এটি খুব কাছে।

http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html

এখানে পার্থক্যগুলির একটি তালিকা রয়েছে (এটি কতটা আপ টু ডেট তা নিশ্চিত নয়)

http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html


1
"F # OCaml সিনট্যাক্সকে সরাসরি সমর্থন করে It এটি 100% সামঞ্জস্যপূর্ণ নাও হতে পারে তবে আমি মনে করি এটি বেশ কাছাকাছি"। ওসিএএমএল সামঞ্জস্যতার জন্য আইএমই এফ # সংকলকের সমর্থনটি খুব বগি। এটি বিদ্যমান ওসিএএমএল কোড বেসগুলিকে এফ # তে পোর্ট করা কঠিন করে তুলতে পারে কারণ এফ # সংকলক বৈধ কোডে অভ্যন্তরীণভাবে মারা যায়।
জেডি

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