কোন অঞ্চলে F # এর ব্যবহার সি # এর চেয়ে বেশি উপযুক্ত হতে পারে? [বন্ধ]


210

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

বিগত বেশ কয়েক বছর ধরে সি # আরও বেশি কার্যকরী ভাষার বৈশিষ্ট্যগুলি উপস্থাপন করে এর সাধারণ উদ্দেশ্য বৈশিষ্ট্যগুলি বাড়িয়েছে: লিনকুই (তালিকা বোঝা), ল্যাম্বডাস, ক্লোজারস, অজ্ঞাতনামা প্রতিনিধি এবং আরও ...

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

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

উত্তর:


258

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

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

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

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

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

আন্তঃকরণ আমি সি # তে গণনা ইঞ্জিনের সাথে ইন্টারফেসটি সংজ্ঞায়িত করেছি এবং F # তে গণনা প্রয়োগ করেছি। গণনা ইঞ্জিনটি তখন কোনও সি # মডিউলে ইনজেকশন করা যেতে পারে যা আন্তঃব্যবহারযোগ্যতা সম্পর্কে কোনও উদ্বেগ ছাড়াই এটি ব্যবহার করা দরকার। বিজোড়। সি # প্রোগ্রামারটি কখনই জানতে পারে না।

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

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

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


18
এফ # সংখ্যা ক্রাঞ্চিং ইঞ্জিনগুলির জন্য খুব উপযুক্ত কি তা বোঝানোর জন্য +1। পরিমাপের একক উল্লেখ করার জন্য আরেকটি (ভার্চুয়াল) +1। ভাষার সেই অংশটি প্রায়শই উল্লেখ করা উপযুক্ত।
সিফরন

5
দুর্দান্ত উত্তর, প্রাসঙ্গিক, সমসাময়িক এবং জটিলতার সাথে ডিল করার জন্য এফ # উপযুক্ততার রূপরেখা, আমি এটি পড়ে অনেক কিছু শিখলাম, ধন্যবাদ
পিটার ম্যাকজি

দুর্দান্ত উত্তর সাইমন, এবং ডন যেমন গত রাতে উল্লেখ করেছেন, তার সাম্প্রতিক স্লাইডে উদ্ধৃত হয়েছে। "কার্টে যুক্ত করুন" লিঙ্কটি যুক্ত করার সময়?
ক্রিস ব্যালার্ড

1
হাই, আপনার অ্যাপ্লিকেশন আর্কিটেকচার সম্পর্কে আমাদের আরও কিছু বলার অনুমতি রয়েছে?
নিকস

76

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

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

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

এর আগে, আমি এফ # (এফ # তেও লিখিত) এর জন্য কোডডম সরবরাহকারীর সাথে কাজ করেছি। আমি আসলে সি # তে প্রথম পরীক্ষা-নিরীক্ষা করেছি, তবে তারপরে কোডটি এফ # তে রূপান্তর করেছি।

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

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

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


6
খুব আকর্ষণীয়, আরও প্রমাণ যে মাইক্রোসফ্টের মধ্যে এফ # এর গ্রহণযোগ্যতা অবশ্যই বেশি, এটি যে দুর্দান্ত ইন্টার্নশিপ হতে পারে!
পিটার ম্যাকজি

43

আমরা বিশ্বের প্রথম বাণিজ্যিক পণ্য এফ # ( ভিজ্যুয়ালাইজেশনের জন্য এফ # ) এবং দ্বিতীয় ( সংখ্যার জন্য এফ # ) এবং এফ # ( দ্য এফ #। নেট জার্নাল ) এর উপর প্রথম বাণিজ্যিক সাহিত্য রচনা করেছি এবং বর্তমান সংস্করণ সম্পর্কে একমাত্র বই লিখেছি এবং প্রকাশ করেছি এফ # এর ( প্রযুক্তিগত কম্পিউটিংয়ের জন্য ভিজ্যুয়াল এফ # 2010 )।

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

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

আমাদের ভিজ্যুয়ালাইজেশন লাইব্রেরি একটি বড় বিক্রেতা এবং এফ # ইন্টারেক্টিভ ভিজুয়াল স্টুডিওতে চলছে এর কার্যকারিতা কেন্দ্র। আমাদের গ্রন্থাগারটি ন্যূনতম পরিশ্রমের সাথে ইন্টারেক্টিভ 2 ডি এবং 3 ডি ভিজ্যুয়ালাইজেশন স্পোন করার ক্ষমতা দিয়ে এটিকে বাড়িয়ে তোলে (উদাহরণস্বরূপ ঠিকPlot([Function sin], (-6., 6.))একটি সাইন ওয়েভ প্লট করা)। বিশেষত, সমস্ত থ্রেডিংয়ের সমস্যাগুলি সম্পূর্ণ স্বয়ংক্রিয়ভাবে তৈরি হয় তাই ব্যবহারকারীদের ইউআই থ্রেড এবং প্রেরণের বিষয়ে চিন্তা করতে হবে না। গ্রন্থাগারের এই অংশটি লেখার সময় প্রথম শ্রেণির ফাংশন এবং অলসতা অত্যন্ত মূল্যবান ছিল এবং অন্য কোথাও বীজগণিত ডেটাটাইপগুলি ব্যবহার করা হয়েছিল। অনুমানযোগ্য পারফরম্যান্সও এখানে মূল্যবান প্রমাণিত হয়েছিল যখন আমাদের গ্রাহকরা ডাব্লুপিএফের হিট পরীক্ষায় পারফরম্যান্স বাগগুলিতে আঘাত করে এবং 10,000 10,000 কর্মক্ষমতা উন্নতির জন্য সহজেই F # তে প্রাসঙ্গিক কোডটি পুনরায় প্রয়োগ করতে সক্ষম হয়। এই পণ্যের জিইউআই-এর ফ্রি-ফর্ম প্রকৃতির কারণে, জিইউআই ডিজাইনার এবং সি # উপকারী হতে পারত না।

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

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


আপনি কি সেই একই জন হ্যারোপ যা "বিজ্ঞানীদের জন্য" F # লিখেছেন?
আন্দ্রে আর্টাস

7
হ্যাঁ. আমি বিজ্ঞানীদের জন্য 5 বছর আগে এফ # লিখেছি।
জন হ্যারোপ

এফ # তে কিউআর পচন কোডের জন্য আপনার কাছে এমন কিছু প্রকারের রেফারেন্স রয়েছে যা আপনি আপনার পেনিয়ুলিট অনুচ্ছেদে উল্লেখ করেছেন? ধন্যবাদ।
সামিক আর

@ সামিকআর: না, দুঃখিত। এটি বাণিজ্যিক কোড। যদিও এটি লেখা সহজ ছিল।
জন হ্যারোপ

মাল্টিকোর এফ # তে কোন শব্দটি ব্যবহার করেছেন?
অধ্যাপক বিগলসওয়ার্থ

25

গত or বা তার বেশি মাস ধরে, আমি ভিজ্যুয়াল স্টুডিও ২০১০-এর জন্য একটি ভিম এমুলেশন লেয়ারে কাজ করছি ith এটি সমস্ত উত্স সহ একটি বিনামূল্যে পণ্য যা এটি গিথুবে অবাধে উপলব্ধ available

প্রকল্পটি 3 ডিএলএল এর পৃথক স্তরের প্রতিনিধিত্ব করে বিভক্ত। প্রতিটি স্তর একটি সংশ্লিষ্ট ইউনিট পরীক্ষা dll আছে।

  1. ভিম ইঞ্জিন: এফ #
  2. অলংকরণ এবং সম্পাদক একীকরণের জন্য ডাব্লুপিএফ স্তর: সি #
  3. ভিজ্যুয়াল স্টুডিও একীকরণ স্তর: সি #

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

আমি এফ # এর মধ্যে যা সবচেয়ে আশ্চর্যজনক অনুভব করি তা হ'ল এটি কতটা সংক্ষিপ্ত ভাষা। ভিম ইঞ্জিনটি যুক্তির বেশিরভাগ অংশ নিয়ে গঠিত তবে এটি সামগ্রিক কোড বেসের 30% মাত্র।


19
সম্পাদক ... কার্যকরী ভাষা ... vi অনুকরণ ... আপনি ইমাস পুনরায় উদ্ভাবন করেছেন। NOOOOOOOOOOOOOOOOOOOOOOO!
বেন ভয়েগট

2
ছাড়া যে এটা "সার্টিফাইড 100% প্রথম বন্ধনী-মুক্ত" :)
পাভেল Minaev

@ পাভেল, কোর্সের পাঠ্যক্রম ছাড়াও এবং নেট পদ্ধতি কলগুলি
জারেডপাড়

26
দুটি নোট এখানে নোট। প্রথমত, টিপলগুলির ()এফ # তে প্রয়োজন নেই - ,অপারেটর যা তাদের তৈরি করে, তাই let x = 1,2কোনও প্যারেন্স ছাড়াই ইতোমধ্যে একটি বৈধ টুপল। দ্বিতীয়ত, এফ # তে যে কোনও জুটি পেরেনকে জোড়া জোড় প্রতিস্থাপন করা যেতে পারে begin.. end(এটি এমএল থেকে উত্তরাধিকার সূত্রে প্রাপ্ত) - সুতরাং, উদাহরণস্বরূপ, "foo".IndexOf begin 'a', 1 endএকটি বৈধ .NET পদ্ধতি কল method সুতরাং আপনি যদি কখনও প্যারেনস মুক্ত থাকতে চান, তবে F # এমন একটি ভাষা যা আপনাকে ঠিক এটি করতে সক্ষম করে :)
পাভেল মিনায়েভ

মজার মন্তব্য পাভেল! তা জানতাম না। আমি মনে করি যে বৃহৎ গোষ্ঠীবদ্ধ ব্লক সঙ্গে কিছু ক্ষেত্রে, আমি আসলে পছন্দ হতে পারে begin.. end। এছাড়াও: VsVim বিধি!
ড্যান ফিচ

13

এফ # ভিজ্যুয়াল স্টুডিও উপাদানগুলির জন্য অনেক ইউনিট পরীক্ষাগুলি F # তে লেখা থাকে। বিভিন্ন ভিজ্যুয়াল স্টুডিও বিটের উপহাস করে তারা ভিএস এর বাইরে ছুটে যায়। ইন্টারফেস প্রয়োগ করে এমন বেনামে থাকা অবজেক্টগুলিকে ধারণ করার ক্ষমতাটি একটি উপহাস ফ্রেমওয়ার্ক / সরঞ্জামের জায়গায় কার্যকর useful আমি শুধু লিখতে পারি

let owpe : string list ref = ref []
let vsOutputWindowPane = 
    { new IVsOutputWindowPane with
        member this.Activate () = err(__LINE__)
        member this.Clear () = owpe := []; 0
        member this.FlushToTaskList () = VSConstants.S_OK
        member this.GetName(pbstrPaneName) = err(__LINE__)
        member this.Hide () = err(__LINE__)
        member this.OutputString(pszOutputString) = owpe := pszOutputString :: !owpe ; 0
        member this.OutputStringThreadSafe(pszOutputString) = owpe := pszOutputString :: !owpe ; 0
        member this.OutputTaskItemString(pszOutputString, nPriority, nCategory, pszSubcategory, nBitmap, pszFilename, nLineNum, pszTaskItemText) = err(__LINE__)
        member this.OutputTaskItemStringEx(pszOutputString, nPriority, nCategory, pszSubcategory, nBitmap, pszFilename, nLineNum, pszTaskItemText, pszLookupKwd) = err(__LINE__)
        member this.SetName(pszPaneName) = err(__LINE__)
    }            
DoSomethingThatNeedsA(vsOutputWindowPane)
assert( !owpe = expectedOutputStringList )

যখন আমি একটি যেমন একটি দৃষ্টান্ত প্রয়োজন IVsOutputWindowPaneকিছু অন্যান্য উপাদান যা অবশেষে কলিং হবে পাস OutputStringএবং Clear, এবং তারপর পরিদর্শন string list refপরীক্ষা শেষে বস্তুর কিনা দেখতে প্রত্যাশিত আউটপুট লেখা হয়েছিল।


মজার, মাইক্রোসফ্টের মধ্যে এফ # এর গ্রহণযোগ্যতা অবশ্যই উচ্চতর যে আরও প্রমাণ। আমি জানতাম না যে আপনি বেনামি অবজেক্ট তৈরি করতে পারেন যা এফ # তে ইন্টারফেস প্রয়োগ করে
পিটার ম্যাকজি

9

আমরা এফ # তে লেক্স-ইয়্যাক বাস্তবায়ন ব্যবহার করে একটি কাস্টম বিধি ইঞ্জিনের ভাষা লিখেছিলাম

মন্তব্য উত্তর অন্তর্ভুক্ত করতে সম্পাদনা করুন

সি # তে কোনও লেক্স / ইয়্যাক প্রয়োগকরণ হয়নি। (যতদূর আমরা অবগত ছিলাম, এবং এফ # ওয়ানটি ছিল)

এটি সম্ভব হত, তবে নিজেদেরকে পার্সিং তৈরি করার জন্য একটি খাঁটি ব্যথা।

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


+1 আপনি আগে এটি সি # তে লিখতেন এটি কোনও কারণে অযোগ্য বা ধীর ছিল?
পিটার ম্যাকজি

@ পিটার ম্যাকগ্র্যাটন কমপক্ষে লেখার সময় (সফ্টওয়্যার), সি # তে কোনও লেক্স / ইয়্যাক প্রয়োগকরণ হয়নি। এটি সম্ভব হত, তবে নিজেদেরকে পার্সিং তৈরি করার জন্য একটি খাঁটি ব্যথা। stackoverflow.com/questions/540593/lex-yacc-for-c কিছু অন্যান্য পরামর্শ দেখায়, তবে আমাদের নেতৃত্ব স্থপতি কার্যকরী ভাষাগুলিতে একটি পুরানো হাত, তাই F # ব্যবহার করার পছন্দটি ছিল কোনও
মস্তিষ্কবিহীন

যদি আপনি ভেবে থাকেন যে সি # এর জন্য কোনও লেক্স / ইয়্যাক নেই তবে আমি আশঙ্কা করেছি যে আপনি কেবল এটির জন্য যথেষ্ট কঠিন দেখেন নি (এফ # এর চেয়ে বেশি বয়স্ক একজন) বলেছেন যে আপনার যদি লেক্স / ইয়্যাক এফ প্রয়োজন হয় তবে আমার মতে এটি আরও ভাল উপযুক্ত সি # এর চেয়ে পেরেকের হাতুড়ি
রুন এফএস

আমি নিজেই fslex / fxyacc এর সাথে F # ব্যবহার করেছি, যদিও "প্রযোজনা" প্রকল্পে নেই (এখনও প্রকাশ হয়নি, যাইহোক) - এমএসআইএল সিনট্যাক্স হাইলাইটিং এবং ভিএসের জন্য কোড সমাপ্তির সম্প্রসারণ extension এফ # ব্যবহারের বড় সুবিধা হ'ল আপনি এডিটি পাবেন যা পার্স গাছ উপস্থাপনের জন্য খুব সুবিধাজনক। এছাড়াও, ব্যবহার জিপার্সের ( en.wikipedia.org/wiki/Zipper_(data_structure) এবং জিপার্সের, কার্যকরী হচ্ছে, সংক্ষেপে এফ # টি নিপূণভাবে সহজ -) এটা সহজ ক্রমবর্ধমান lexing না করে তোলে।
পাভেল মিনায়েভ

7

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

যেমনটি অন্যদের দ্বারা উল্লিখিত হয়েছে বৈষম্যমূলক ইউনিয়ন এবং প্যাটার্ন মেলানো এই জাতীয় ডেটা কাঠামোর সাথে ভার্চুয়াল পদ্ধতিতে "সমস্ত জায়গাতেই" কোড ফেলে দেওয়ার চেয়ে অনেক সহজ করে তোলে

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

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


6

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


5

এটি প্রযোজনায় আছে কি না জানি না, তবে "দ্য পাথ অফ গো" এর জন্য এআই এফ # তে লেখা হয়েছিল:

http://research.microsoft.com/en-us/events/techvista2010/demolist.aspx#ThePathofGo

যাওয়ার পথ: এক্সবক্স 360 এর জন্য একটি মাইক্রোসফ্ট রিসার্চ গেম

এই ডেমোটি মাইক্রোসফ্ট রিসার্চ কেমব্রিজ-এ ইন-হাউস-এ উত্পাদিত গো-এর গেমের উপর ভিত্তি করে একটি এক্সবক্স ৩ show০ গেমের প্রদর্শন করে। গো পূর্ব এশিয়ার অন্যতম বিখ্যাত বোর্ড গেম, এটির উদ্ভব 4000 বছর আগে চীনে। গেমের প্রতারণামূলক সরলতার পিছনে দুর্দান্ত জটিলতা লুকায়। এটি শিখতে কেবল কয়েক মিনিট সময় নেয়, তবে আয়ত্ত করতে এটি আজীবন সময় নেয়। যদিও দাবাতে কম্পিউটারগুলি দক্ষতা ছাড়িয়ে গেছে, গোয়ের জন্য একটি প্রতিযোগিতামূলক এআই বাস্তবায়ন করা একটি গবেষণা চ্যালেঞ্জ remains গেমটি মাইক্রোসফ্ট রিসার্চ কেমব্রিজের বিকাশিত তিনটি প্রযুক্তি দ্বারা চালিত: একটি এআই, অনলাইন খেলোয়াড়দের সাথে মেলে, এফ # ভাষা এবং ট্রুস্কিল ™ খেলতে সক্ষম। এআই এফ # তে প্রয়োগ করা হয়েছে এবং এক্সবক্স 360-এ নেট নেট কমপ্যাক্ট ফ্রেমওয়ার্কে দক্ষতার সাথে চলার চ্যালেঞ্জটি পূরণ করে। এই গেমটি আপনাকে বেশ কয়েকটি দৃষ্টি আকর্ষণীয় 3 ডি দৃশ্যে রাখে। এটি এক্সএনএ পরিবেশ ব্যবহার করে পরিচালিত কোডে সম্পূর্ণরূপে বিকাশিত হয়েছিল।

(অন্য কেউ ইতিমধ্যে "ট্রুস্কিল" উল্লেখ করেছেন))


আকর্ষণীয়: এক্সবক্সের কমপ্যাক্ট ফ্রেমওয়ার্কে F # চলছে। FSharp.Core.dll এর সাথে FSharp.Core.optdata FSharp.Core.sigdata রেফারেন্স নন-সিএফ অ্যাসেমব্লিসির সাথে নেই?
পিটার ম্যাকজি

1
সিটিপি জাহাজগুলি .NETCF এর জন্য তৈরি আলাদা আলাদা FSharp.Core সহ। (সিলভারলাইটের জন্য আলাদা এফশার্প.কোরও রয়েছে))
ব্রায়ান

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