در طراحی کامپایلر، فرم تخصیص ایستای منفرد ( به انگلیسی: Static single assignment form ) یا همان SSA، یک ویژگی نمایش میانی است، که نیاز دارد هر متغیر قبل از استفاده، تعریف و تنها یک بار اختصاص داده شود. متغیرهای موجود در IR اصلی به چند دسته تقسیم می شوند؛ متغیرهای جدید که معمولاً با نام اصلی با یک زیرنویس در کتاب ها ذکر می شوند، به طوری که هر تعریف، در دسته خاص خود می گنجد. در روش SSA، زنجیره های استفاده از تعریف واضح و روشن است و هر یک از آنها یک عنصر یکتا دارد. هر متغیری در متن برنامه دقیقاً یک مقدار را اخذ می کند. ( اما این به این معنا نیست که نمی توانیم در برنامه حلقه داشته باشیم )
SSA در سال ۱۹۸۸ توسط Barry K. Rosen , Mark N. Wegman و F. Kenneth Zadeck ارائه شد. [ ۱] ران سیترون، ژان فرانتت و سه محقق قبلی IBM الگوریتمی را ایجاد کردند که می تواند فرم SSA را به طور کارآمد محاسبه کند. [ ۲]
می توان انتظار داشت که SSA را در یک کامپایلر برای Fortran یا C پیدا کنیم، در حالی که در کامپایلرهای زبان های تابعی، مانند نمونه هایی برای Scheme, ML و Haskell، از شیوه ادامه دادن ( CPS ) به طور عمومی استفاده می شود. SSA رسماً با یک زیر مجموعه خوش رفتار از CPS ( به استثنای روند کنترل غیر محلی ) ، معادل است که وقتی CPS به عنوان نمایندهٔ میانجی استفاده می شود، رخ نمی دهد؛ بنابراین بهینه سازی ها و دگرگونی های صورت گرفته در قالب یکی، بلافاصله روی دیگری اعمال می شوند.
مزیت اصلی SSA این است که همزمان، نتایج انواع کامپایلر بهینه ساز را بوسیله ساده سازی متغیرها ساده کرده و بهبود می بخشد. به عنوان مثال، این قطعه کد را در نظر بگیرید:
y := 1 y := 2 x := y همان طور که قابل مشاهده است، تخصیص اوّل ضروری نیست و مقدار y در سطر سوم، از تخصیص دوم y بدست می آید. یک برنامه برای تشخیص این موضوع باید تجزیه و تحلیل دسترسی تعریف را انجام دهد. اما اگر این برنامه به شکل SSA باشد، هر دو مورد آنی و بی درنگ هستند:
y1 := 1 y2 := 2 x1 := y2 برخی از بهینه سازی کامپایلرها در فرم SSA بهتر عمل می کند؛ انتشار شرطی مقدار ثابت ( Conditional constant propagation ) و عددگذاری سراسری متغیر ( global value numbering ) در فرم های SSA سریع تر و کارآمدتر هستند. [ ۳]
الگوریتم های بهینه سازی کامپایلر که با استفاده از SSA فعال شده یا قویاً بهبود داده شده اند، عبارتند از:
این نوشته برگرفته از سایت ویکی پدیا می باشد، اگر نادرست یا توهین آمیز است، لطفا گزارش دهید: گزارش تخلفSSA در سال ۱۹۸۸ توسط Barry K. Rosen , Mark N. Wegman و F. Kenneth Zadeck ارائه شد. [ ۱] ران سیترون، ژان فرانتت و سه محقق قبلی IBM الگوریتمی را ایجاد کردند که می تواند فرم SSA را به طور کارآمد محاسبه کند. [ ۲]
می توان انتظار داشت که SSA را در یک کامپایلر برای Fortran یا C پیدا کنیم، در حالی که در کامپایلرهای زبان های تابعی، مانند نمونه هایی برای Scheme, ML و Haskell، از شیوه ادامه دادن ( CPS ) به طور عمومی استفاده می شود. SSA رسماً با یک زیر مجموعه خوش رفتار از CPS ( به استثنای روند کنترل غیر محلی ) ، معادل است که وقتی CPS به عنوان نمایندهٔ میانجی استفاده می شود، رخ نمی دهد؛ بنابراین بهینه سازی ها و دگرگونی های صورت گرفته در قالب یکی، بلافاصله روی دیگری اعمال می شوند.
مزیت اصلی SSA این است که همزمان، نتایج انواع کامپایلر بهینه ساز را بوسیله ساده سازی متغیرها ساده کرده و بهبود می بخشد. به عنوان مثال، این قطعه کد را در نظر بگیرید:
y := 1 y := 2 x := y همان طور که قابل مشاهده است، تخصیص اوّل ضروری نیست و مقدار y در سطر سوم، از تخصیص دوم y بدست می آید. یک برنامه برای تشخیص این موضوع باید تجزیه و تحلیل دسترسی تعریف را انجام دهد. اما اگر این برنامه به شکل SSA باشد، هر دو مورد آنی و بی درنگ هستند:
y1 := 1 y2 := 2 x1 := y2 برخی از بهینه سازی کامپایلرها در فرم SSA بهتر عمل می کند؛ انتشار شرطی مقدار ثابت ( Conditional constant propagation ) و عددگذاری سراسری متغیر ( global value numbering ) در فرم های SSA سریع تر و کارآمدتر هستند. [ ۳]
الگوریتم های بهینه سازی کامپایلر که با استفاده از SSA فعال شده یا قویاً بهبود داده شده اند، عبارتند از:
wiki: فرم تخصیص ایستای منفرد