جیرا یه زبان برنامهنویسی تمامعیاره
خلاصهٔ کاملتر
نویسنده میگه یه فولکلور مهندسی هست که میگه جیرا، ابزار مدیریت پروژهٔ Atlassian، عملاً یه زبان برنامهنویسی کامل (Turing-complete) هست. اما ادعاهای قبلی فقط مبهم به قابلیتهای اتومیشن اشاره میکردن و هیچوقت یه اثبات درستوحسابی ارائه نمیدادن. این مقاله میخواد اون اثبات رو با یه پیادهسازی واقعی و قابلاجرا روی جیرا بده.
ابزار کار نویسنده یه ماشین رجیستر مینسکی هست؛ یه مدل محاسباتی خیلی ساده که فقط با دو تا شمارنده (رجیستر) بینهایت و چند تا دستور برچسبدار کار میکنه. دو تا دستور اصلیش اینه: یکی مقدار یه رجیستر رو زیاد کنه و بره به یه حالت بعدی، یکی هم اگه رجیستر صفر بود یه جا بپره وگرنه ازش یکی کم کنه و یه جای دیگه بپره. مینسکی سال ۱۹۶۷ ثابت کرده همین مدل ساده Turing-complete هست، پس اگه بشه توی جیرا پیادهاش کرد، کار تمومه.
یه برنامهٔ نمونهٔ مینسکی که مقدار رجیستر A رو به B اضافه میکنه این شکلیه:
1. if A == 0 goto 3 else (DEC A; goto 2)
2. INC B; goto 1
3. HALT
نگاشت روی جیرا هم هوشمندانهست: تعداد ایشوهای لینکشده از نوع Bug میشه رجیستر A، تعداد ایشوهای نوع Task میشه رجیستر B، وضعیت یه ایشوی Epic نقش شمارندهٔ برنامه (Program Counter) رو بازی میکنه، و هر قانون Automation هم یه دستور رو پیاده میکنه. زیاد و کم کردن رجیسترها با ساختن و حذف کردن ایشوهای لینکشده انجام میشه و شرطها هم با قانونهایی که شرطشون JQL هست. نویسنده میگه این رو روی یه نمونهٔ واقعی atlassian.net اجرا کرده و جمع ۲ بهعلاوهٔ ۳ درست از کار دراومده.
بعد یه مرحله جلوتر میره و دنبالهٔ فیبوناچی رو هم با سه حالت و سه رجیستر پیاده میکنه. اینجا از قابلیت Convert Issue Type جیرا استفاده میکنه که نوع یه ایشو رو فوری عوض میکنه (مثلاً Bug به Story)؛ این کار قدرت محاسباتی جیرا رو بیشتر نمیکنه ولی جدول دستورها رو خیلی کوچیکتر و برنامهها رو عملیتر میکنه.
یه نکتهٔ جالب اینه که ماشین فیبوناچی حالت توقف (halt) نداره و تا سقف زنجیرهٔ ۱۰تایی تریگرها توی Jira Cloud اجرا میشه؛ بعدش اپراتور باید دستی Epic رو دوباره تریگر کنه تا ادامه پیدا کنه. به گفتهٔ نویسنده این چیزی از اثبات کم نمیکنه، آدم فقط نقش تیکتاک ساعت رو بازی میکنه. توی Jira Data Center هم ادمین میتونه چند تا property مثل aggressive.timeout.threshold رو تنظیم کنه.
نتیجهگیری نویسنده اینه که زبان اتومیشن جیرا میتونه یه ماشین دو-شمارنده رو رمزگذاری کنه، پس طبق همون قراردادی که میگه هر کامپیوتر فیزیکی محدوده، جیرا هم Turing-complete حساب میشه. حرف آخرش هم اینه که اگه اتومیشنهای پیچیدهٔ جیرا حس برنامهنویسی بهتون میدن، دلیلش اینه که واقعاً برنامهان.
نکات کلیدی:
- اثبات Turing-complete بودن جیرا با ساختن یه ماشین رجیستر مینسکی روی قابلیت Automation
- تعداد ایشوهای Bug و Task نقش رجیستر، وضعیت Epic نقش شمارندهٔ برنامه رو بازی میکنه
- INC و DEC با ساختن و حذف ایشوی لینکشده، و شرطها با قانونهای مبتنی بر JQL پیاده میشن
- دنبالهٔ فیبوناچی هم با سه حالت و قابلیت Convert Issue Type پیاده شده
- سقف زنجیرهٔ ۱۰تایی تریگر توی Jira Cloud باعث میشه ماشین بدون halt نیاز به تریگر دستی داشته باشه




