تبلیغات
شمع آنلاین=منبع دانلود - C# 5.0، تصویری از آینده!

C# 5.0، تصویری از آینده!

نویسنده : Admin جمعه 22 مهر 1390 04:46 ب.ظ  •    ارسال شده در: آموزش c#

#C

پس از گذشت حدود دو سال از ارائه سری مقالات C# 4.0 نگاهی به آینده، كه در آنها به تفسیر و تحلیل ویژگی های نسخه CTP سی شارپ 4.0 پرداخته شده بود، اینك ویژگی های احتمالی نسخه C# 5.0 را از نگاه برنامه نویسان و توسعه دهندگان سراسر جهان، بیان خواهیم كرد. شاید روزی مقایسه نسخه واقعی با این ویژگی ها جذاب تر و خواندنی تر از حال باشد.
مقدمه

  نسخه اولیه یعنی CTP سی شارپ 4.0 توسط مایكروسافت در اختیار توسعه دهندگان و برنامه نویسان سراسر جهان قرار گرفت. با انتشار نهایی ویژوال استودیو 2010 و دات نت فریم ورك 4.0، می توان گفت كه تغییرات اندكی در نسخه نهایی ایجاد شده است و 90% محتوای مقالات سه گانه، مرجعی جامع برای نسخه سی شارپ 4.0 محسوب می شود.



آندرس هلسبرگ در مصاحبه ای اعلام كرد كه بیش از ده هزار درخواست برای نسخه سی شارپ 4.0 از برنامه نویسان سراسر جهان توسط تیم توسعه دریافت شد. یكی از وظایف تیم توسعه سی شارپ این است كه ویژگی های درخواستی را بررسی كرده و مهم ترین و پركاربردترین آن ها را پیاده سازی كند.

اگر گشتی در وب بزنید و عنوان سی شارپ 5.0 را جستجو كنید، هیچ منبع رسمی از مایكروسافت و یا اعضای رسمی تیم توسعه سی شارپ نخواهید یافت. شاید یكی از دلایل این باشد كه مدت زمان زیادی از انتشار سی شارپ 4.0 نمی گذرد و مدتی برای جا افتادن نسخه جدید و تسلط كامل برنامه نویسان به ویژگی های آن لازم باشد. در عوض مطالب بسیار جالب و خواندنی در وبلاگ های شخصی برنامه نویسان و فروم ها خواهید یافت كه مملو از ایده و درخواست برای نسخه بعدی سی شارپ می باشند. آنچه كه در ادامه این مقاله ارائه خواهد شد، جمع بندی كوتاه از درخواست ها و ایده های فعلی موجود در عرصه وب برای نسخه سی شارپ 5.0 می باشد.

سی شارپ به كجا رسیده است؟

تاكنون چهار نسخه ی زبان سی شارپ از زمان عرضه آن به جهان برنامه نویسی، منتشر شده است. در نمودار تكاملی سی شارپ ویژگی های اصلی هر نسخه نمایش داده شده اند.

ویژگی های نسخه های سی شارپ
  • C# 1.0 Managed code
  • C# 2.0 Generics
  • C# 3.0 Language integrated query
  • C# 4.0 Dynamic programming
  • C# vNext Compiler as a service
همانطور كه در نمودار دیده می شود، تنها یك ویژگی از سی شارپ 5.0 قطعی است. این ویژگی تحت عنوان Compiler as Service، در كنفرانس PDC 2008 توسط آندرس هلسبرگ در یك دموی بسیار جالب معرفی شده است.

سرویس كامپایلر سی شارپ!

این ویژگی را می توان به عنوان مهم ترین دست آورد تیم توسعه سی شارپ تاكنون دانست. برای خوانندگانی كه اولین بار با این عنوان برخورد می كنند، ممكن است این سوال مطرح شود كه سرویس كامپایلر سی شارپ چیست؟
حتما حكایت معروف مرغ و تخم مرغ را شنیده اید! یك سوال فلسفی در این حوزه مطرح است : مرغ اول به وجود آمد یا تخم مرغ؟! این سوال در حوزه زبان های برنامه نویسی تغییر شكل یافته است : كامپایلر یك زبان برنامه نویسی با چه زبانی نوشته می شود؟! سوال جالبی ست و در پاسخ باید گفت كه ممكن است از زبان های موجود در طراحی كامپایلر یك زبان جدید استفاده شود. كامپایلرهای اولیه نیز با تبدیل مستقیم دستورات آنها به زبان سطح ماشین به وجود آمده اند.

كامپایلر موظف است سورس كدهای نوشته شده را پس از تحلیل لغوی و معنایی، به زبان ماشین مشخصی تبدیل كرده و  یك پیمانه اجرایی تولید كند. در این فرآیند ممكن است مراحل تكمیلی مانند لینك كردن و افزودن منابع به پیمانه اجرایی نیز انجام شود.

دیاگرام كاركرد كامپایلر

حال متصور شوید كه تمامی این مراحل در زمان اجرا در اختیار شما باشند! یعنی API كامپایلر در اختیار شما باشد و شما در زمان اجرا بتوانید رشته های حاوی كد را كامپایل كرده و نمود اجرایی به آنها ببخشید.
برای كسانی كه نمی خواهند درگیری آكادمیك! با این ویژگی داشته باشند یك مثال عملی ارائه می دهم :

CSharpEvaluator ev = new CSharpEvaluator ();
ev.Add("System");
Action<int> PdSqrFunc = ev.Eval("int Sqr(int x) { return x * x; }");
int result = PdSqrFunc(5);

 بله، به همین راحتی به همین سادگی! خط سوم مثال ارائه شده یك انقلاب محسوب می شود. جایی كه از یك رشته (String) به كد IL می رسیم.

انقلاب #C نزدیك است!

اگر سرویس كامپایلر سی شارپ در اختیار شما باشد، چه استفاده ای از آن خواهید برد؟ یكی از كاربران وب سایت در فروم سوالی مطرح كرد تحت این عنوان كه "می خواهم در گره های (Node) كنترل درخت (TreeView) نام تابع خاصی را نگهداری كنم و پس از كلیك كاربر، آن تابع را فراخوانی كنم." چگونه؟ شاید در مقطع فعلی بتوان با Reflection به مقصود مورد نظر رسید به این صورت كه از طریق نوع (Type) مورد نظر و Reflection اطلاعات تابع را استخراج كرده و فراخوانی غیرمستقیم آنرا انجام داد. اما سرویس كامپایلر این عملیات را با چند خط كد میسر خواهد كرد!

اما هدف از ارائه كامپایلر سی شارپ به عنوان سرویس فراتر از این صحبت هاست. روند برنامه نویسی دنیا به سمت برنامه های مقیم در حافظه است. برنامه های نسل آینده، این امكان را خواهند داشت كه بدون بسته شدن برنامه، امكانات جدیدی به آنها افزوده شود. و این در مقطع فعلی یك انقلاب محسوب می شود.

چه ویژگی های دیگری را می توان برای #C نسخه 5.0 متصور شد؟

در ادامه برخی از ویژگی های پیشنهادی و درخواستی برنامه نویسان و توسعه دهندگان سراسر دنیا را بررسی خواهیم كرد.

Non-Nullability: به كمك این ویژگی می توان انواعی را تعریف كرد كه هرگز نتوانند مقدار null اختیار كنند. در حال حاضر Null Reference یكی از خطاهای متداول و پردردسر برای همه برنامه نویسان محسوب می شود. انتظاری كه ازین ویژگی می رود این است كه در زمان اجرا در صورت اختیار كردن مقدار null توسط نوعی كه نباید هرگز این مقدار را اختیار كند، Exception صادر شود.

Safe Navigation Operator (?.): این اپراتور می تواند بسیار مفید باشد. در ویژگی قبلی به مشكل Null Reference اشاره شد. فرض كنید نوعی مانند Person تعریف كرده اید و می خواهید به یكی از مشخصه های آن مثل Name دسترسی داشته باشید. چنانچه نمونه (Instance) شما در زمان اجرا مقدار تهی داشته باشد حتما با خطای Null Reference برخورد خواهید كرد : person.Name اما اگر عملگری مانند person.?Name داشته باشید كه چك كند person مقدار دارد و بعد دسترسی به Name را فراهم كند، دیگر با خطا مواجه نمی شوید.

Binding Operators: عملگرد انقیاد واسط كاربری می تواند بسیار مفید باشد و حجم كدهای این حوزه را به مقدار زیادی تقلیل دهد. برای این مورد عملگر :=: پیشنهاد می شود كه یك عملگرد دو طرفه است. فرض كنید شما دو كنترل متفاوت دارید و می خواهید كه وارد شدن مقدار در یكی از كنترل ها، كنترل دوم را تحت تاثیر قرار دهد:

textbox.Text :=: slider.Value;

با خط كد بالا شما این امكان را در برنامه فراهم می كنید كه تغییر مقدار slider، مقدار متن textbox را تغییر دهد. عكس این مورد نیز صادق می باشد. در صورت لزوم نیز می توان انقیادهای یك طرفه به وجود آورد. مثلا:

textbox.Text := slider.Value;

به این ترتیب تنها مقدار متن textbox با تغییر slider تغییر خواهد كرد.

Smart Case Support: آیا تاكنون در كار با switch - case احساس محدودیت كرده اید؟ "ای كاش می شد جای مقدیر ثابت رشته ای از كدهای واقعی استفاده كرد" مثلا:

switch(pdObj)
{
   case string.IsNullorEmpty(otherPdObj):
         ...
   case otherPdObj.Trim().Lower:
         ...
}

Inline Assembly: زبان های C و ++C به برنامه نویسان اجازه می دهند كه بتوانند بلوك های كد اسمبلی را مستقیما (Inline) در كدهای خود تعریف كنند. اضافه شدن این ویژگی به سی شارپ نیز می تواند مفید باشد. اما مفیدتر از آن اضافه شدن Inline IL خواهد بود مانند:

public static unsafe int Multiply(int i, int j)
{
    cil
    {
        ldarg.0
        ldarg.1
        mul.ovf
        ret
    }
}

حوزه این تعاریف به صورت unsafe گویای عدم اطمینان می باشد. ولی وجود این امكان و نیز تسلط به IL، در تولید برنامه های پویا فوق العاده موثر خواهد بود.

Dependency Properties:
یكی از ویژگی ارائه شده در WPF بحث Dependency Property می باشد. در حال حاضر نحو (Syntax) نسبتا پیچیده ای در این حوزه استفاده می شود كه نحو ساده تر به صورت زیر پیشنهاد می شود:

public dependency class PdPerson
{
    public dependency string Name
    {
        get;
        set;
        default { return "Abolfazl Hosnoddinov"; }
        change { Console.WriteLine("Old: {0}, New: {1}", oldvalue, newvalue); }
    }
}

همه چیز واضح و گویاست و به نظرم كارایی فوق العاده بالایی می تواند داشته باشد.

منابع برای مطالعه بیشتر

چنانچه به این مباحث علاقمند شده اید و یا دوست دارید خود در این حوزه صاحب نظر باشید و شاید روزی به ویژگی های سی شارپ بیافزایید، منابع زیر برای مطالعه و ثبت نظر پیشنهاد می شوند:

ویدئو دیدنی ارائه ویژگی های سی شارپ 4.0 توسط آندرس هلسبرگ در PDC 2008 : در انتهای این ویدئو دمویی از هلسبرگ در خصوص كامپایلر سی شارپ به صورت عینی ارائه شده است كه بهت و تحسین همگان را برانگیخت.

TechOff : Ideas for C# 5.0

StackOverflow: C# Language Speculation (4.5/5.0)

5 nice things to have in C# 5.0

  Binding Operators for C# 5

كلام آخر

این مقاله، اولین مقاله ای است كه توسط آپلود آنلاین وب سایت ارائه می شود و به زودی پس از تست نهایی در اختیار عموم علاقمندان و همراهان سایت قرار خواهد گرفت. امیدوارم كه شاهد حضور پر رنگ تر شما عزیزان باشیم. مثل همیشه از همراهان گرامی، همكاران عزیز و خوانندگان ارجمند وب سایت، خواهشمندم ما را از نكته نظرات و پیشنهادات خود بهره مند سازند. با بحث و گفتگو می توانیم بر پرباتر شدن مطالب سایت بیافزاییم.
  نویسنده:الدینف

منیع:persiadevelopers


برچسب ها: آموزش ، آموزش برنامه نویسی ، c# ، آموزش c# ، C# 5.0 ،
آخرین ویرایش: - -

 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر