موضوع مقاله: بوت‌استرپینگ (کامپایلر) | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # بوت‌استرپینگ (کامپایلر) | مقدمه: بوت‌استرپ جزو آن دسته از واژه‌هایی است که در حوزه‌های مختلفی وارد شده و از این رو معانی و تفسیرهای متفاوتی برای آن وجود دارد. | ## بخش 1: بوت‌استرپینگ (کامپایلر) | اما به‌طور کلی منظور از بوت‌استرپ فرایندی خود راه‌انداز است که بدون ورودی بیرونی عمل می‌کند. در فناوری رایانه از این اصطلاح (با اختصار بوت شدن) معمولاً برای اشاره به فرایند بارگذاری نرم‌افزار پایه در حافظه یک رایانه پس از روشن شدن آن، به خصوص در مورد سیستم عامل استفاده می‌شود. در یکی از تمرینات پایان فصل یک کتاب معروف و قدیمی (۱۹۸۸) فیزیک مدرسه ای پرسیده شده: چرا یک مرد نمی‌تواند خود را از روی زمین با کشیدن بندهای کفش خودش بلند کند؟ اصطلاحی در قرن نوزدهم به خصوص در ایالات‌متحده رواج داشت که «کسی را به وسیله بوت‌استرپ از روی زمین برداریم» و اشاره به کاری ناشدنی داشت. بدین ترتیب از بوت‌استرپ به عنوان استعاره‌ای برای بهبود دادن چیزی بدون کمک بیرونی استفاده می‌شود؛ که این معنی اخیر در قرن بیستم رواج بیشتری داشت. معانی بسیار متفاوت بوت استرپ در حوزه‌های مختلف بوت‌استرپ (فریمورک فرانت-اند): یک مجموعه از ابزارها برای ایجاد وب‌سایت و اپلیکیشن‌های وب برنامه درسی بوت‌استرپ:نوعی برنامه درسی است که در آن از برنامه‌نویسی رایانه برای آموزش جبر به دانش آموزان در سنین بین ۱۲ تا ۱۶ سال استفاده می‌شود. مدل بوت‌استرپ: روشی ریاضی برای محدودسازی و حل مدل‌ها در فیزیک ذرات بوت‌استرپینگ(کامپایلر): فرایند نوشتن یک کامپایلر در آن زبان برنامه‌نویسی که قرار است آن را کامپایل کند. بوت‌استرپینگ (حقوق): یکی از مقررات پیشین در دادگاه‌های کیفری فدرال بوت‌استرپینگ (زبانشناسی): اصطلاحی که در فرایند یادگیری زبان استفاده می‌شود. بوت‌استرپینگ (آمار): روشی که برای انتساب معیار صحت به تخمین‌های نمونه آماری استفاده می‌شود. کاربردهای بوت استرپ همان‌طور که اشاره کردیم اصطلاح بوت استرپ گستره بوده و معنایی بسیار وسیعی دارد که بسته به رشته‌ای که مورد استفاده قرار می‌گیرد، متفاوت خواهد بود. بوت‌استرپ در زمینه علوم رایانه بوت‌استرپ در علوم رایانه در بخش‌های بوت شدن رایانه، در زمینه توسعه نرم‌افزار، در کامپایلرها، نصاب‌ها، شبکه‌های همپوشان، پیش‌بینی رویدادهای گسسته و هوش مصنوعی/یادگیری ماشین کاربرد دارد. این فرایند شامل زنجیره‌ای از مراحل است که در طی آن یک برنامه کوچک و ساده بارگذاری می‌شود و سپس برنامه‌های بزرگ‌تر و پیچیده‌تر را در مرحله بعدی راه‌اندازی می‌کند. در این معنی رایانه‌ها خود را به کمک بوت‌استرپ (در معنی لغوی) بالا می‌کشند، یعنی خود را به کمک تلاش‌های خودشان بهبود می‌بخشند. بوت شدن به معنی اجرای زنجیره‌ای رویدادها است که با اجرای رویه‌های مبتنی بر سخت‌افزار آغاز می‌شود و سپس هدایت سیستم به فیرمویر و نرم‌افزاری که در حافظه اصلی بارگذاری شده‌است، سپرده می‌شود. در آن زمان در رایانه‌ها با فشردن دکمه بوت‌استرپ، یک مدار سخت‌افزاری، برنامه بوت‌استرپ را از یک واحد ورودی می‌خواند. سپس رایانه برنامه بوت‌استرپ را اجرا کرده و در ادامه دستورالعمل‌های بیشتری از برنامه را می‌توانست بخواند. این یک فرایند خودبسنده بود که بدون کمک بیرونی و با استفاده از دستورالعمل‌هایی که به صورت دستی وارد می‌شدند صورت می‌گرفت. این اصطلاح به عنوان یک اصطلاح رایانه‌ای دست کم از سال ۱۹۵۳ مورد استفاده قرار می‌گیرد. توسعه نرم‌افزار بوت‌استرپ می‌تواند به توسعه محیط‌های متوالیاً پیچیده‌تر و سریع‌تر برنامه‌نویسی نیز اشاره کند. ساده‌ترین محیط احتمالاً یک ویرایشگر متنی بسیار ساده و یک برنامه اسمبلر خواهد بود. از نظر تاریخی بوت‌استرپ به تکنیکی ابتدایی برای توسعه برنامه‌های رایانه‌ای نیز اشاره دارد که با استفاده از کامپایلر متقابل که توسط یک رایانه از قبل موجود اجرا می‌شد، جایگزین شده‌است. بوت‌استرپ در زمینه توسعه برنامه در طی دهه ۱۹۵۰ میلادی آغاز شد، یعنی زمانی که هر برنامه‌ای بر روی کاغذ و با استفاده از کد ده‌دهی یا در کد باینری به صورت بیت به بیت (۱ و ۰ها) طراحی می‌شد. در این زمان هیچ زبان رایانه‌ای سطح بالایی وجود نداشت، همچنین هیچ کامپایلر، اسمبلر و لینکر نیز موجود نبود. یک برنامه اسمبلر کوچک که چندین دستورالعمل را به کد باینری یا ده‌دهی تبدیل می‌کرد A1 نام داشت. این برنامه منبع اسمبلر در ادامه به وسیله نسخه اجرایی قبلی خود (A1) به کد ده‌دهی و باینری اسمبل شد تا A2 متولد شود. | ## بخش 2: بوت‌استرپینگ (کامپایلر) | این چرخه ادامه یافت و بهبودهایی در این برنامه نیز حاصل شد تا این که کل مجموعه دستورالعمل‌ها کد شدند، آدرس‌های برنچ به‌طور خودکار محاسبه شدند و مواد دیگر (مانند اسمبلی شرطی، ماکروها، اپتیمیزیشن‌ها و غیره) نیز تسهیل شدند. در ادامه کامپایلرها، لودرها و نرم‌افزارهای کاربردی به زبان اسمبلی کدنویسی شدند و فرایند بوت‌استرپ با توسعه سیستم‌های نرم‌افزاری پیچیده با استفاده از نرم‌افزارهای ساده‌تر ادامه یافت. این اصطلاح از سوی داگ انگلبرت (Doug Engelbart) برای اشاره به اعتقادی استفاده شد که سازمان‌های مختلف می‌توانند با بهبود فرایندهایی که برای بهینه‌سازی استفاده می‌کنند، خود را بهبود بخشند. کامپایلرها توسعه کامپایلرها برای زبان‌های جدید برنامه‌نویسی نخستین بار در یک زبان موجود توسعه یافت؛ اما پس از آن در یک زبان جدید نوشته شد و توسط خودش کامپایل شد که نماد دیگری از بوت‌استرپ محسوب می‌شود. استفاده از یک زبان موجود برای بوت‌استرپ کردن یک زبان جدید روشی برای حل پارادوکس علیت، «اول مرغ بود یا تخم‌مرغ؟» است. در بخش انتهای این نوشته، فرایند تاریخی بوت‌استرپ در کامپایلرها به تفصیل مورد بحث و بررسی قرار گرفته‌است. نصاب‌ها در طی نصب برنامه‌های کامپایلر برخی اوقات لازم است که برنامه نصب کننده یا نرم‌افزار مدیریت بسته‌ها خودش به‌روزرسانی شود. الگوی رایج برای انجام این کار استفاده از یک فایل بوت‌استرپ کوچک مثلاً (setup.exe) است که نصاب را به‌روزرسانی می‌کند و فرایند نصب واقعی را پس از به‌روزرسانی آغاز می‌کند. برخی اوقات فایل بوت‌استرپ کننده، خود پیش‌نیازهای دیگری که برای نرم‌افزار لازم است را در طی فرایند بوت‌استرپ کردن نصب می‌کند. گرهی در یک شبکه همپوشان است که اطلاعات پیکربندی اولیه را به گره‌های اخیراً ملحق شده ارسال می‌کند به طوری که بتوانند به‌طور موفقیت‌آمیزی به شبکه همپوشان ملحق شوند.Traversat; et al. مدل شبیه‌سازی از تکنیکی که بوت‌استرپینگ نامیده می‌شود، استفاده کرده و نقاط داده‌ای اولیه را با استفاده از تولیدکننده عدد شبه تصادفی برای زمان‌بندی مجموعه اولیه رویدادهای در انتظار بوت‌استرپ می‌کند. این رویدادهای اولیه سپس رویدادهای دیگری را زمان‌بندی می‌کنند و در طی زمان رویکردهای زمانی رویدادها به وضعیت پایدار خود می‌رسد. هوش مصنوعی و یادگیری ماشین بوت‌استرپ تکنیکی است که برای بهبود مکرر عملکرد یک الگوریتم طبقه‌بندی استفاده می‌شود. هوش مصنوعی Seed، نوعی از هوش مصنوعی است که فرض می‌شود توانایی خود-بهینه‌سازی بازگشتی دارد. بدین ترتیب چنین سیستمی با استفاده از قابلیت خود-بهینه‌سازی می‌تواند به تدریج خود را بهبود بخشد و به‌طور بالقوه افزایشی نمایی در هوش داشته باشد. تاکنون یک چنین هوش مصنوعی شناخته نشده‌است؛ اما یکی از حوزه‌های فعال تحقیقاتی محسوب می‌شود. طرفداران این نظریه بر این باورند که توسعه هوش مصنوعی Seed، به سرعت موجب ظهور هوش‌هایی به مراتب قوی‌تر (از طریق بوت‌استرپ شدن) خواهد شد و از این رو عصر جدیدی آغاز خواهد شد. آمار بوت‌استرپ تکنیکی برای نمونه‌سازی مجدد است که برای به دست آوردن تخمین‌هایی از آماره‌های خلاصه استفاده می‌شود.Wu, C.F.J. چنین استارتاپ‌هایی هزینه توسعه شرکت خود را از طریق گردش نقدی درونی تأمین می‌کنند و هزینه‌های خود را به دقت کنترل می‌کنند. به‌طور کلی افراد برای آغاز کردن یک کسب و کار نوپا، مبلغ کمی از پول را برای فرایند بوت‌استرپ کنار می‌گذارند. زیست‌شناسی ریچارد داوکینز در کتاب خود با عنوان «رودی از عدن» (River Out of Eden) از مفهوم بوت‌استرپ در رایانه برای توضیح تمییز زیست‌شناختی سلول‌ها استفاده کرده‌است: «سلول‌های مختلف ترکیب‌های متفاوتی از مواد شیمیایی دریافت می‌کنند که باعث می‌شود ترکیب‌های گوناگونی از ژن‌ها فعال شوند و برخی ژن‌ها تلاش کنند تا ژن‌های دیگر را روشن یا خاموش کنند. عددی که روی هر گره نوشته می‌شود نشان‌دهنده درصد درختان بوت‌استرپی است که آن کلاد را در نقاط انتهایی شاخه نمایندگی می‌کنند. فیزیک نظریه کوانتوم: بوت‌استرپ در نظریه کوانتوم به معنی یک معیار بسیار عمومی سازگاری برای تعیین شکل یک نظریه کوانتوم از روی برخی فرضیه‌ها در مورد طیف ذرات یا اپراتورها است.G. همچنین در زمینه شبکه‌های برق می‌دانیم که یک شبکه توزیع توان تقریباً هرگز عامدانه قطع نمی‌شود. ژنراتورها و ایستگاه‌های برق در موارد لزوم آغاز به کار کرده یا کار خود را خاتمه می‌دهند. | ## بخش 3: بوت‌استرپینگ (کامپایلر) | یک ایستگاه برق معمولی برای این که بتواند برق تولید کند باید اول برق را دریافت کند. در فرایندی که آغاز سیاه نامیده می‌شود، یک ایستگاه برق بدون تکیه بر توان بیرونی شروع به کار می‌کند. اصطلاح بوت‌استرپ به فرایندی اشاره می‌کند که در آن ابتدا یک رابطه امن با دستگاه ناشناس قبلی ایجاد شده و سپس امکان نصب عناصر امنیتی (کلیدها) در دستگاه و BSF متعاقباً ایجاد می‌شود. رسانه منظور از بوت‌استرپ در یک رسانه فرایندی است که از طریق آن یک داستان خبری عامدانه (اما به‌طور ساختگی) از طریق ژورنالیسم خود-ارجاع یا ارجاع به همتا ساخته می‌شود. ریشه این داستان در حلقه محدودی از سازندگان اصلی محتوای رسانه‌ای است که غالباً آن داستان را درون همان سازمان می‌نویسند. سپس این داستان به صورت «منطق پذیرفته شده» به رسانه‌های عمومی گسترش می‌یابد و هدف از این کار آن است که این مسئله به صورت یک «مسئله پذیرفته شده» از سوی عموم خوانندگان و بینندگان قبول شود. منظور از بوت‌استرپ در کامپایلرها، کامپایلری است که بتواند خودش را کامپایل کند؛ یعنی کامپایلر (یا اسمبلر) به یک زبان برنامه‌نویسی نوشته شده باشد که باید آن را کامپایل کند. یک تست کامل از زبانی که قصد کامپایل داریم، اجرا می‌کند که نوعی استفاده مجدد از محصولات تولیدی محسوب می‌شود. توسعه‌دهندگان کامپایلر و بخش گزارش باگ جامعه تنها باید زبانی که کامپایل می‌شود را بدانند. توسعه کامپایلر را می‌توان در زبان سطح بالاتری از آن که قرار است کامپایل شود انجام داد. بهبود در بک‌اند کامپایلر نه تنها موجب بهبود برنامه‌های با هدف کلی می‌شود؛ بلکه خود کامپایلر را نیز بهینه‌سازی می‌کند. یک بررسی جامع سازگاری اجرا می‌شود، به طوری که تست می‌شود آیا می‌تواند کد خود را بازتولید کند. توجه داشته باشید که در برخی از این نکات فرض شده‌است که کد زمان اجرای زبان برنامه‌نویسی نیز به همان زبان نوشته شده‌است. روش‌های مختلفی در عمل برای حل این مشکل «مرغ و تخم‌مرغ» استفاده شده‌اند که برخی از آن‌ها شامل موارد زیر هستند: پیاده‌سازی یک مفسر یا کامپایلر برای زبان x در زبانy. نسخه‌های قبلی کامپایلر در زیرمجموعه‌ای از زبان x نوشته شده باشند که برای کامپایلر دیگری موجود باشد. برای مثال برخی از فرامجموعه‌های جاوا، هسکل و نخستین کامپایلر فری پاسکال بوت‌استرپ شده بودند. یک کامپایلر که از افزونه‌های زبان غیراستاندارد یا دیگر ویژگی‌های زبان اصلی پشتیبانی می‌کند را بدون استفاده از آن افزونه‌ها یا ویژگی‌ها می‌توان نوشت. بدین ترتیب امکان کامپایل کردن آن با کامپایلر دیگری که از همان زبان مبنا استفاده می‌کند؛ اما مجموعه متفاوتی از افزونه‌ها و ویژگی‌ها دارد، ممکن می‌شود. کامپایلر زبان x از معماری دیگری که برای یک کامپایلر X دارد، به صورت متقابل کامپایل شود. کامپایلر در زبان x نوشته شود، سپس به صورت دستی آن را از منبع کامپایل کنیم (که به احتمال زیاد روش بهینه‌ای نخواهد بود) و آن را روی کد اجرا کنیم تا یک کامپایلر بهینه به دست آوریم. روش توزیع کامپایلرها در کد منبع شامل ارائه نسخه پرتابلی از بایت‌کد آن کامپایلر است، به طوری که بوت‌استرپ به فرایند کامپایل کردن کامپایلر با خودش تبدیل می‌شود. نمودار T یک نمادگذاری است که برای اغلب این تکنیک‌های بوت‌استرپ کامپایلر استفاده می‌شود. نخستین زبان سطح بالای برنامه‌نویسی که چنین بوت‌استرپی را ارائه می‌داد ENLIAC در سال ۱۹۵۸ بود. زمانی که آن‌ها کامپایلر را تا نقطه‌ای بهبود دادند که بتواند کد خود را کامپایل کند، تبدیل به یک کامپایلر بوت‌استرپ شد. | ## جمع‌بندی | این تکنیک تنها زمانی ممکن است که یک مفسر از قبل، در همان زمان یا زبان کاملاً مشابه که قرار است کامپایل شود، وجود داشته باشد.