سیمولاتور و امولاتور عبارتی که زیاد اونها رو میشنویم بدون اینکه به شکل دقیق تفاوتشون رو بدونیم؛ بخصوص هنگام ترجمه یک چیزی مثل «شبیه ساز» رو برای هر دو استفاده میکنیم و کلا بحث قاطی میشه. علی اکبر نوروزی توی یک ایمیل این رو پرسیده و لینکی به جواب ها هم داده و گفته بد نیست تو وبلاگ ازش بنویسم تا برای بقیه هم روشنتر باشه. منم موافقم؛ نمیشه ندونیم سیمولاتور و امولاتور چه فرقی با هم دارن که!
سیمولاتور
وقتی میگیم چیزی سیموله می شه (simulation) یعنی داریم می گیم سیستمی شبیه به سیستم دیگه عمل میکنه ولی پیاده سازیاش کاملا متفاوت است. توی سیمولیشن ما داریم عملکرد پایهای سیستم رو تکرار میکنیم اما الزاما به تمام قواعد چیزی که شبیهسازیاش کردیم پایبند نیستیم. با استفاده از شبیهساز ما میتونیم دیدی خوب در مورد نحوه عملکرد یک سیستم پیدا کنیم.
برای مثلا شبیهساز هواپیما سعی میکنه در یک چیزهایی کاملا مثل یک هواپیما باشه ولی اصلا سعی نمیکنه واقعا پرواز کنه. یک شبیه ساز برای آموزش ساخته شده و علاوه بر اهرمها و پدالها ممکنه کل پنجره رو هم شبیه سازی کنه ولی هیچ نیازی نمیبینه واقعا قابلیت پرواز داشته باشه و گاهی حتی قبول می کنه قواعد اصلی پرواز رو هم برای کسب تجربه یا هر دلیل دیگه بشکنه. مثلا ممکنه تصمیم بگیرین با یک هواپیمای مسافربری به شکل عمود پرواز بلند بشین تا ببینین چی می شه یا جاذبه رو خیلی کمتر از حد واقعی تعریف کنین و تجربه جدیدی داشته باشین. اینجا ما بخشی از قواعد رو ثابت نگه داشتیم و سعی می کنیم با Simulation فیزیکی پرواز، بدون پرواز کردن به یکی خلبانی یاد بدیم.
امولاتور
در مقابل امولاتورها سعی می کنن با تقلید (؟) یا همون Emulate کردن یک سیستم، در همه جنبهها مثل اون سیستم کار کنن. یک امولاتور تا جای ممکن تک تک قابلیت های سیستم مورد تقلید رو تکرار میکنه و در بهترین حالت تبدیل میشه به کپی دقیق از اون سیستم. در دنیای کامپیوتر امولاتورها تا جایی پیش میرن که در سطح باینری با سیستم اصلی سازگار هستن و مثلا میتونین با یک امولاتور آمیگا، برنامههای کامیپوتر آمیگا رو روی لینوکس اجرا کنین. این امولاتور با وجود اینکه در محیطی متفاوت از سیستم اصلی اجرا میشه، در سطح ورودی و خروجی کاملا سازگار با سیستم اصلی است. در یک امولاتور کلیه قوانین کاملا ثابت هستن و تغییر اونها باعث خراب شدن کل سیستم امولاتور میشه.
مثالی خوب از امولاتورها، امولاتورهای بازی در محیطهای کامپیوتری هستن. برای نمونه پروژه M.A.M.E سعی می کنه امولاتور چندین سخت افزار قدیمی بازی باشه تا از این طریق بتونیم برنامه اون سختافزارها رو مستقیما روی این سیستم اجرا کنیم و به این طریق تاریخ بازی های کامپیوتری رو یکجا در دسترس داشته باشیم.
به عبارت دیگه میتونیم اینطوری بگیم که در یک سیمولیشن ما کاملا آگاهانه و با کنترل بخشهایی از سیستمی که میخوایم رو شبیه سازی میکنیم در حالی که در امولاتور سعی میکنیم به شکلی کور و تا آخرین قانون مطابق با محیطی باشیم که داریم سعی می کنیم شبیه سازی / تقلیدش کنیم.