«این راهنمای کاربری به شما می‌آموزد که نرم‌افزار ما واقعا چه کارهایی می‌تواند بکند، صرف نظر از این که مسئول فروش‌مان به شما چه گفته باشد!»  -  بخشی از راهنمای یک کارت گرافیک - سال 1985
یونیکس کاملا کاربرپسند است. البته، کاربرانی که می‌پسندد خودش انتخاب می‌کند!  -  آندریاس بوک (Andreas Bogk)
یکی از محسنات داشتن کامپیوتر این است که اگر کار را خراب کند، هیچ قانونی نیست که شما را از ضرب و شتم آن منع کند.  -   اریک پورترفیلد (Eric Porterfield)
کامپیوترم مرا در شطرنج شکست داد، ولی در مشت و لگد حریفم نشد!  -  اوم فیلیپس
کامپیوترهای آینده بیش از یک و نیم تن وزن نخواهند داشت.   -   مجله ماشین‌های محبوب 1949 (Popular Machines)
یک ماشین می‌تواند کار پنجاه مرد عادی را انجام دهد، اما هیچ ماشینی نمی‌توانند کار یک مرد فوق‌العاده را انجام دهد.  -  البرت هوبارد (Elbert Hubbard)
در دنیا سه چیز قطعی است: مرگ، مالیات و گم شدن اطلاعات در کامپیوترها!   -   دیوید دیکسون (David Dixon)
ارتباط دایم با کامپیوتر، ریاضی‌دان‌ها را به یک تایپیست ساده تبدیل می‌کند و برعکس!  -  آلن پرلیس (Alan Perlis)
«به نظرم یکی با لگد زده به سطل آشغال ویندوزم. همه آیکون‌ها پاشیده روی روی دسک‌تاپ!   -   بیلیام (Billiam)
صنعت کامپیوتر پس از سال‌ها رشد تند و بی‌وقفه به نظر می‌رسد که بالاخره به طفولیت خود رسیده است!  -  جان پیرس (John Pierce)
جف کاگزول (Jeff Cogswell)
مترجم: سینا قنبری

ویژوال استودیو 2010، محصول پیش‌تاز مایکروسافت برای طراحان نرم‌افزار، پیش‌رفت‌های قابل توجهی نسبت به نسخه پیشین خود داشته و به بهبودهایی در نحوه کارکرد هسته و نحوه مدیریت ASP.NET++ ، C#، C و VB دست یافته است. علاوه بر آن مایکروسافت با انتشار نسخه 2010 ویژوال استودیو، دات‌نت را هم به نسخه 4 ارتقا داده است.

LB_-_Visual_Studio_2010-1اکثر کارشناسان از نسخه 2010 اعلام رضایت کرده و به برنامه‌نویسان توصیه کرده‌اند که بلافاصله نسبت به ارتقا کد نرم‌افزار خود از نسخه‌های 2005 و 2008 به نسخه 2010 اقدام کنند. با این حال، به نظر می‌رسد عناصر ASP.NET محیط طراحی نرم‌افزار (IDE) کاستی‌هایی دارند. مثلا جای آژاکس هنوز در بخش عظیمی از محصول خالی است و افزونه‌های آژاکس موجود نیز ناقص به نظر می‌آیند. این روزها بخش عظیمی از طراحی وب در سمت کاربر صورت می‌گیرد و اگر چه ویژوال استودیو پشتیبانی خوبی از جاوااسکریپت دارد، اما در واقعیت بسیاری از برنامه‌نویسان وب از ابزارهای دیگری استفاده می‌کنند.
در زمان نگارش این مقاله (ماه گذشته) نسخه حرفه‌ای ویژوال استودیو مورد آزمایش قرار گرفت که قیمت آن 799 دلار برای بسته کامل و 549 دلار برای بسته به‌روزرسانی از نسخه‌های پیشین بود.

کارکرد هسته
یکی از اولین بهبودهای محیط برنامه‌نویسی که خیلی به چشم می‌آید، قابلیت جستجو کردن بین سلسله‌مراتب فراخوان‌ها (Call Hierarchy) است. بسیاری از ما طی سالها اهمیت گزینه‌های Go to Definition و Find All References را که به ما اجازه جستجوی سریع در کد میدهند فهمیده‌ایم. ولی با این حال بعضی اوقات باید برای ردیابی کدمان در حین برنامه‌نویسی، جستجوی زیادی انجام دهیم. پنجره سلسله‌مراتب فراخوان‌ها در این مواقع به ما امکان می‌دهد که به صورت بصری بین فراخوان‌ها حرکت کنیم و همه فراخوان‌ها به یک تابع یا از آن را ببینیم.
ویرایشگر کد پیش‌رفت‌های زیادی داشته است که بخشی از آن به دلیل استفاده از «زیرساخت ارایه ویندوز» (WPF) است. به طور مثال ویژگی بزرگ‌نمایی، یکی از پیش‌رفت‌های مفید آن است. با کمک این ویژگی می‌توانید مثل یک محیط پردازش کلمه همچون Word، به‌راحتی بزرگ‌نمایی و کوچک‌نمایی کنید. همچنین با کلیک بر روی یک متغیر یا شناسه، تمام تکرارهای آن در طول کد برجستگی خفیفی پیدا خواهند کرد.
از دیگر ویژگی‌های قابل توجه این نسخه Generate from Usage است. نسخه‌های قبلی ویژوال استودیو امکانی با نام Generate Method Stub داشتند. وقتی شما تابعی را فراخوانی می‌کردید که وجود نداشت، این ویژگی از طریق منوی باز شده در زیر حرف اول این تابع قابل فعال‌سازی بود. مثلا اگر Myfunc(2) را تایپ می‌کردید، حرف اول فرمان تایپ شده خطی زیرش داشت که منوی این ویژگی از طریق کلیک کردن روی آن قابل دست‌رس می‌شد. کلیک کردن روی گزینه‌های منو، متدی خالی بر اساس مدل‌های استفاده شده در تابع را در اختیار کاربر قرار می‌داد. مثلا در مورد Myfunc(2) تابع تولید شده یک ورودی صحیح می‌گرفت.
این ویژگی در نسخه 2010 علاوه بر متد برای شناسه‌های دیگر هم در دست‌رس است. برای مثال اگر بنویسید Anothervar = 10 زیر حرف A خطی خواهد بود که منویی با دو گزینه دارد: Generate Property Stub و Generate Field Stub. اولین گزینه ویژگی‌ای با عنصر Set و Get می‌سازد و دومی متغیری خصوصی خواهد ساخت که کد شما را به شکل زیر تغییر می‌دهد:

Public int anothervar { get; set;} and private int anothervar

در دیدی کلی به عنوان پیش‌رفت‌های قابل توجه دیگر هسته می توان به بهبود در تکمیل خودکار کد و خطایابی سمانتیک (زیرخط‌هایی که ویژوال استودیو برای نمایش خطا در کد شما نشان می‌دهد) اشاره کرد.

دات‌نت و سی‌شارپ 4

نسخه 4 سی‌شارپ هم‌ارزی مدل‌ها، دیربندی (Late Binding)، تبدیل کوواریانت و تبدیل کانتراواریانت را پشتیبانی می‌کند. پشتیبانی هم‌ارزی مدل‌ها اهمیت زیادی دارد چون به شما اجازه می‌دهد یک نوع داده اسمبلی دیگر را در مدل اسمبلی خود قرار دهید. بدین ترتیب می‌توانید در حین کدنویسی به جای ارجاع به خود اسمبلی به صورت مستقیم به مدل ارجاع کنید و در حقیقت اسمبلی و پیچیدگی‌های مربوط به آن را دور بزنید. یکی از دشوارترین قسمت‌های کدزدن با زبان‌های تحت دات‌نت همین مساله نوع داده اسمبلی بود که در 2010 به‌خوبی رفع و رجوع شده است.
نسخه چهارم دات‌نت هم پیش‌رفت‌های زیادی داشته است. مثلا یک کلاس جدید به نام تاپل (Tuple) اضافه شده که اگر با زبان‌های برنامه‌نویسی مثل پایتون سر و کار داشته باشید کار شما را خیلی راحت می‌کند. برای مثال به کد سی‌شارپ زیر توجه کنید:

.(Var primes = Tuple.Create (2, 3, 5, 7, 11, 13, 17, 19

البته توجه کنید که این کد کماکان به ظرافت تاپل در زبان‌هایی مثل پایتون نیست. برای مقایسه بهتر آن را با کد پایتون زیر قیاس کنید:

(This: primes = (2, 3, 5, 7, 11, 13, 17, 19

تفاوت در این است که در پایتون دسته‌ها و گونه‌های اطلاعات داخل ساختار زبان برنامه‌نویسی وجود دارند. در صورتی که در سی‌شارپ شما از یک کلاس دات‌نت با نام تاپل استفاده می‌کنید که تنها تا هشت مقدار را پشتیبانی می‌کند، چون این نهایت توانایی است که در سازنده کلاس پیش‌بینی شده است! البته بعد از ساختن تاپل می‌توانید مقادیر بیش‌تری نیز به آن اضافه کنید که به نوعی مفهوم ذاتی تاپل در زبان‌های برنامه‌نویسی مانند پایتون که تاپل در آن‌ها غیرقابل تغییر است را زیر سوال می‌برد! در هر حال زبان‌های برنامه‌نویسی مختلف قوانین مختلفی را هم طلب می‌کند.
از دیگر ویژگی‌های ذکر شده توسط مایکروسافت در نسخه جدید ویژوال استودیو، امکان نمایش فایل‌های نگاشت شده در حافظه است که در واقعیت به هیچ‌ عنوان جدید نیست. فایل‌های نگاشت شده در حافظه از قدیم توسط برنامه‌نویسان Win32 برای مدیریت مقادیر بزرگ حافظه مجازی یا ساختن قالب فایل‌های جدید استفاده می‌شد. تا قبل از 2010 روش کار برنامه‌نویسان در دات‌نت به این صورت بود که از طریق فراخوانی مستقیم Win32 API به فایل‌های نگاشت شده در حافظه دست‌رسی پیدا می‌کردند ولی حالا در نسخه جدید برای این کار کلاسی اختصاصی به نام MemoryMappedFile وجود دارد. استفاده از کلاس اختصاصی برای مدیریت فایل‌های مقیم حافظه در عمل هیچ‌ برتری‌ای به فراخوانی Win32 API ندارد و حتی بسیاری برنامه‌نویسان از امکان کندتر بودن آن نسبت به کتابخانه‌های محلی ویندوز ابراز نگرانی کرده‌اند. به نظر می‌رسد ساخت این کلاس جدید تنها برای هم‌راستا شدن ویژوال استودیو با سیاست‌های جدید این شرکت در استفاده از دات‌نت است. مایکروسافت به تازگی و با عرضه دات‌نت 4 اعلام کرده است که قصد دارد بستره دات‌نت را به عنوان راه‌کار اصلی (و احتمالا در آینده‌ای نزدیک تنها راه‌کار) برنامه‌نویسی برای زیرساخت کلیه محصولات خود (ویندوز ویندوز فون، زون و..) در نظر بگیرد و سایر روش‌های برنامه‌نویسی مثل Win32 API به زودی از گردونه حمایت مایکروسافت خارج خواهند شد.
اگر شما تجربه‌ای در زبان‌های قدیمی‌تر مثل C/++C داشته باشید، می‌دانید که کلاس‌های ورودی و خروجی دات‌نت، خصوصا کلاس‌های File، Directory و Path چه آسایشی را برای برنامه‌نویس در هنگام کدنویسی در این زبان‌ها ایجاد می‌کنند. در عوض فایل‌های گردشی (Traversing Files) و زیرپرونده‌ها (Subdirectories) همیشه در دات‌نت دردسرساز بوده‌اند. احتمالا اکثر برنامه‌نویسان سروکله زدن‌های بی‌پایان خود با روتین‌های جستجوی فایل در C و معادل‌های بزرگ Win32 API آن‌ها را به خاطر دارند. مایکروسافت این بار هم با الگوبرداری از دیگر زبان‌های برنامه‌نویسی مانند پایتون با افزودن کلاس‌های جدید به دات‌نت کار را آسان‌تر کرده است. جدیدترین نسخه کلاس Directory شامل متدهایی برای بازگردانی شماره‌گذاری‌ها است. به عبارت بهتر در 2010 شما می‌توانید بر روی کلاس Directory از پرس‌وجوهای داخل زبان‌برنامه‌نویسی (LINQ) استفاده کنید.
از نظر ساختاری بهبودهای بسیاری در دات‌نت ایجاد شده است. مثلا کلاس‌های بسیاری برای برنامه‌نویسی موازی به دات‌نت افزوده شده است. این کلاس‌ها حتی LINQ را هم پوشش می‌دهند و به کمک آن‌ها برنامه‌نویسان سرانجام خواهند توانست قدرت واقعی پردازنده‌های چندهسته‌ای را استخراج کرده و مورد استفاده قرار دهند.
در آزمایشی که روی این کلاس‌ها انجام شد، راحتی کار و عملیاتی بودن آن‌ها به‌خوبی مشخص گردید. برای مثال کلاسی با نام Parallel.For وجود دارد که مانند حلقه معمولی For کار می‌کند با این تفاوت که کد داخل حلقه برای هر تکرار به صورت موازی و نه به صورت متوالی اجرا می‌شود. برای سنجش این ویژگی یک حلقه موازی For با تکرارهای بسیار ایجاد شد و مشاهده گردید که کار آن بین دو هسته پردازنده تقسیم گردید.

ASP.NET

مایکروسافت این بار و بر خلاف نسخه 2008، زبان‌برنامه‌نویسی ASP.NET را در درجه بالایی از اولویت‌های به‌روزرسانی خود قرار داده است. برای شروع، مکانیزم کش (Cache) کردن ارتقا پیدا کرده و شامل افزونه‌های ارایه‌دهنده کش است که به شما (یا دیگر کاربران) اجازه می‌دهد که به قول مایکروسافت «با راهبرد کش‌ کردن خروجی هوش‌مندیتری برای وب‌سایت خود داشته باشید».
LB_-_Visual_Studio_2010-5_copyپیش‌رفت دیگر ASP.NET اصلاح ایرادی است که چند وقتی بود کاربرانش را آزار می‌داد. در گذشته اگر یک سرور ASP.NET برای مدتی درخواستی دریافت نمی‌کرد، بعد از اولین درخواست جدید وقفه‌ای نسبتا قابل توجه تا پاسخ‌گویی داشت. برای حل این مشکل، نسخه جدید ASP.NET پیش‌بارگذاری برنامه‌های وب را پشتیبانی می‌کند، البته برای استفاده از این ویژگی به نسخه 5/7 یا بالاتر IIS روی یک ویندوز سرور نسخه 2008 R2 یا جدیدتر نیاز خواهید داشت. از دیگر بهبود‌ها می‌توان به هدایت‌های دایمی یک صفحه، فشردگی وضعیت نشست‌ها (Session State) و نحوه مدیریت CSS اشاره کرد. علاوه بر این‌ها، کلاس HttpBrowserCapabilities برای شناسایی جدیدترین مرورگرها، شامل مرورگر آیفون، به‌روزرسانی شده تا شما بتوانید کد خود را با توجه به این که روی چه مرورگری نمایش داده می‌شود، به صورت متمایز بنویسید.
برای برنامه‌نویسان LINQ که از ASP.NET استفاده می‌کنند، کنترل جدید QueryExtender برای کمک در زمینه فیلترها و شروط WHERE اضافه شده است. به علاوه ویژگی «نمایش مدل کنترلگر» (MVC درون‌سازی شده و دیگر نیازی به دانلود جداگانه برای استفاده از آن نیست.)
پیشرفت شایان توجه دیگر ASP.NET تمرکز بیش‌تر بر روی اطلاعات و ساختاربندی پویا است. این ویژگی برای اولین بار دو سال پیش در نسخه 5/3 زبان برنامه ASP به صورت افزونه قابل دانلود ارایه شد ولی حالا در خود Visual Studio 2010 است و به شما امکان ساخت سریع یک برنامه ASP.NET را می‌دهد به‌ طوری که بتوانید کنترل شبکه‌ای داشته و به اطلاعات دست‌رسی مستقیم داشته باشد.
مایکروسافت امیدوار است که برنامه‌نویسان ASP.NET ساده از کنار این ویژگی نگذرند. به گفته مایکروسافت برنامه‌نویسان ASP.NET می‌توانند با دقیق شدن روی قالب آن را ویرایش کرده و کدش را به سلیقه خود دستکاری کنند تا ساختار مورد نظر خود را از دل آن بیرون بیاورند. متاسفانه با وجود این که این ویژگی مفید و به‌دردبخور است ولی هنوز هم جای خالی آژاکس در آن به‌شدت حس می‌شود.

زبان ++C
دو جنبه ++C در ویژوال استودیو وجود دارد. یکی ++C محلی است که به سبک کد اسمبلی محلی استاندارد اینتل (Intel) و برای توسعه برنامه‌های Win32 کامپایل می‌شود و دیگری ++C مدیریت شده است که توسط کد میانی ‌دات‌نت، ابتدا تبدیل و سپس کامپایل می‌شود.
کامپایلر ++C ویژگی‌های بسیاری از زبان جدید ++C0x، که به زودی استاندارد خواهد شد را پشتیبانی می‌کند. به طور مثال شما می‌توانید توابع Lambda را در کد ++C خود استفاده کنید.
علاوه بر آن،(MFC (Microsoft Foundation Class شامل توابع و ابزارهایی برای پشتیبانی کامل از ویژگی‌های اختصاصی ویندوز 7 و آفیس 2010 نظیر منوهای Ribbon است.
کتابخانه استاندارد ++C در حال حاضر شامل بسیاری از ویژگی‌های ++C0x است که البته به دلیل استاندارد نشدن ++C0x هنوز شامل تمامی ویژگی‌های این زبان برنامه‌نویسی نوظهور نیست.

WPF
پرواضح است که بسیاری از برنامه‌نویسان ویژوال استودیو تا به حال به WPF توجهی خاص نداشته‌اند. این روند ممکن است در ویژوال استودیو 2010 دچار تغییر شود چرا که مایکروسافت بخش اعظم محیط برنامه‌نویسی WPF ویژوال استودیو را بازطراحی کرده است.
WPF فعلی چهارمین نسخه خود را پشت سر می‌گذارد و شامل کنترل‌های جدیدی مانند تقویم، DataGrid، DataPicker و مرورگر وب است. بهبودهایی برای حفظ حالت دیداری به همراه پشتیبانی ورودی لمسی اعمال شده است. هم‌چنین ارایه متن آن پیش‌رفت خوبی کرده است. در محیط برنامه‌نویسی هم، بخش طراحی در پشتیبانی XAML برای WPF و Silverlight بهبود یافته است.

Debugger
عیب‌یابی ویژوال استودیو هم بسیار پیش‌رفت کرده است. حالا می‌توانید با قابلیت‌های افزوده شده به عیب‌یاب‌های نرم‌افزار، کنترل بیش‌تری روی نقاط شکست برنامه داشته باشید؛ قابلیت‌هایی نظیر برچسب‌گذاری روی آن‌ها یا Import و Export‌ کردن‌شان.
به علاوه، پنجره Watch تغییرات قابل توجهی داشته است. در گذشته شما می‌توانستید توابع را در پنجره Watch فراخوانی کنید؛ ولی اگر این توابع حالت برنامه را تغییر می‌داد (تغییر متغیرها و غیره) می‌توانست در اجرای نرم‌افزار شما مشکل‌ساز شود. در نسخه جدید، پنجره Watch به شما می‌گوید که تغییر مقدار متغیر نیاز به اجرای چه زنجیره‌های دیگری دارد و به کمک آن می‌توانید از تغییرات مشکل‌ساز پیش‌گیری کنید.
عیب‌یابی برنامه‌های موازی هم بهبود یافته‌اند. پردازنده‌های امروزی چندهسته‌ای هستند و به شما اجازه می‌دهند برنامه‌های موازی بنویسید. ویژوال استودیو جدید امکان عیب‌یابی دقیق‌تری بر روی رشته کدها به شما می‌دهد و می‌توانید تکه‌های مختلف برنامه خود که بر روی هسته‌های مختلف پردازنده اجرا خواهند شد را نیز عیب‌یابی کنید.

شماره 07