پرش به مطلب اصلی

ماشین حالت

· خواندن 2 دقیقه
علی
مهندس نرم‌افزار

واضع عبارت Structured Concurrency در چند نوشته خود به همروندی ساخت‌یافته به عنوان راه رهایی از ماشین حالت اشاره می‌کند.

امروز این مطلب و دو ویدئویی که به آن اشاره شده را می‌دیدم. جایی در این ویدئو در حین پیاده‌سازی پروژه serverlesspresso متوجه می‌شوند که گویا در حال پیاده‌سازی یک ماشین حالت هستند. در نهایت ماشین حالت را به یک سری تابع تبدیل می‌کنند که بر بستر AWS Lambda قابل اجرا باشد و با استفاده از EventBridge رخدادهای خارجی را پوشش می‌دهند. به نظر آمازون با سبد محصولی خود تمام زیرساخت مورد نیاز برای پیاده‌سازی یک ماشین حالت در حالت مقیاس‌پذیر را فراهم کرده است.

اما اگر به نوشته‌های آقای Martin Sústrik در مورد همروندی ساخت‌یافته مراجعه کنیم، ایشان دو مشکل را در مورد ماشین حالت ذکر می‌کنند، اول اینکه ماشین‌های حالت معمولا بزرگ و شکننده هستند و دوم اینکه معمولا زبان‌های برنامه نویسی به صورت ذاتی از آن‌ها پشتیبانی نمی‌کنند.

اما در مورد زبان‌ Erlang قضیه متفاوت است و این زبان به صورت ذاتی رویکردی برای پیاده‌سازی ماشین حالت دارد که تحت عنوان رفتار gen_statem شناخته می‌شود. رفتارها در این زبان چیزی شبیه مفهوم Design Pattern هستند. برای آشنایی بیشتر با ماشین حالت در این زبان مستندات اصلی خیلی راهگشا هستند.