موضوع مقاله: آنالیز تخصیص قطعی | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # آنالیز تخصیص قطعی | مقدمه: آنالیز تخصیص قطعی در علوم کامپیوتر، آنالیز جریان داده‌ای است که توسط کامپایلرها استفاده می‌شود تا به‌طور محافظه کارانه مطمئن شویم که یک متغیر یا آدرس، همیشه قبل از استفاده، تخصیص داده شده باشد. | ## بخش 1: آنالیز تخصیص قطعی | هدف در برنامه‌های C و C ++، یکی از منشاهای خطاهایی که تشخیص آن‌ها بسیار دشوار است، رفتار غیرقطعی‌ حاصل خواندن متغیرهای تعریف نشده است. این رفتار می‌تواند بین سیستم عامل‌ها، ساخت‌ها و حتی بین اجراهای مختلف متفاوت باشد. با این حال، می‌توان یک تحلیل محافظه کارانه (غیر دقیق) به وجود آورد که فقط برنامه‌هایی را بپذیرد که این محدودیت را برآورده کنند، در حالی که برخی از برنامه‌های صحیح را رد کرد، و تحلیل تخصیص قطعی چنین تحلیلی است. مشخصات زبان برنامه نویسی جاوا و سی شارپ مستلزم آن است که کامپایلر یک خطای زمان کامپایل را در صورت شکست آنالیز، گزارش کند. در جاوا، این تجزیه و تحلیل توسط استارک و همکارانش رسمیت یافت و برخی از برنامه‌های صحیح رد می‌شوند و باید برای معرفی تخصیص غیر ضروری و مشخص تغییر داده شوند. در سی شارپ، این تجزیه و تحلیل توسط Fruja رسمیت یافت، و دقیق و درست است، به این معنا که همه متغیرهای تخصیص داده شده در طول تمام مسیرهای جریان کنترل، به طور قطعی، اختصاص داده شده در نظر گرفته می شوند. زبان سایکلون نیز به برنامه‌ها نیاز دارد که تجزیه و تحلیل تخصیص مشخصی را انجام دهند، اما فقط روی متغیرهایی با انواع پوینتر، تا انتقال برنامه‌های سی آسان شود. | ## بخش 2: آنالیز تخصیص قطعی | راه دوم برای حل این مشکل این است که همه‌ی مکان‌ها را به یک مقدار ثابت و قابل پیش بینی در نقطه‌ای که در آن تعریف شده اند به طور خودکار مقداردهی کنیم ، اما این وظایف جدیدی را معرفی می کند که ممکن است عملکرد را مختل کند. در این حالت ، تجزیه و تحلیل تکلیف قطعی ، بهینه سازی کامپایلر را امکان پذیر می کند که در آن تکالیف اضافی — تکالیفی که پس از آن تکالیف دیگر دنبال می شوند و هیچ خوانشی احتمالی در آن‌ها وجود ندارد — قابل حذف است. در این مورد ، هیچ برنامه ای رد نمی شود ، اما برنامه‌هایی که تجزیه و تحلیل آن‌ها در تعیین تکلیف مشخص نمی تواند شامل مقداردهی اولیه اضافی باشد. واژه شناسی می‌توان گفت که یک متغیر یا آدرس، در طول برنامه، در یکی از سه حالت زیر قرار دارد: به طور قطعی اختصاص داده شده: متغیر با قطعیت مشخص است که تخصیص داده شده است. آنالیز موارد زیر بر اساس رسمی‌سازی Fruja در تجزیه و تحلیل تخصیص قطعی درون رویه‌ای (تک روشی) سی شارپ است، که مسئول اطمینان از تخصیص همه متغیرهای محلی قبل از استفاده از آن‌ها است. آن را به طور همزمان تجزیه و تحلیل تخصیص مشخص و انتشار ثابت مقادیر بولین انجام می‌دهد. ما پنج تابع استاتیک را تعریف می کنیم: نامدامنهتوضیحقبلتمام عباراتمتغیرهایی که قبل از ارزیابی عبارت، اختصاص داده شده‌اند.بعدتمام عباراتمتغیرهایی که قطعاً پس از ارزیابی عبارت، با فرض اینکه به طور معمول کامل شود، اختصاص داده می شوند.varsتمام عباراتهمه متغیرهای موجود در محدوده‌ی عبارت داده شده.درستتمام عبارات بولینمتغیرهایی که پس از ارزیابی عبارت داده شده، با فرض درست بودن عبارت، قطعاً اختصاص داده می‌شوند.نادرستتمام عبارات بولینمتغیرهایی که قطعاً پس از ارزیابی عبارت، با فرض نادرست بودن عبارت، تخصیص داده می شوند. | ## بخش 3: آنالیز تخصیص قطعی | ما معادلات جریان داده را ارائه می کنیم که مقادیر این توابع را در عبارات مختلف بر حسب مقادیر توابع در زیرعبارات نحوی آن‌ها تعریف می‌کند. به عبارت دیگر، اگر e مقدار «نادرست» را بگیرد، همه‌ی متغیرها (به صورت خالی) به طور قطعی اختصاص داده می شوند، زیرا e مقدار «نادرست» را نگرفته است. تأیید کننده به طور مکرر روی درخت نحو انتزاعی مرور می‌کند و از معادلات جریان داده برای انتقال اطلاعات بین مجموعه‌ها استفاده می‌کند تا به یک نقطه ثابت برسد. سپس، تأییدکننده مجموعه‌ی «قبل»، از هر عبارتی که از متغیر محلی استفاده می‌کند، بررسی می‌کند تا مطمئن شود که حاوی آن متغیر است. هر عبارتی که می‌تواند هدف یکی از این پرش‌ها باشد، باید مجموعه‌ی «قبل» خود را با مجموعه متغیرهای قطعی اختصاص داده شده در منبع پرش، تقاطع بدهد. با این حال، می‌توان نشان داد که به دلیل شکل یکنواخت معادلات جریان داده، یک نقطه ثابت ماکسیمال منحصر به فرد (نقطه ثابت با بزرگترین اندازه) وجود دارد که بیشترین اطلاعات ممکن را در مورد متغیرهای قطعی اختصاص داده شده ارائه می‌دهد. چنین ماکسیمال (یا ماکسیمم) نقطه ثابت ممکن است با تکنیک‌های استاندارد محاسبه شود. | ## جمع‌بندی | یک مسئله دیگر این است که یک پرش جریان کنترلی ممکن است برخی جریان‌های کنترلی را غیرممکن کند.