پروژه Mono چیست؟
#1
Note 
دات نت محدود به نوع خاصی از برنامه ها نیست، از این چارچوب می توان برای تولید برنامه های تحت ویندوز، تحت وب، سرویس های مبتنی بر وب و ... استفاده كرد. یكی دیگر از ویژگی های دات نت، دارار بودن كتابخانه ای بزرگ و جامع از كلاس ها و توابع است كه همان طور كه گفتیم، تمام زبان های تحت دات نت می توانند از توابع و كلاس های موجود در آن، استفاده كنند.

در این مقاله به بررسی پروزه مونو (Mono Project) می پردازیم که اخیرا به صورت رایگان در دسترس عموم قرار گرفته است.
[تصویر:  monologolpg.gif]

دات نت جیست؟

آنچه معمولا به دات نت اطلاق می شود، برنامه نویسی در چارچوب یا FrameWork دات نت است. یكی از بزرگ ترین مزیت های چارچوب دات نت، مسئله  مستقل از زبان بودن آن است. برنامه های كاربردی در چارچوب دات نت، می توانند به هر زبانی كه از این frameWork پشتیبانی می كند، نوشته شوند.
این امر، به واسطه  وجود یك زبان میانی (IL) فراهم شده است. در هنگام برنامه نویسی خارج از چارچوب دات نت، كد نوشته شده مستقیما به كد قابل فهم برای CPU كامپایل می شود، اما در دات نت، برنامه به هر زبانی كه نوشته شده باشد، در مرحله  اول، به این زبان میانی ترجمه  می گردد (كه در بین تمام زبان های این چارچوب مشترك است).
نتیجه  وجود زبان میانی این است كه امكان برقراری ارتباط بین زبان های مختلف برنامه نویسی فراهم می شود. هر زبان در چارچوب دات نت، دارای یك كامپایلر خاص است، و به كمك این كامپایلر می تواند با برنامه هایی كه در سایر زبان های تحت .Net نوشته  شده اند، ارتباط برقرار كند. چراكه در مرحله  اول، برنامه به هر زبانی كه نوشته شده باشد به این زبان میانی ترجمه می شود.
دات نت محدود به نوع خاصی از برنامه ها نیست، از این چارچوب می توان برای تولید برنامه های تحت ویندوز، تحت وب، سرویس های مبتنی بر وب و ... استفاده كرد. یكی دیگر از ویژگی های دات نت، دارار بودن كتابخانه ای بزرگ و جامع از كلاس ها و توابع است كه همان طور كه گفتیم، تمام زبان های تحت دات نت می توانند از توابع و كلاس های موجود در آن، استفاده كنند.
از مزیت های دیگر این چارچوب، می توان به مسئله  مدیریت حافظه اشاره كرد. در برنامه نویسی خارج از چارچوب دات نت، این مدیریت می بایست توسط برنامه نویس انجام شود و ممكن است با یك اشتباه كوچك از سوی برنامه نویس، حافظه  زیادی به هدر برود و برنامه با مشكل كمبود حافظه مواجه شود. در FrameWork دات نت، سیستمی به نام GC، در فاصله های زمانی غیر ثابت به بررسی حافظه می پردازد و داده هایی را كه دیگر استفاده نمی شوند از حافظه  سیستم حذف می كند و نیز به كاربر اطمینان می دهد كه با پایان برنامه، حافظه  اختصاص داده  شده به آن، به طور كامل بازیابی می شود.
از دیگر ویژگی های برنامه نویسی تحت دات نت، می توان به عدم دسترسی مستقیم به سخت افزار و حذف اشاره گرها و ... اشاره كرد كه توضیح كامل این مسائل، از حوصله  این بحث خارج است. بسیاری معتقدند كه ایده  دات نت، ابتدا در كمپانی Borland مطرح شد و سر انجام سر از مایكروسافت درآورد! اما آنچه مسلم است، این است كه مایكروسافت با معرفی این تكنولوژی، انقلابی را در عرصه  برنامه نویسی در ویندوز پدید آورد.
البته مهم ترین كمبود دات نت همین مسئله بود؛ این كه فقط به یك سیستم عامل تعلق داشت، هرچند مستقل از معماری پردازگر بود. مشكلی كه در حال حاضر توسط پروژه  Mono در حال مرتفع شدن است. مونو تنها پروژه ای نیست كه قصد دارد دات نت را برای سایر سیستم عامل ها پیاده سازی كند، اما در حال حاضر می توان به عنوان كامل ترین و امیدواركننده ترین پروژه از آن نام برد.


Mono چيست؟

پروژه اي است كه توسط شركت ناوِل (پيش تر توسط Ximian) براي ايجاد و توسعه ابزارهايي منطبق بر دات نت در دنياي اپن سورس رهبري مي شود. مونو قابليت اجرا روي لينوكس، FreeBSD ،UNIX ،Mac OSX و ويندوز را دارد و سكوهاي مورد پشتيباني آن همچنان در حال افزايشند. كامپايلر، #C و ابزارهاي آن در Mono تحت مجوز GPL، كتابخانه هاي run time آن تحت LGPL و Class Libraryهاي آن تحت مجوز MIT عرضه مي گردند. نتيجه اين كه مونو يك نرم افزار منبع باز و مجاني است.

مونو همچنين حاوي يك موتور Just -in-Time) JIT) سازگار با پروسسورهاي X86 ،SPARC ،PowerPC ،ARM ، S390 ،X86-64، IA64 و SPARC در حالت 64 بيتي است.
ه طور خلا صه در مورد عملكرد و كاربرد مونو مي توان گفت كه: مونو ابزاري براي كامپايل و ايجاد اسمبلي ها و برنامه هاي كاربردي نوشته شده با قابليت هاي دات نت است و اين امكان را مي دهد تا يك كد يكتا بدون نياز به بازنويسي يا كامپايل مجدد روي پلتفرم هاي مورد پشتيباني (كه در بالا  آمد) به راحتي و آساني قابل اجرا باشد. مي توان گفت كه مونو عملكردي مشابه چهارچوب Common Language Infrastructure) CLI) دات نت مايكروسافت دارد؛ با اين تفاوت كه مونو چهارچوبي كلي تر و مجاني براي پلتفرم هاي گسترده تر فراهم مي كند.

با اين كه تعداد زيادي از برنامه نويسان و توسعه دهندگان نرم افزار در سطح جهان به ابزارهاي مبتني بر ويندوز و دات نت عادت كرده اند،  زمان آن رسيده است بدانيد كه مي توانيد اسمبلي هاي دات نت را روي سكوهاي Mac OSX ،Solaris ،AIX و تعداد زيادي از لينوكس ها كامپايل و اجرا كنيد. در حالي كه Cross-Platform (يا استقلا ل نسبت به سكوي كاري) بودن اين چارچوب كاري (يعني مونو) به برنامه هايي از قبيل Hello World محدود نشده است و مي توانيد به آساني با مونو، اسمبلي هاي آماده توليد مبتني بر ADO.NET،  فرم هاي ويندوز، ASP.NET و ... را ايجاد و اجرا كنيد.


هدف مونو پیاده سازی متن بازی از دات نت مایكروسافت است. مونو دارای كتابخانه ای از كلاس ها و توابع است كه به سرعت رو به تكمیل شدن می رود و نیز كامپایلری برای زبان C دارد و در كنار IDE ویژه  خود (MonoDevelop)، ابزار مناسبی را برای برنامه نویسی در چارچوب دات نت فراهم می آورد. توسعه دهندگان این پروژه اعلام كرده اند كه به زودی برای بیشتر زبان هایی كه نسخه  تحت دات نت دارند، كامپایلرهایی را ارائه خواهند كرد.
علاوه بر سیستم عامل لینوكس، نسخه هایی از مونو برای مكینتاش، یونیكس و سولاریس ارائه شده است. این پروژه  از سوی كمپانی Novell پشتیبانی مالی و فنی می شود. ناول با فعالیت در پروژه  مونو، دو هدف را دنبال می كند. اول افزایش میزان قابلیت تولید نرم افزار، و مهم تر از آن، كمك به برنامه نویسان دات نت تحت ویندوز برای توسعه برنامه هایشان در سایر سیستم عامل ها.

[تصویر:  2055.jpg]

این مسئله نكته  ظریفی را به همراه خود دارد و می تواند با تكمیل شدن مون در آینده  نزدیك، عرصه را بر انحصار طلبی مایكروسافت تنگ كند. در حال حاضر، مایكروسافت با اقتدار تمام بر بازار سیستم عامل ها سایه  انداخته و طبق آمار های جهانی، بیش از ۹۰ درصد از كامپیوتر های موجود در دنیا، حاوی سیستم عامل ویندوز هستند.
اینكه مایكروسافت چگونه به این موقعیت رسیده است، شاید چندان مهم نباشد، اما آنچه راه را برای پیروزی های پیاپی سیستم عامل ویندوز در دهه  اخیر باز گذاشته، ترس سایر كمپانی های بزرگ از ورود به عرصه  رقابت سیستم عامل هاست. چراكه اولین شرط موفقیت یك سیستم عامل در بین كاربران، وجود نرم افزارهای مورد نیاز آنها برای آن سیستم عامل است.
برای یك تولید كننده  سیستم عامل همیشه این سوال مطرح است كه «آیا سایر شركت های كوچك و بزرگ تولید كننده  نرم افزارهای كاربردی، محصولات خود را برای سیستم عامل ما ارائه خواهند كرد یا نه؟» تا پیش از این، پاسخ این سوال همواره منفی بود، چراكه برنامه نویسی در سیستم عامل های مختلف، روش ها و ابزار های متفاوتی را می طلبید و برای داشتن دو نسخه از یك برنامه  كاربردی كه در دو سیستم عامل مجزا كار كند، تقریبا لازم بود كه این برنامه در هریك از سیستم عامل ها به طور مجزا نوشته شود.
در این میان قطعا شركت های تولید كننده  نرم افزارهای كاربردی مختلف، ترجیح می دادند كه هزینه  نسبتا هنگفت تولید نرم افزار را صرف سیستم عاملی كنند كه كاربران بیشتری دارد و در مورد صرف هزینه برای تولید نرم افزار برای سیستم عامل های نوپا، «ریسك» نكنند. اما با سوق پیدا كردن علم برنامه نویسی به سوی چارچوب واحد دات نت، و توسعه  این چارچوب برای سایر سیستم عامل ها از توزیع های مختلف لینوكس گرفته تا مك، سولاریس و حتی سیستم عامل هایی كه ممكن است در آینده متولد شوند، فرایند تولید نرم افزار از حالت یك ریسك خارج می شود.
تولیدكننده فقط یك بار برنامه را می نویسد و با استفاده از محیط های پیاده ساز دات نت در سایر پلت فرم ها، به ازای هر سیستم عامل فقط یك بار آن را كامپایل می كند و متحمل هزینه  چندانی نمی شود. بنابراین ترجیح می دهد كه نرم افزار خود را تنها به قیمت چند بار كامپایل كردن، برای تمام سیستم عامل های رایج ارائه كند. و همان طور كه گفتیم، سادگی و یكپارچه شدن این قالب كاری، می تواند در آینده به كمپانی هایی به جز مایكروسافت نیز جرات ورود به بازار سیستم عامل ها را بدهد.
اگر پیگیر اخبار دنیای اپن سورس بوده باشید، حتما می دانید كه چندی پیش امضای قراردادی بین ناول و مایكروسافت، موجی از اعتراضات را از سوی جوامع هوادار اپن سورس متوجه ناول كرد. اما مسئولان پروژه  مونو، اظهار كرده اند كه این امر خود باعث نزدیكی بیشتر مهندسان مایكروسافت و ناول شده و هرچند همكاری رسمی بین دو كمپانی در زمینه  پروژه  مونو وجود ندارد، اما این نزدیكی موجبات ساده تر شدن فرایند تكمیل مونو را فراهم كرده است. به گفته  مسئولان ناول، مایكروسافت علاقه  زیادی به پیاده سازی نسخه های مختلف .Net دارد.

در حال حاضر كمپانی های زیادی از مونو برای توسعه  نرم افزارهای خود كمك می گیرند، به عنوان مثال می توان به WikiPedia اشاره كرد كه بخشی از ساختار موتور جست وجوی آن بر پایه  مونو قرار دارد. از ابتدای ارائه  تكنولوژی دات نت، همواره رقابت یا به نوعی دعوای رسانه ای بین Microsoft و Sun (سازنده  زبان جاوا) وجود داشته است.
به طوری كه هریك از دو كمپانی در سایت خود، ادعا كرده اند كه هر دو محصول را آزمایش كرده اند و به این نتیجه رسیده اند كه محصول خودشان كارایی بهتری دارد! اما در برابر تمام مزیت های دات نت، J۲EE امتیاز بزرگی داشت؛ این محیط توسعه مستقل از سیستم  عامل بود (همانطور كه می دانید، در زبان جاوا برنامه  نوشته شده كامپایل نمی شود و به كمك Virtual machine در هر سیستم عاملی اجرا می گردد). در این بین توسعه  پروژه هایی مانند مونو، راه را برای دات نت هموارتر كرد.
به طوریكه  اخیرا در یك نظرسنجی، مشخص شد كه حدود ۶۶ درصد از توسعه دهندگان، پلت فرم دات نت را بر J۲EE ترجیح می دهند. از دیگر پروژه های مربوط به پیاده سازی دات نت در لینوكس، می توان به DotGNU اشاره كرد. توسعه دهندگان دات گنو می گویند به دنبال طراحی و ساخت چیزی هستند كه بتوان آن را «سیستم عاملی برای اینترنت» نامید! مجموعه ای از ابزارها كه به كامپاننت ها اجازه می دهند از طریق اینترنت، با هم تقابل داشته باشند.

در این راستا، نسخه  قابل حملی (Portable) از دات گنو ارائه شده كه آن نیز شامل یك كتابخانه از كلاس ها و توابع، یك كامپایلر برای سی شارپ، و مجموعه ای دیگر از سایر ابزارهای برنامه نویسی است. ابزار دیگری به نام phpGroupWare نیز در این مجموعه قرار دارد كه قابلیت كار گروهی را برای تولید سرویس های مبتنی بر وب فراهم می آورد.
ناول در نسخه های اخیر توزیع OpenSUSE خود، مونو را به صورت پیش فرض به همراه آن ارائه كرده است. باید دید با فراگیر شدن این FrameWork در توزیع  OpemSUSE و احتمالا سایر توزیع های لینوكس، چه تغییراتی در حوزه برنامه نویسی در این سیستم عامل پدید می آید و آیا تلاش ناول در جهت ساده سازی برنامه نویسی در لینوكس، بنیاد نرم افزار های آزاد (FSF) را از اعمال تحریم علیه ناول منصرف خواهد كرد یا نه؛ تحریمی كه به دلیل انعقاد قرارداد با مایكروسافت، ممكن است گریبانگیر ناول بشود.

پاسخ
#2
Note 

نصب Mono:


براي شروع كار در ويندوز، بايد نسخه مخصوص ويندوز MONO را دانلود و نصب نماييد. پس از دريافت فايل Mono Installer for Windows آن را اجرا كنيد و پروسه نصب را پي بگيريد. توجه داشته باشيد كه Mono هيچ تداخلي با Microsoft.NET يا MS Visual Studio از قبل نصب شده نخواهد داشت.

در زمان تهيه اين مقاله، بهترين و آخرين نسخه عرضه شده مونو، 1.15 است. اگر بعد از نصب به دايركتوري اين نسخه از مونو مراجعه كنيد، با تعداد زيادي از زير پوشه ها از جمله etc ،contrib ،man ،share و ... مواجه خواهيد شد. (كه براي كاربران لينوكس آشناست) (شكل 1). شكل 1 ساختار پوشه مونو را نشان مي دهد.

در اين مقاله فقط با فولدرهاي  bin/ (كه حاوي بسياري از ابزارهاي مونو از جمله كامپايلر #C)، Global Asscmbly Cache: GAC lib\mono\gac چارچوب كاري مونو) سروكار خواهيم داشت.


چون اكثر ابزارهاي مونو را از دايركتوري  bin\ و از طريق خط فرمان اجرا خواهيد كرد، لذا بهتر است آدرس آن را به متغير محيطي Path سيستم عامل خود اضافه كنيد. براي سهولت در كار، مي توانيد از خط فرمان MONO استفاده كنيد. اين ابزار مي تواند به طور خودكار ابزارهاي خط فرماني را شناسايي كند وآن ها را به كار گيرد. آدرس اين كنسول: Start>All Program >Mono For Windows> Applications حال براي اطمينان از صحت نصب، فرمان زير را وارد كنيد:

کد:
mono-- version
اگر همه كارها به درستي انجام شده باشد


كامپايلرهاي Mono:

مونو، همانند توزيع CLI مايكروسافت، حاوي تعدادي كامپايلر مديريت شده است. اين كامپايلر عبارتند از:
●   كامپايلرهاي #mcs.exe : C و gmcs
●   كامپايلر BASIC مونو: mbas.exe
●   كامپايلر زبان booc.exe :Boo
●   كامپايلرهاي CIL مونو: IIasm.exe, ilasm.exe

در اين مقاله فقط از كامپايلرهاي #C استفاده خواهيم كرد، اما در مورد كامپايلر بيسيك مونو بايد گفت كه يك مجموعه كامل و غني از Visual Basic.NET است كه با هدف ايجاد و توسعه يك زبان برنامه نويسيِ به آساني قابل فهم براي آنان در دنياي لينوكس / يونيكس و Mas OSX عرضه شده است و همچنان در حال توسعه و بازبيني قرار دارد. Boo نيز يك زبان شي ء گرا از نوع ايستا است كه بر مبناي Python نوشته شده است. براي آشنايي بيشتر با اين كامپايلر به اين سايت مراجعه كنيد. llasm.exe و ilasm.exe نيز كامپايلرهاي CIL مونو هستند كه دومي از ساختارهاي زباني NET 2.0 پشتيباني مي نمايد.

كار با كامپايلرهاي #C:

mcs.exe اولين #C بود كه براي پروژه مونو در نظر گرفته شد. اين كامپايلر با 1.1#C مطابقت كامل دارد (در حقيقتmcs.exe با #C نوشته شده است) و همانند كامپايلر خط فرمان مايكروسافت يعني (csc.exe) از response fileها پشتيباني مي كند. يعني كه مي توانيد با اضافه كردن فلگ هاي /target ،/out ،/reference و ... به ترتيب نوع اسمبلي، نام اسمبلي كامپايل شده و وابستگي هاي خارجي فهرست اسمبلي را براي كامپايلر تعيين كنيد. مي توانيد تمام آپشن هاي قابل استفاده در mcs.exe را با دستور زير مرور كنيد:

کد:
؟- mcs.exe

gmcs.exe يا(genericmcs.exe) نسخه اي از mcs.exe است كه از #C مخصوص NET 2.0 و ارجاع هاي كتابخانه هاي پايه اي كلا س مبتني بر NET 2.0 پشتيباني مي كند. در حقيقت تفاوت اين دو كامپايلر در اينجاست كه mcs.exe به طور خودكار به Base Class Libraryهاي مبتني بر NET 1.1 مراجعه مي كند، در صورتي كه gmcs.exe به طور پيش فرض از Base Class Libraryهاي مبتني بر NET 2.0 به عنوان مرجع استفاده مي نمايد. با اين حساب،gmcs.exe در آينده كامپايلر پيش فرض مونو خواهد شد و mcs.exe از دور خارج خواهد گرديد.

ايجاد يك Code Library دات نت با Mono:

براي آشنايي با مونو در عمل، از ايجاد يك كتابخانه كه با نام Core LibDump.dll شروع مي كنيم. اين اسمبلي حاوي يك نوعِ تك كلا سه با نام CoreLib Dumper و داراي يك متد استاتيك با نام DumpTypeTo File است. اين متد يك رشته كه معرف يك نام معتبر از يك Type موجود درون mscorlib.dll را مي گيرد و اطلا عات مرتبط با آن Type را به يك فايل محلي در هاردديسك منتقل مي كند كه كامل اين برنامه در فهرست 1 آمده است. براي مثال، اگر پارامتر رشته اي ورودي به اين متد System.Threading.Thread باشد، فايل خروجي System.Threading.Thread.txt نام خواهد داشت. با اين كه مي توانيد اين برنامه را با واردكردن آرگومان هاي تعريفي به صورت مجزا كامپايل كنيد، اين كار با استفاده از فايل هاي response ساده تر و راحت تر انجام مي پذيرد. براي اين كار، فايلي را با نامCorelibDumper.rsp در كنار فايل CoreLibDumper.cs ايجاد نماييد و مجموعه فرامين زير را در آن وارد كنيد:
کد:
target: library/
out: CorelibDumper.dll/
CoreLibDumper.cs
حال مي توانيد كتابخانه مذكور را با دستور زير كامپايل كنيد:
کد:
gmcs @corelibDumper.rsp 
البته بدون فايل هاي rsp.* بايد كامپايل را اين گونه انجام مي داديد:
کد:
gmcs/target: library out:Corelib/.Dumper.dll
Corelib Dumper.cs

تخصيص يك نام قوي به CoreLib Dumper.dll:

مونو از ايجاد اسمبلي هاي نام قوي و به اشتراك گذاري شده در Global Assembly Cache) GAC) نيز پشتيباني مي كند. يعني مي توان كتابخانه اي را كه ايجاد كرده ايد، در GAC به صورت فراگير به اشتراك بگذاريد. براي ايجاد داده هاي كليدي public/private، مونو از sn.exe (كه كم و بيش مثل محصول مايكروسافتي هم نام خود عمل مي كند) استفاده مي نمايد. براي مثال، دستور زير يك فايل snk.* ايجاد مي كند: (براي كسب اطلا عات بيشتر از فلگ ؟ - در پايان فرمان استفاده كنيد).

کد:
sn/ k myTest KeyPair.snk
حال براي اين كه به #C بگوييم از اين كليد ايجاد شده براي تخصيص يك نام قوي به كتابخانه CoreLibDumper.dll استفاده كند، بايد فايل CoreLibDumper.rsp را به صورت زير درآوريد:
کد:
target: library/
out: CoreLibDumper.dll/
Keyfile: myTest KeyPair.snk/
CoreLibDumper.cs
حال با فرمان زير، كتابخانه خود را دوباره كامپايل مي كنيم:
کد:
gmcs @corelibDumper.rsp 

مشاهده فهرست بروزرساني شده با monodis.exe:


قبل از قرار دادن اسمبلي در GAC، در مورد monodis.exe (كه عملكردي مشابه ildasm.exe مايكروسافت دارد) بدانيد كه مي توانيد با استفاده از آن، كُد CIL، فهرست كلي و انواع metadata براي يك اسمبلي مشخص را مشاهده كنيد.

مثلا ً مي خواهيم اطلا عات مربوط به اسمبلي نام قويِ جديدي كه ايجاد كرده ايم را با سوييچ assembly مشاهده كنيم. شكل 3 پاسخ به دستور زير را نشان مي دهد:
کد:
monodis-- assembly CoreLibDumper.dll

pcpedia.ir | mojsazan.com

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

کاربرانِ درحال بازدید از این موضوع:   1 مهمان