PDA

View Full Version : F# در Reflector



r00tkit
چهارشنبه 03 شهریور 1389, 22:49 عصر
سلام

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

http://barnamenevis.org/forum/attachment.php?attachmentid=54780&stc=1&d=1282758384

Mehdi Asgari
پنج شنبه 04 شهریور 1389, 20:25 عصر
این کار تقریبا ناممکنه (و هیچ نیازی هم بهش احساس نمیشه.)
add-in ی که گفتی پر از اشکاله (یه پروژۀ سی خطی با اف شارپ بنویس ، با این decompile اش کن و نتیجه رو با نتیجه ای که برای سی شارپ بر می گردونه مقایسه کن)

r00tkit
پنج شنبه 04 شهریور 1389, 20:50 عصر
راست می گی همون جوری که دیدی نتونست Console.WriteLine("geek"); v رو بفهمه

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

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

Salar Ashgi
جمعه 12 شهریور 1389, 01:11 صبح
خوب #F هم یه زبان دات نتی است ، حال چه فرقی با #C داره که دیکامپایل کردن پروژه هاش امکان پذیر
نیست ؟!

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

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

Mehdi Asgari
یک شنبه 14 شهریور 1389, 13:11 عصر
اینو باید از خودشون پرسید. حتی در Release notesشون هم اسمی از اف شارپ برده نشده
http://www.red-gate.com/supportcenter/Content.aspx?p=.NET%20Reflector&c=.NET_Reflector/articles/version_6xx_Reflector.htm

علیرضا مداح
یک شنبه 14 شهریور 1389, 22:29 عصر
سلام،
در تصریح گفته ی آقای عسگری مثالی می زنم؛ یک 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 (http://blogs.msdn.com/b/andrewkennedy) در این رابطه توضیح دهند:

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/andrewkennedy/archive/2008/09/02/units-of-measure-in-f-part-two-unit-conversions.aspx




،/