# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > F#‎‎ >  F#‎  در Reflector

## r00tkit

سلام

من امروز reflector رو دانلود کردم  دیدم به صورت default  از F#‎ هم پشتیبانی می شه !!!!

----------


## Mehdi Asgari

این کار تقریبا ناممکنه (و هیچ نیازی هم بهش احساس نمیشه.)
add-in ی که گفتی پر از اشکاله (یه پروژۀ سی خطی با اف شارپ بنویس ، با این decompile اش کن و نتیجه رو با نتیجه ای که برای سی شارپ بر می گردونه مقایسه کن)

----------


## r00tkit

راست می گی همون جوری که دیدی نتونست Console.WriteLine("geek"); v رو   بفهمه 

ولی سوال اینجاست : با این وضع چرا تو Reflector قرار دادنش ؟  یعنی نفهمیدن که این کار نمی شه ؟ یا یه تست نکردن  ببینن نتیجهی این کار شون چی بود ( ر.ج WriteLine) ؟

----------


## Mehdi Asgari

Red-Gate هر از چندگاهی یه فرصت چند روزه به کارمنداش میده که روی یه ایده ای (به انتخاب خودشون) کار کنن. تنها شرط اینه که پس از اون چند روز یه محصول قابل لمس داشته باشن.(Red-Gate جزو "بهترین شرکت ها برای کار" در زمینۀ آی تی در انگلیسه و قبلا به خاطر این جایزه هم گرفته)
البته اگر محصول طوری باشه که بشه در محصولات Red-Gate ازش استفاده کرد (یا در راستای اون محصولات باشه) بیشتر بهش بها میدن. این add-in هم از دل همون روزهای مخوف بیرون اومد (ایدۀ جدیدی هم نبود ، قبلا تلاش هایی برای نوشتن همچین چیزی صورت گرفته بود که مشابهش رو می تونی با جستجو پیدا کنی)

----------


## Salar Ashgi

خوب #F هم یه زبان دات نتی است ، حال چه فرقی با #C داره که دیکامپایل کردن پروژه هاش امکان پذیر
نیست ؟!

----------


## Mehdi Asgari

به خاطر این که هیچ رابطۀ یک به یکی بین ساختار های زبانی اف شارپ و MSIL وجود نداره. یعنی برای اکثر ساختار های سی شارپ، همتای متناظر در رانتایم و کتابخانۀ کلاس دات نت وجود داره، ولی در مورد اف شارپ اینطور نیست و بعضی از ساختار ها از توابع مختلف رانتایم اف شارپ استفاده می کنن (از توابع معمولی بگیر تا ساختار های پیشرفته ای مثل async و Quotations و ... )
یه کد ساده که از ساختار های معمول اف شارپ استفاده می کنه بنویس و نتیجه رو در ildasm یا Reflector مشاهده کن.

----------


## r00tkit

بازم من جواب نگرفتم   سوال : مگه اینا نمی دونن که این کار نمی شه چرا بازم  این add-in ناقص رو داخل reflector قرار دادن؟

----------


## Mehdi Asgari

اینو باید از خودشون پرسید. حتی در Release notesشون هم اسمی از اف شارپ برده نشده
http://www.red-gate.com/supportcente..._Reflector.htm

----------


## علیرضا مداح

سلام،
در تصریح گفته ی آقای عسگری مثالی می زنم؛ یک F#‎ Console Application ایجاد کنید و کد زیر را داخل آن قرار دهید:

[<Measure>] type m
[<Measure>] type cm

let CalculateVelocity (length:float<m> ,time:float<cm>) =
    length / time


حالا نتیجه را در Reflector پس از Diassemble کردن مشاهده کنید:


let rec CalculateVelocity length time  = 
    (length(* Binary Operator not handled *time)


و این هم خروجی ildasm:


.method public static float64  CalculateVelocity(float64 length,
                                                 float64 time) cil managed
{
  // Code size       5 (0x5)
  .maxstack  4
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  ldarg.1
  IL_0003:  div
  IL_0004:  ret
} // end of method Program::CalculateVelocity


می بینید که اثری از ویژگی Units of Measure نیست، چرا؟ اجازه دهید برادر Andrew Kenedy در این رابطه توضیح دهند:

*Units actually don't get seen at all by the CLR* - they are "erased".  They are a purely static phenomenon, which means that the performance of  code with units is no worse than the performance of the code with the  units removed. You can think of them as a "refinement" of usual .NET  types, seen *only by F#‎.* Of course this has some downsides (*no runtime  inspection of units*) but our experience so far has been that they are in  any case extremely useful in practice. And interestingly, all the  "classical" functional languages (Haskell, Caml, OCaml, Standard ML)  have purely static type systems.
ref: http://blogs.msdn.com/b/andrewkenned...nversions.aspx




،/

----------

