دات نت

Thread-Safe نبودن عملگر ++ در دات نت

من نمی‏دانستم که عمگر ++ در دات نت Thread-Safe نیست. اینجا توضیحات کاملی آمده است.

آموزش سی شارپ برای بچه‏های تیز و آموزشی وی بی برای بچه‏های تمیز

بیل گیتز، که خودش خیلی خوره کامپیوتر بود، کامپیوتر را از دوران دبیرستان آغاز کرد. توی آن زمان، این بیلی ما یک برنامه کوچولو برای چاپ کارنامه‏ها نوشته بود و خلاصه با پل آلن، از این خفن‏بازی‏ها زیاد انجام می‏دادند (: فکر می‏کنم به همین خاطر است که بیل گیتز به بچه‏های دبیرستانی توجه زیادی نشان می‏دهد و حتی برخی از خدمات و برنامه‏های مایکروسافت برای دبیرستانهای آمریکا رایگان ارائه می‏شود. یکی از کارهای مایکروسافت راه‏اندازی بخشی به نام Kid's Corner یا بخش بچه‏ها است.

در این بخش، نوشته‏های خوبی برای بچه‏ها قرار داده شده که می‏خواهند توانایی خودشان را در کاربری عمومی با کامپیوتر افزایش بدهند یا در سطوح بالاتر، دانش خودشان را در زمینه برنامه‏نویسی بیشتر بکنند. دو تا E-book هم در این بخش هست که مایکروسافت برای آموزش برنامه‏نویسی به بچه‏ها نوشته است. نخست کتابی به نام «سی شارپ برای بچه‏های تیز» است و دیگری کتاب «VB برای بچه‏های خیلی زرنگ» است که من به خاطر ضرورتهای شعری(!) اسمش را کمی در عنوان این نوشته تغییر دادم.

من هر دو کتاب را سرسری و کلی خواندم. هر دو کتاب با انگلیسی خیلی ساده و روشن نوشته شده است. در کتاب، کارتون و کاریکاتورهای زیادی برای جذابیت بخشیدن به نوشته به کار رفته است؛ برای نمونه کارتونی که برای درک مفهوم Private، Protected و Public کشیده شده، به نظرم خیلی جالب آمد. اگر چه گاهی هم متن کتاب زیادی ساده‏لوحانه می‏شود و انگار که بچه‏ها دست کم گرفته شده‏اند. در هر صورت کتاب مفاهیم Object Oriented یا برنامه‏نویسی شی‏گرایی را خیلی خوب توضیح داده است و تلاش کرده تا بچه‏ها را با مفاهیم نسبتا پیچیده شی‏گرایی آشنا کند. کار جالبی که در این کتاب انجام شده، آشنایی بچه‏ها به طور کامل با مفاهیم شی‏گرایی در همان آغاز راه است؛ در حالی که ما در سیستم آموزشی خودمان گاهی اصلا شی‏گرایی را آموزش نمی‏دهیم و یا پس از یاد دادن Syntax خیلی خلاصه و کلی این مسائل آموزش داده می‏شود. این مساله اهمیت فراوان شی‏گرایی را در برنامه‏نویسی کنونی و همین طور کاربرد زیاد شی‏گرایی را در فریم‏ورک دات نت نشان می‏دهد.


هر دو کتاب فهرست و چارچوب یکسانی دارند. هر دو در فصل نخست به مقدمات اولیه پرداخته‏اند و سپس در فصل دوم، Objectها بررسی شده است. در فصل سوم کتاب ویژگی‏های زبانی (سی شارپ یا وی بی) یا Syntax زبان بررسی شده است. در فصل آخر هم به بررسی کلاسهای پایه‏ای دات نت Systen.Console، System.Windows.Forms، System.Drawing، System.Data، System.Xml پرداخته شده است.

خیلی دوست داشتم که فرصت بود و این کتابها را برای استفاده بچه‏ها ترجمه می‏کردم. امیدوارم یک روزی فرصتش فراهم بشود...

دانت نت فریم ورک چیست؟ (1)

یکی از پرسشهایی که خیلی از تازه واردان به دنیای برنامه‏نویسی دارند این است که dot NET Framework یا NET Framework. چی هست و چه کار می کند و به چه درد می خورد و اصلا برنامه‏نویسی با دات نت چه فرقی با برنامه‏نویسی در محیطهای غیر دات نت می‏کند؟ یا این که Visual Basic .NET چه فرقی با Visual Basic عادی می‏کند؟ یا این که #Visual C (سی شارپ) چی هست و چه تفاوتی با ++C می‏کند. خلاصه این که معمولا سردرگمی زیادی درباره NET. هست. من می‏خواهم توی چند تا نوشته به سادگی توضیح بدهم که NET. دقیقا چی هست و چه تکنولوژی‏هایی را شامل می‏شود. روش من در این مقالات، تا حد زیادی تحلیلی و با بیان تاریخ این تکنولوژی‏ها است. به باور من اگر نوآموزان با تاریخ این تکنولوژی‏ها آشنا بشوند، موضوع برایشان راحت‏تر جا می‏افتد و جالب‏تر هم خواهد بود.

برای این که بتوانید دات نت فریم ورک را خوب بشناسید، لازم است تا به سال 1995 برگردیم و به رخداد مهمی که در آن سال در دنیای کامپیوتر رخ داد، بپردازیم. این اتفاق ارتباط مستقیم با دانت نت فریم ورک ندارد ولی دانستن آن می‏تواند دید گسترده‏تری به شما بدهد.

پیدایش Java؛ بیایید قهوه بنوشیم

در سال 1991 رخداد مهمی در حال شکل‏گیری در دنیای رایانه بود. در این سال شرکت Sun Microsystems که در کار تولید بخشی از لوازم الکترونیکی مثل رسیور، تلویزیون، کنترل از راه دور و اجاقهای مایکروویو بود، به فکر ایجاد زبان جدیدی افتاد که بتواند در سیستم‏های عامل و سخت‏افزارهای متفاوت (بخوانید Platformهای گوناگون) بدون نیز به کامپایل مجدد، اجرا بشود.


مسئله خیلی ساده است: این روزها تمام کامپیوترها بر اساس معماری IBM طراحی می‏شوند و به همین خاطر به همه کامپیوترها ما IBM-Compatible یا هماهنگ با معماری IBM گفته می‏شود؛ ولی در آن دوره شرکتهای مختلف پردازنده‏های خاصی برای نیازهای خودشان طراحی می‏کردند و هنوز طراحی IBM استاندارد نشده بود. این پردازنده‏ها از لحاظ معماری داخلی و دستورالعمل‏هایی که پشتیبانی می‏کنند (مانند ADD، SUB، MOV، JMP، JE) و همچنین اندازه و تعداد ثبات‏ها یا Registerها با هم تفاوت می‏کنند. برای نمونه شرکت Apple برای خودش پردازنده‏های خاصی را با نام PowerPC طراحی کرده بود تا در کامپیوترهای خودش استفاده بشود. IBM برای کامپیوترهای شخصی پردازنده خاص خودش را طراحی کرده بود؛ یا شرکت دیگری به نام DEC که در کار طراحی کامیپوترهای صنعتی بود پردازندهی به نام VAX تولید کرده بود.
همین طور می‏شود به پردازنده‏های شرکت Arari و Commodore که پردازنده‏های خانگی بودند هم اشاره کرد. گستردگی این پردازنده‏ها و تنوع دستورات و اندازه ثبات‏ها و درگاههای آنها بسیار زیاد بود. دستورالعملی که در یک پردازنده وجود داشت در پردازنده دیگری ممکن بود به طور کامل وجود نداشته باشد یا به شکل دیگری کار کند. عملکرد این دستورالعمل‏ها و چگونگی رفتار آنها در شرایط خاص ممکن بود که تفاوت‏هایی داشته باشند. همین طور تفاوت در اندازه ثبات‏های این پردازندهها لازم بود تا درباره شیوه نوشتن اعداد بزرگتر از اندازه ثبات، راهکارهای متفاوتی پیش گرفته بشود. خلاصه این که همه این مسائل سبب می‏شد که برنامه‏ای که مثلا در پردازنده IBM نوشته شده، نتواند در پردازنده PowerPC اجرا بشود و اگر مشتری شما از پردازنده دیگری استفاده می‏کرد شما می‏بایست کل کدتان را به پردازنده جدید منتقل (=Port) کنید؛ کاری که بسیار دشوار و گاهی به علت حجم زیاد کدها ناممکن بود. جالب این جاست که این مسئله فقط هم از تفاوت پردازنده‏ها ناشی نمی‏شود. حتی اگر ما دو پردازنده یکسان داشتیم، باز ممکن بود در این دو پردازنده دو سیستم عامل متفاوت اجرا بشود و باز کد شما تنها بر روی سیستم عاملی اجرا می‏شد که شما آن را تولید کرده‏اید؛ چون که هر سیستم عاملی توابع داخلی و ساختار فایل اجرایی خاص خودش را دارد و توانایی پردازش فایلهای اجرایی سایر سیستم عامل‏ها را ندارد؛ برای نمونه سیستم عامل DOS و Unix هر دو بر روی پردازنده‏های IBM کار می‏کردند ولی برنامه نوشته شده در DOS در Unix کار نمی‏کند و همین طور برعکس.


در چنین شرایطی شرکت Sun به این فکر افتاد تا تکنولوژی را طراحی کند که بتوان با کمک آن کدی را نوشت که بدون نیاز به منتقل کردن کد به پردازنده جدید و دوباره Compile کردن کد در آن پردازنده، در همه جا اجرا بشود. این ایده بعدها به صورت Write once, Run anywhere (یک بار بنویسید، همه جا اجرا کنید) شعار شرکت Sun برای معرفی Java به عنوان یک تکنولوژی مستقل از Platform شد.

معجزه جاوا چیست؟

اما جاوا چه طور این مشکل پیچیده یعنی ناهماهنگی بین Platformهای مختلف (تفاوت در پردازنده‏ها و سیستم‏های عامل) را حل می‏کند؟ راه حل به کار رفته در جاوا برای حل این مساله به شدت ساده و در عین حال بسیار جذاب است.
فرض کنید شما در حال برنامه‏نویسی با جاوا در پردازنده IBM و در سیستم عامل ویندوز هستید. در صورتی که برنامه‏تان را با جاوا کامپایل کنید، جاوا آن را به زبان ماشین و فرمت اجرایی مناسب با سیستم عامل ویندوز تبدیل نمی‏کند؛ بلکه کد شما به چیزی که Bytecode جاوا نام دارد تبدیل می‏شود. Bytecode جاوا زبانی شبیه به زبان ماشین و در حقیقت زبانِ ماشینِ مشترکِ جاوا برای تمامی پردازنده‏ها است. طبیعتا این زبان توسط پردازنده IBM و سیستم عامل ویندوز یا توسط پردازنده IBM و سیستم عامل یونیکس تا توسط پردازنده PowerPC و سیستم عامل MAC OS اجرا نمی‏شود. برای اجرای این Bytecode بر روی پردازنده IBM و سیستم عامل ویندوز از برنامه‏ای کمک گرفته می‏شود که JVM یا Java Virtual Machine نام دارد. برای هر کدام از این محیط‏ها یک Java Virtual Machine انحصاری نوشته می‏شود که کارش اجرای


Syndicate content