سلام
من امروز reflector رو دانلود کردم دیدم به صورت default از F# هم پشتیبانی می شه !!!!
https://barnamenevis.org/attach...1&d=1282758384
Printable View
سلام
من امروز reflector رو دانلود کردم دیدم به صورت default از F# هم پشتیبانی می شه !!!!
https://barnamenevis.org/attach...1&d=1282758384
این کار تقریبا ناممکنه (و هیچ نیازی هم بهش احساس نمیشه.)
add-in ی که گفتی پر از اشکاله (یه پروژۀ سی خطی با اف شارپ بنویس ، با این decompile اش کن و نتیجه رو با نتیجه ای که برای سی شارپ بر می گردونه مقایسه کن)
راست می گی همون جوری که دیدی نتونست Console.WriteLine("geek"); v رو بفهمه
ولی سوال اینجاست : با این وضع چرا تو Reflector قرار دادنش ؟ یعنی نفهمیدن که این کار نمی شه ؟ یا یه تست نکردن ببینن نتیجهی این کار شون چی بود ( ر.ج WriteLine) ؟
Red-Gate هر از چندگاهی یه فرصت چند روزه به کارمنداش میده که روی یه ایده ای (به انتخاب خودشون) کار کنن. تنها شرط اینه که پس از اون چند روز یه محصول قابل لمس داشته باشن.(Red-Gate جزو "بهترین شرکت ها برای کار" در زمینۀ آی تی در انگلیسه و قبلا به خاطر این جایزه هم گرفته)
البته اگر محصول طوری باشه که بشه در محصولات Red-Gate ازش استفاده کرد (یا در راستای اون محصولات باشه) بیشتر بهش بها میدن. این add-in هم از دل همون روزهای مخوف بیرون اومد (ایدۀ جدیدی هم نبود ، قبلا تلاش هایی برای نوشتن همچین چیزی صورت گرفته بود که مشابهش رو می تونی با جستجو پیدا کنی)
خوب #F هم یه زبان دات نتی است ، حال چه فرقی با #C داره که دیکامپایل کردن پروژه هاش امکان پذیر
نیست ؟!
به خاطر این که هیچ رابطۀ یک به یکی بین ساختار های زبانی اف شارپ و MSIL وجود نداره. یعنی برای اکثر ساختار های سی شارپ، همتای متناظر در رانتایم و کتابخانۀ کلاس دات نت وجود داره، ولی در مورد اف شارپ اینطور نیست و بعضی از ساختار ها از توابع مختلف رانتایم اف شارپ استفاده می کنن (از توابع معمولی بگیر تا ساختار های پیشرفته ای مثل async و Quotations و ... )
یه کد ساده که از ساختار های معمول اف شارپ استفاده می کنه بنویس و نتیجه رو در ildasm یا Reflector مشاهده کن.
بازم من جواب نگرفتم سوال : مگه اینا نمی دونن که این کار نمی شه چرا بازم این add-in ناقص رو داخل reflector قرار دادن؟
اینو باید از خودشون پرسید. حتی در 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
،/