# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > F#‎‎ > سوال: F#‎ برای انجام چه پروژه هایی مناسبه ؟؟

## NIK

سلام

در 
https://barnamenevis.org/showthread.php?t=230433
خواندیم:




> همانطور که خالق این زبان در مصاحبه هاش گفته ، قرار  نیست این زبان جایگزین  وی بی یا سی شارپ بشود. در واقع هنوز هم برای  برنامه های تجاری[4] و GUI و برنامه های  تحت وب و ... زبان های فعلی مناسب ترند (نه این که F#‎ قادر به انجام این  کارها نباشد) موارد کاربرد F#‎ : 
> برنامه  هایی که      قرار است به صورت موازی روی چند هسته (یا سی پی یو) اجرا  شوندبرنامه هایی که با      حجم وسیعی از داده ها سر و کار دارند (data  analysis)برنامه های      محاسباتی و ریاضی و آماری و ...


از دوستانی که به اف شارپ تسلط دارن میپرسم :
در چه مواردی از اف شارپ استفاده میکنید؟
آیا ارزشش رو داره که واسه یادگیری روش وقت بذارم؟

به طور کلی، *با توجه به تجربه شخصی خودتان*،از  اف شارپ واسه انجام چه پروژه هایی استفاده میکنید؟

----------


## Mehdi Asgari

من قبلا به این سوال در اینجا جواب دادم:
http://stackoverflow.com/questions/5...ou-using-f-for 
ببین #F هم یک زبان دیگر تحت دات نت هست که به تو اجازه میده مثل دیگر زبان های تحت دات نت (وی بی ، سی شارپ ، ...) از امکانات فریم ورک استفاده کنی. یعنی می تونی Web App ، ویندوز فرم ، برنامۀ کنسول ... باهاش ایجاد کنی. اما #F به خاطر برخوردار بودن از ویژگی های زبان های تابعی ، برنامه نویس رو قادر می کنه یک سری مسائل رو راحت تر و سریع تر حل کنه. 
همونطور که می دونید #F محیط طراحی گرافیکی (RAD IDE) برای ایجاد برنامه های تحت ویندوز نداره؛ علتش هم اینه که قرار نیست با ایجاد یک زبان جدید، دانش قبلی رو فراموش یا ترک کرده و هجوم بیارید به سمت این زبان. هنوز هم مایکروسافت (و خیلی از برنامه نویسا از جمله بنده) سی شارپ و وی بی رو بهترین زبان های تحت دات نت برای ایجاد برنامه های Line Of Business می دونن و استفاده از #F در جاهایی مثل محاسبات آنالیزی بر روی مقدار زیادی از داده ها ، توجیه پذیره.
جاهایی که استفاده از #F نسبت به زبان های موجود برتری داره (کم تر بودن حجم کد ، سریع تر شدن زمان توسعه):
ایجاد DSL (زبان های کوچک با منظور خاص)
انجام محاسبات آنالیزی و ریاضی بر روی حجم زیادی از داده ها
برنامه نویسی موازی 
برنامه نویسی مالی (عدۀ زیادی از مشتری های زبان های تابعی ، بانک های بزرگ دنیا هستند)
...
این لیست (و لیست های مشابه) به این معنا نیست که تو نمی تونی برنامه های Win Forms یا WPF یا وب بنویسی ،بلکه میگه در اون زمینه ها مزیت بیشتری نسبت به C#‎ و VB حاصل نمیشه ، و جاهای دیگری هست که #F قدرت خودش رو نشون میده.
این هم بعضی از شرکت های معروفی که از #F استفاده می کنن:
1- Flying Frog Consultancy در لندن ، مشاورۀ نرم افزاری و ارائۀ راه حل های نرم افزاری با استفاده از OCaml و #F (دکتر Jon Harrop موسس این شرکت تک نفره!، نویسندۀ کتاب های F#‎ For Scientists و F#‎ for Technical Computing هست و نیز محصولاتی به صورت کتابخونه برای #F می فروشه که لیستش رو اینجا می تونید ببینید: http://www.ffconsultancy.com/products/index.html 
در ضمن اولین و تنها مجلۀ #F به نام F#‎ Journal هم متعلق به ایشونه)
2- Intellifactory که ابتدا در بوداپست مجارستان تاسیس و بعد ها دفاتری در لندن ، پاریس و کالیفرنیا تاسیس کرد ، علاوه بر برگزاری دوره های آموزشی #F و انجام مشاوره ، محصولی به نام WebSharper داره که در واقع یک F#‎ to JavaScript Compiler هست و یک فریم ورک کامل برای ایجاد برنامه های تحت وب محسوب میشه.(قبلا اینجا معرفی کرده بودم: https://barnamenevis.org/showpo...77&postcount=5 )
http://www.intellifactory.com/
3- موسسه مالی Credit Suisse
4- موسسۀ DOE Joint Genome Institute از #F برای انجام محاسبات استفاده می کنه
5- DataSynapse
و خیلی شرکت های دیگری که ممکنه مثل شرکت های فوق ، به صورت علنی اعلام نکرده باشن که از چه فن آوری هایی استفاده می کنند.
در ضمن #F ویژگی هایی داره که در هیچ زبان تحت دات نت (و یا بعضا در هیچ زبانی) وجود نداره:
Async Workflows
Units of Measure
Built-in tuple and list
Computation Expressions
Quotations
REPL
….
(در مورد این ویژگی ها بعد ها به تفصیل بحث خواهم کرد)
در مورد ارزش داشتن: مسلما داره؛ نه فقط اف شارپ ، بلکه یادگیری هر زبانی ،در نگرشت به برنامه نویسی موثره (حتی اگه ازش به طور روزمره استفاده نکنی). مرحوم فقید Dave Thomas (رضی الله عنه) می فرمایند هر سال یک زبان جدید یاد بگیرید؛ فکر کنم با توجه به اقبال عمومی نسبت به برنامه نویسی موازی و نیز تابعی ، و رلیز شدن نسخۀ نهایی و stable اف شارپ ، امسال سال یادگیری اف شارپ باشه

----------


## flamingo

سلام



> برنامه نویسی مالی (عدۀ زیادی از مشتری های زبان های تابعی ، بانک های بزرگ دنیا هستند)


یعنی اف شارپ به درد نرم افزارهای حسابداری هم میخورد؟؟
ممنون

----------


## Mehdi Asgari

> یعنی اف شارپ به درد نرم افزارهای حسابداری هم میخورد؟؟


به درد که می خوره ؛ اما منظور من از اون جمله ، بیشتر محاسبات بر روی تراکنش های مالی در مقیاس های بزرگ و آنالیز داده ها و data mining و ... بود که ظاهرا در دنیای واقعی ، بیشتر به درد موسسات مالی می خوره
(مثلا Jane Street از زبان OCaml که شباهتی با #F داره استفاده می کنه. در این ویدئو توضیح میدن که چطور و در کجا ها از OCaml استفاده می کنن: http://ocaml.janestreet.com/?q=node/61)

----------


## flamingo

ممنون
راستی یک سوال دیگر، رابطه اف شارپ با سی پلاس چطور است؟ آیا کاملاً ناسازگار هستند؟؟

----------


## Mehdi Asgari

> راستی یک سوال دیگر، رابطه اف شارپ با سی پلاس چطور است؟ آیا کاملاً ناسازگار هستند؟؟


این سوال ، نامفهوم و نامرتبط به تاپیکه؛ #F روی فریم ورک دات نت اجرا میشه (اگه منظورت استفاده از DLL های native یا COM هست ، هیچ تفاوتی بین #F و #C وجود نداره . البته #F پوینتر های unmanaged مثل سی شارپ نداره)

----------


## Mehdi Asgari

در ضمن خوندن این Case Study ها هم خالی از لطف نیست
http://www.microsoft.com/casestudies...yid=4000006794
http://www.microsoft.com/casestudies...yid=4000005226
http://blog.magenic.com/blogs/aarone...Trueskill.aspx

----------


## M-Gheibi

اولین کتابی که در مورد اف شارپ منتشر شد (Foundations of F#‎) در صفحه سومش چند مثال جالب در این مورد زده :
http://books.google.com/books?id=n1D...page&q&f=false
متن کامل و بدون نقص در لینک فوق قابل دسترس هست ولی به طور خلاصه دو مثال زیر از لینک بالا رو اینجا می نویسم:
اول از همه از Ralf Herbrich یکی از مدیران گروه بازی‌های بخش تحقیقات شرکت مایکروسافت در این مورد سوال میشه و بخشی از جوابش این هست:
"اولین تجربه‌ی کاربردی، نرم‌افزاری برای انتقال 110 گیگابایت داده‌ی ثبت شده به بانک اطلاعاتی SQL بود. این مقدار داده در 11.000 فایل متنی که در 300 پوشه‌ قرار داشتند ذخیره شده بود. کل نرم‌افزار تنها 90 خط کد بود (با احتساب توضیحات افزوده شده!) و عمل انتقال داده‌ها در کمتر از 18 ساعت به پایان رسید. این زمان نشان‌دهنده‌ی آن است که به طور میانگین در هر ثانیه 10.000 خط داده‌ی ثبت شده در فایل‌ها مورد پردازش قرار گرفته است. چنین نتیجه‌ای در زمانی که کد نوشته شده بهینه‌سازی نشده بود بسیار شگفت‌انگیز بود. من توقع داشتم برای نوشتن نرم‌افزار و پردازش فایل‌ها و دریافت نتیجه‌ی مطلوب نزدیک به یک هفته وقت صرف کنم!"

در ادامه مثال دیگه ای رو میزنه که در اون برنامه ای در 100 خط کد با اف شارپ نوشته شد که معادل آن در سی شارپ نزدیک 1000 خط کد میشد. این برنامه پردازش سنگینی (خواندن اطلاعات از دیتابیس SQL و درج نتایج در فایل های اطلاعاتی MATLAB) رو تنها در 10 دقیقه انجام داد!

----------


## Mehdi Asgari

> اول از همه از Ralf Herbrich یکی از مدیران گروه بازی‌های بخش تحقیقات شرکت مایکروسافت در این مورد سوال میشه و بخشی از جوابش این هست:
> "اولین تجربه‌ی کاربردی، نرم‌افزاری برای انتقال 110 گیگابایت داده‌ی ثبت شده به بانک اطلاعاتی SQL بود. این مقدار داده در 11.000 فایل متنی که در 300 پوشه‌ قرار داشتند ذخیره شده بود. کل نرم‌افزار تنها 90 خط کد بود (با احتساب توضیحات افزوده شده!) و عمل انتقال داده‌ها در کمتر از 18 ساعت به پایان رسید. این زمان نشان‌دهنده‌ی آن است که به طور میانگین در هر ثانیه 10.000 خط داده‌ی ثبت شده در فایل‌ها مورد پردازش قرار گرفته است. چنین نتیجه‌ای در زمانی که کد نوشته شده بهینه‌سازی نشده بود بسیار شگفت‌انگیز بود. من توقع داشتم برای نوشتن نرم‌افزار و پردازش فایل‌ها و دریافت نتیجه‌ی مطلوب نزدیک به یک هفته وقت صرف کنم!"


لینک سومی که در پست https://barnamenevis.org/showpo...95&postcount=7 دادم ، جزییات این پروژه (مطالب پایه ای و اسلاید ها) و نیز نمونه ای از پیاده سازی رو همراه با سورس ارائه کرده.

----------

