روبی (Ruby)  و پایتون (Python) زبانهای اسکریپتی معروف هستند. منظور از اسکریپت  (Script) کدهایی است که با این زبان ها نوشته می شود و کامپایل نمی شود بلکه تفسیر می شود و هر زمانی که درخواستی برای اجرا شدن آنها صادرمی شود، یک مفسر کد را تفسیر و آن را اجرا می کند. این زبان ها با این نوع اجرا، بهتر از بقیه زبان هایی که کامپایل می شوند، بهتر هستند در بحث ما نمی گنجد، اما خطایابی (Debug) این که کد هایی نوشته شده با  این زبان ها به مراتب سخت تر از زبا نهای دیگر است.

بیایید زبانی را تصور کنیم که با گرامر(Syntax) پایتون نوشته شود و از امکانات دات نت استفاده کرده و در محیط ویندوزی کامپایل شود. این تصور دور از ذهن نیست ، زیرا مایکروسافت، دات نت و  C# خود را  روز به روز بهتر کرد تا امکاناتی فراهم کند و برنامه نویسانی که به زبانهای دیگر برنامه نویسی می کنند بتوانند براحتی از کد هایی که قبلا نوشته اند، در محیط ویندوز استفاده کنند.

مایکروسافت در C#4 و همین طور .net4 یک ویژگی به نام DLR (Dynamic Language Runtime) را معرفی کرد. این ویژگی به زبان  C# امکان می دهد تا براحتی کد های Python  و  Ruby را اجرا کند و از توابع و کلاس هایی که در این کدها نوشته شده اند به صورت کاملا محلی استفاده کند. به این شکل که شما می توانید توابع و کلاس های این کدها را به همان صورتی که از کلا سها و توابعی که در سی شارپ نوشته اید، استفاده کنید. برای شفاف شدن موضع به کد زیر دقت کنید:

string[] lines ={@"def DoIt1(logObj):",@" logObj.AddInfo('Executed in a function call using log object input.')",@"",};

code = String.Join("\r", lines);

pyEngine = Python.CreateEngine();

pyScope = pyEngine.CreateScope();

ScriptSource source = pyEngine.CreateScriptSourceFromString(code,

SourceCodeKind.Statements);

CompiledCode compiled = source.Compile();

compiled.Execute(pyScope);

همان طور که در کد بالا مشاهده می کنید؛ یک قطعه کد نوشته شده با زبان  Python کامپایل شده و اجرا می شود و شما می توانید از خروجی این کد در برنامه خود استفاده کنید. اما  DLRتنها به این مورد محدود نمی شود، شما می توانید در زبان سی شارپ نیز کلاسها و توابعی را به صورت dynamic  تعریف کنید. این داینامیک بودن  به معنی آن است که شما م یتوانید در زمان اجرا به کلاس خود یک متد یا یک ویژگی اضافه و در بقیه جاها از آن استفاده کنید. درباره کدهای داینامیک و اینکه در زبان سی شارپ چگونه می توان از آنها استفاده کرد؛ در پست های بعدی بیشتر توضیح خواهیم داد. اما بر مبنای همین ویژگی، برنامه نویسان در مایکروسافت زبان های ابداعی را به وجود آوردند که کارها را راحت تر می کرد، از جمله این زبان ها می توان به IronPython که برمبنای زبان پایتون بنا شده و به شما امکان استفاده از کدهای دات نت را در Python  می دهد، اشاره کرد. شما می توانید خروجی خود را به صورت یک فایل اجرایی یا یک کتابخانه با پسوند dll  کامپایل کنید، یعنی دیگر نیازی به نصب  پایتون و... ندارید. این زبان امکانات جالبی را برای برنامه نویسان ویندوزی فراهم می کند؛ به عنوان مثال می توان از توانایی های برنامه نویسان پایتون در تیم هایی که اپلیکیشن های تحت دات نت را توسعه می دهند، استفاده کرد، کد زیر:

import clr

clr.AddReference("System.Windows.Forms")

 

from  System.Windows.Forms  import  MessageBox

MessageBox.Show("Hello World")

 

اما IronPython  تنها زبانی نبود که پا به  دنیای دات نت گذاشت، همان طور که تیم توسعه دهنده  IronPython گفته اند، این زبان را می توان IronRuby نامید ،  زبان  IronRuby هم دقیقا مانند IronPython  است و شما می توانید از تمامی امکانات  Rubyدر دات نت و برعکس استفاده کنید.  اما سوال بزرگ این است که آیا این زبان ها در دنیای وب هم قدرتمند ظاهر خواهند شد یا می توانند در بستر دات نت و وب نیز مانند برنامه های ویندوزی موثر و مفید باشند؟