بوت‌استرپینگ (کامپایلر) کیست؟ توضیح بده.
بوت‌استرپ جزو آن دسته از واژه‌هایی است که در حوزه‌های مختلفی وارد شده و از این رو معانی و تفسیرهای متفاوتی برای آن وجود دارد. اما به‌طور کلی منظور از بوت‌استرپ فرایندی خود راه‌انداز است که بدون ورودی بیرونی عمل می‌کند. در فناوری رایانه از این اصطلاح (با اختصار بوت شدن) معمولاً برای اشاره به فرایند بارگذاری نرم‌افزار پایه در حافظه یک رایانه پس از روشن شدن آن، به خصوص در مورد سیستم عامل استفاده می‌شود. سپس سیستم عامل مسئولیت بارگذاری نرم‌افزارهای مورد نیاز را بر عهده می‌گیرد.پیشینه و منشأ اصطلاح بوت استرپ.به‌طور گسترده‌ای گفته می‌شود که استعاره "bootstrap" از داستان افسانه ای بارون مونکوزن سرچشمه گرفته‌است که وی با کشیدن موهای سر خودش، توانست خودش و اسبش را از یک باتلاق بیرون بکشد.در یکی از تمرینات پایان فصل یک کتاب معروف و قدیمی (۱۹۸۸) فیزیک مدرسه ای پرسیده شده: ((چرا یک مرد نمی‌تواند خود را از روی زمین با کشیدن بندهای کفش خودش بلند کند؟))Bootstrap یا bootstrapping عملی است که از این گفته به دست می‌آید: «تا خود را با استفاده از بندهای چکمه خود از روی زمین بلند کنید.» اصطلاحات دلالت بر این دارند که شخص خودکفا است و نیازی به کمک دیگران ندارد.چکمه‌ها (بوت) معمولاً یک حلقه (استرپ) یا دستگیره در بخش فوقانی خود دارند که به نام بوت‌استرپ نامیده می‌شود و به فرد اجازه می‌دهد که با استفاده از انگشت یا وسیله دیگری بوت‌ها را از زمین بردارد. اصطلاحی در قرن نوزدهم به خصوص در ایالات‌متحده رواج داشت که «کسی را به وسیله بوت‌استرپ از روی زمین برداریم» و اشاره به کاری ناشدنی داشت. بدین ترتیب از بوت‌استرپ به عنوان استعاره‌ای برای بهبود دادن چیزی بدون کمک بیرونی استفاده می‌شود؛ که این معنی اخیر در قرن بیستم رواج بیشتری داشت.کاربردهای بوت استرپ.همان‌طور که اشاره کردیم اصطلاح بوت استرپ گستره بوده و معنایی بسیار وسیعی دارد که بسته به رشته‌ای که مورد استفاده قرار می‌گیرد، متفاوت خواهد بود. در ادامه معنی این واژه در برخی حوزه‌های مهم‌تر را بررسی می‌کنیم.بوت‌استرپ در زمینه علوم رایانه.بوت‌استرپ در علوم رایانه در بخش‌های بوت شدن رایانه، در زمینه توسعه نرم‌افزار، در کامپایلرها، نصاب‌ها، شبکه‌های همپوشان، پیش‌بینی رویدادهای گسسته و هوش مصنوعی/یادگیری ماشین کاربرد دارد.بوت شدن رایانه.بوت شدن فرایندی است که در طی آن یک رایانه آغاز به کار می‌کند و به‌طور خاص به راه‌اندازی نرم‌افزارهای آن اشاره دارد. این فرایند شامل زنجیره‌ای از مراحل است که در طی آن یک برنامه کوچک و ساده بارگذاری می‌شود و سپس برنامه‌های بزرگ‌تر و پیچیده‌تر را در مرحله بعدی راه‌اندازی می‌کند. در این معنی رایانه‌ها خود را به کمک بوت‌استرپ (در معنی لغوی) بالا می‌کشند، یعنی خود را به کمک تلاش‌های خودشان بهبود می‌بخشند. بوت شدن به معنی اجرای زنجیره‌ای رویدادها است که با اجرای رویه‌های مبتنی بر سخت‌افزار آغاز می‌شود و سپس هدایت سیستم به فیرمویر و نرم‌افزاری که در حافظه اصلی بارگذاری شده‌است، سپرده می‌شود. بوت شدن غالباً شامل فرایندهایی مانند اجرای تست از خود (self-test)، بارگذاری تنظیمات پیکربندی، بارگذاری یک BIOS، رصدگرهای مقیم حافظه ()، هایپروایزر (Hypervisor)، سیستم عامل یا نرم‌افزار کاربردی است.اصطلاح رایانه‌ای بوت‌استرپ در دهه ۱۹۵۰ میلادی به عنوان یک استعاره مطرح شد. در آن زمان در رایانه‌ها با فشردن دکمه بوت‌استرپ، یک مدار سخت‌افزاری، برنامه بوت‌استرپ را از یک واحد ورودی می‌خواند. سپس رایانه برنامه بوت‌استرپ را اجرا کرده و در ادامه دستورالعمل‌های بیشتری از برنامه را می‌توانست بخواند. این یک فرایند خودبسنده بود که بدون کمک بیرونی و با استفاده از دستورالعمل‌هایی که به صورت دستی وارد می‌شدند صورت می‌گرفت. این اصطلاح به عنوان یک اصطلاح رایانه‌ای دست کم از سال ۱۹۵۳ مورد استفاده قرار می‌گیرد.توسعه نرم‌افزار.بوت‌استرپ می‌تواند به توسعه محیط‌های متوالیاً پیچیده‌تر و سریع‌تر برنامه‌نویسی نیز اشاره کند. ساده‌ترین محیط احتمالاً یک ویرایشگر متنی بسیار ساده و یک برنامه اسمبلر خواهد بود. با استفاده از این ابزارها فرد می‌تواند ویرایشگر متنی پیچیده‌تر و یک کامپایلر ساده برای زبان سطح بالاتر بنویسد و این فرایند همین‌طور ادامه می‌یابد تا این که می‌توان یک IDEگرافیکی و زبان برنامه‌نویسی کاملاً سطح بالا ایجاد کرد.از نظر تاریخی بوت‌استرپ به تکنیکی ابتدایی برای توسعه برنامه‌های رایانه‌ای نیز اشاره دارد که با استفاده از کامپایلر متقابل که توسط یک رایانه از قبل موجود اجرا می‌شد، جایگزین شده‌است. بوت‌استرپ در زمینه توسعه برنامه در طی دهه ۱۹۵۰ میلادی آغاز شد، یعنی زمانی که هر برنامه‌ای بر روی کاغذ و با استفاده از کد ده‌دهی یا در کدباینری به صورت بیت به بیت (۱ و ۰ها) طراحی می‌شد. در این زمان هیچ زبان رایانه‌ای سطح بالایی وجود نداشت، همچنین هیچ کامپایلر، اسمبلر ولینکر نیز موجود نبود. یک برنامه اسمبلر کوچک که چندین دستورالعمل را به کد باینری یا ده‌دهی تبدیل می‌کرد A1 نام داشت. این برنامه اسمبلر کوچک در ادامه در زبانی که اسمبلی نامیده می‌شد، بازنویسی شد؛ اما این بار افزونه‌هایی داشت که امکان استفاده از برخی نمانیک‌ها (Mnemonic) را برای کدهای عملیات‌های پیچیده‌تر فراهم می‌ساخت.این برنامه منبع اسمبلر در ادامه به وسیله نسخه اجرایی قبلی خود (A1) به کد ده‌دهی و باینری اسمبل شد تا A2 متولد شود. این چرخه ادامه یافت و بهبودهایی در این برنامه نیز حاصل شد تا این که کل مجموعه دستورالعمل‌ها کد شدند، آدرس‌های برنچ به‌طور خودکار محاسبه شدند و مواد دیگر (مانند اسمبلی شرطی، ماکروها،اپتیمیزیشن‌ها و غیره) نیز تسهیل شدند. بدین ترتیب نخستین برنامه اسمبلی که اختصار عبارت برنامه اسمبلی اپتیمال نمادین () بود توسعه یافت. در ادامه کامپایلرها، لودرها و نرم‌افزارهای کاربردی به زبان اسمبلی کدنویسی شدند و فرایند بوت‌استرپ با توسعه سیستم‌های نرم‌افزاری پیچیده با استفاده از نرم‌افزارهای ساده‌تر ادامه یافت.این اصطلاح از سوی داگ انگلبرت (Doug Engelbart) برای اشاره به اعتقادی استفاده شد که سازمان‌های مختلف می‌توانند با بهبود فرایندهایی که برای بهینه‌سازی استفاده می‌کنند، خود را بهبود بخشند.کامپایلرها.توسعه کامپایلرها برای زبان‌های جدید برنامه‌نویسی نخستین بار در یک زبان موجود توسعه یافت؛ اما پس از آن در یک زبان جدید نوشته شد و توسط خودش کامپایل شد که نماد دیگری از بوت‌استرپ محسوب می‌شود. استفاده از یک زبان موجود برای بوت‌استرپ کردن یک زبان جدید روشی برای حل پارادوکس علیت، «اول مرغ بود یا تخم‌مرغ؟» است. در بخش انتهای این نوشته، فرایند تاریخی بوت‌استرپ در کامپایلرها به تفصیل مورد بحث و بررسی قرار گرفته‌است.نصاب‌ها.در طی نصب برنامه‌های کامپایلر برخی اوقات لازم است که برنامه نصب کننده یا نرم‌افزار مدیریت بسته‌ها خودش به‌روزرسانی شود. الگوی رایج برای انجام این کار استفاده از یک فایل بوت‌استرپ کوچک مثلاً (setup.exe) است که نصاب را به‌روزرسانی می‌کند و فرایند نصب واقعی را پس از به‌روزرسانی آغاز می‌کند. برخی اوقات فایل بوت‌استرپ کننده، خود پیش‌نیازهای دیگری که برای نرم‌افزار لازم است را در طی فرایند بوت‌استرپ کردن نصب می‌کند.شبکه‌های همپوشان.یک گره بوت‌استرپ که به نام میزبان تلاقی (rendezvous host) نیز نامیده می‌شود.گرهی در یک شبکه همپوشان است که اطلاعات پیکربندی اولیه را به گره‌های اخیراً ملحق شده ارسال می‌کند به طوری که بتوانند به‌طور موفقیت‌آمیزی به شبکه همپوشان ملحق شوند.شبیه‌سازی رویدادهای گسسته.نوعی از شبیه‌سازی رایانه‌ای به نام «شبیه‌سازی رویداد گسسته» (discrete event simulation) وجود دارد که عملیات‌های یک سیستم را به صورت یک توالی زمانی از رویدادها نشان می‌دهد. مدل شبیه‌سازی از تکنیکی که بوت‌استرپینگ نامیده می‌شود، استفاده کرده و نقاط داده‌ای اولیه را با استفاده از تولیدکننده عدد شبه تصادفی برای زمان‌بندی مجموعه اولیه رویدادهای در انتظار بوت‌استرپ می‌کند. این رویدادهای اولیه سپس رویدادهای دیگری را زمان‌بندی می‌کنند و در طی زمان رویکردهای زمانی رویدادها به وضعیت پایدار خود می‌رسد. رفتار بوت‌استرپ هنگامی که رفتار وضعیت پایدار حاصل شود، کنار زده می‌شود.هوش مصنوعی و یادگیری ماشین.بوت‌استرپ تکنیکی است که برای بهبود مکرر عملکرد یک الگوریتم طبقه‌بندی استفاده می‌شود. هوش مصنوعی Seed، نوعی از هوش مصنوعی است که فرض می‌شود توانایی خود-بهینه‌سازی بازگشتی دارد. بدین ترتیب چنین سیستمی با استفاده از قابلیت خود-بهینه‌سازی می‌تواند به تدریج خود را بهبود بخشد و به‌طور بالقوه افزایشی نمایی در هوش داشته باشد. تاکنون یک چنین هوش مصنوعی شناخته نشده‌است؛ اما یکی از حوزه‌های فعال تحقیقاتی محسوب می‌شود.هوش مصنوعی Seed بخش مهمی از برخی نظریه‌ها در مورد تکینگی فناوری است. طرفداران این نظریه بر این باورند که توسعه هوش مصنوعی Seed، به سرعت موجب ظهور هوش‌هایی به مراتب قوی‌تر (از طریق بوت‌استرپ شدن) خواهد شد و از این رو عصر جدیدی آغاز خواهد شد.آمار.بوت‌استرپ تکنیکی برای نمونه‌سازی مجدد است که برای به دست آوردن تخمین‌هایی از آماره‌های خلاصه استفاده می‌شود.بوت‌استرپ در تجارت به معنی آغاز یک کسب و کار بدون کمک یا سرمایه بیرونی است. چنین استارتاپ‌هایی هزینه توسعه شرکت خود را از طریق گردش نقدی درونی تأمین می‌کنند و هزینه‌های خود را به دقت کنترل می‌کنند.به‌طور کلی افراد برای آغاز کردن یک کسب و کار نوپا، مبلغ کمی از پول را برای فرایند بوت‌استرپ کنار می‌گذارند.بوت‌استرپ کردن می‌تواند به عنوان مکملی برای مدل اقتصادسنجی نیز استفاده شود.زیست‌شناسی.ریچارد داوکینز در کتاب خود با عنوان «رودی از عدن» (River Out of Eden) از مفهوم بوت‌استرپ در رایانه برای توضیح تمییز زیست‌شناختی سلول‌ها استفاده کرده‌است: «سلول‌های مختلف ترکیب‌های متفاوتی از مواد شیمیایی دریافت می‌کنند که باعث می‌شود ترکیب‌های گوناگونی از ژن‌ها فعال شوند و برخی ژن‌ها تلاش کنند تا ژن‌های دیگر را روشن یا خاموش کنند. بدین ترتیب بوت‌استرپ ادامه می‌یابد تا این که مجموعه کاملی از انواع مختلفی از سلول‌ها را به دست می‌آوریم.»تبارزایش (فیلوژنتیک).تحلیل بوت‌استرپینگ روشی جهت داوری در مورد قدرت پشتیبانی برای کلادهایی روی درخت تبار زایی است. عددی که روی هر گره نوشته می‌شود نشان‌دهنده درصد درختان بوت‌استرپی است که آن کلاد را در نقاط انتهایی شاخه نمایندگی می‌کنند.حقوق (قانون).بوت‌استرپ در حقوق به معنی جلوگیری از پذیرش شهادت سماعی در پرونده‌های کیفری است.زبان‌شناسی.در زبان‌شناسی بوت‌استرپ به معنی نظریه‌ای در زمینه اکتساب زبان است.فیزیک.نظریه کوانتوم: بوت‌استرپ در نظریه کوانتوم به معنی یک معیار بسیار عمومی سازگاری برای تعیین شکل یک نظریه کوانتوم از روی برخی فرضیه‌ها در مورد طیف ذرات یا اپراتورها است.الکترونیک.بوت‌استرپ شکلی از فیدبک مثبت در طراحی مدارهای آنالوگ محسوب می‌شود. همچنین در زمینه شبکه‌های برق می‌دانیم که یک شبکه توزیع توان تقریباً هرگز عامدانه قطع نمی‌شود. ژنراتورها و ایستگاه‌های برق در موارد لزوم آغاز به کار کرده یا کار خود را خاتمه می‌دهند. یک ایستگاه برق معمولی برای این که بتواند برق تولید کند باید اول برق را دریافت کند. این برق از شبکه تأمین می‌شود و از این رو در مواردی که کل شبکه از کار بیفتد این ایستگاه‌های منفرد نمی‌تواند شروع به کار کنند.بدین ترتیب برای آغاز به کار شبکه باید دست کم‌تعداد اندکی از ایستگاه‌های برق برحسب توان خودشان آغاز به کار کنند. در فرایندی که آغاز سیاه نامیده می‌شود، یک ایستگاه برق بدون تکیه بر توان بیرونی شروع به کار می‌کند. در غیاب برق در شبکه یک یا چند ایستگاه سیاه باید شبکه را بوت‌استرپ کنند.شبکه‌های تلفن همراه.در شبکه‌های تلفن همراه یک فانکشن سرور بوت‌استرپ (BSF) عنصری مقدماتی است که کارکردهای مستقل کاربردی را برای احراز هویت متقابل تجهیزات کاربر و سرورهایی که برای هم ناشناس هستند فراهم می‌کند و بدین ترتیب مبادله کلیدهای سِشِن رمزی متعاقب را بوت‌استرپ می‌کند. اصطلاح بوت‌استرپ به فرایندی اشاره می‌کند که در آن ابتدا یک رابطه امن با دستگاه ناشناس قبلی ایجاد شده و سپس امکان نصب عناصر امنیتی (کلیدها) در دستگاه و BSF متعاقباً ایجاد می‌شود.رسانه.منظور از بوت‌استرپ در یک رسانه فرایندی است که از طریق آن یک داستان خبری عامدانه (اما به‌طور ساختگی) از طریق ژورنالیسم خود-ارجاع یا ارجاع به همتا ساخته می‌شود. ریشه این داستان در حلقه محدودی از سازندگان اصلی محتوای رسانه‌ای است که غالباً آن داستان را درون همان سازمان می‌نویسند. سپس این داستان به صورت «منطق پذیرفته شده» به رسانه‌های عمومی گسترش می‌یابد و هدف از این کار آن است که این مسئله به صورت یک «مسئله پذیرفته شده» از سوی عموم خوانندگان و بینندگان قبول شود. ویژگی اصلی بوت‌استرپ در رسانه این است که از آنجا که شواهد اندک و به سختی قابل اثباتی از بیرون برای پشتیبانی از آن استفاده می‌شود، ترجیح داده می‌شود که از استناد به داستان‌های رسانه‌های دیگر استفاده شود یعنی «ژورنالیست‌هایی که با ژورنالیست‌های دیگر مصاحبه می‌کنند.»از آنجا که این کمپین به‌طور معمول از سوی حلقه محدودی از گزارشگران و کارشناسان در یک سازمان رسانه‌ای آغاز می‌شود و برنامه مشخصی برای آن طراحی شده‌است، گفته می‌شود که «این کمپین از سوی بوت‌استرپ (معنی لغوی)های خودش بالا کشیده می‌شود.»کاربرد بوت‌استرپ در کامپایلرها.یکی از مهم‌ترین حوزه‌هایی که در علوم رایانه از مفهوم بوت‌استرپ کمک گرفته، طراحی کامپایلرها است. منظور از بوت‌استرپ در کامپایلرها، کامپایلری است که بتواند خودش را کامپایل کند؛ یعنی کامپایلر (یا اسمبلر) به یک زبان برنامه‌نویسی نوشته شده باشد که باید آن را کامپایل کند. نسخه اولیه‌ای از چنین کامپایلری (کامپایلر بوت‌استرپ) در زبان دیگری ایجاد می‌شود (که می‌تواند زبان اسمبلی باشد)؛ سپس نسخه‌های توسعه یافته بعدی از کامپایلر با استفاده از زیرمجموعه محدودی از آن زبان توسعه می‌یابند.بسیاری از کامپایلرها در زبان‌های برنامه‌نویسی مختلف بوت‌استرپ شده‌اند که فهرستی طولانی شامل زبان‌هایBASIC ,ALGOL ,C ,D ,Pascal ,PL/I ,Factor ,Haskell ,Modula-2 ,OCaml ,Common Lisp ,Scheme ,Go ,Java ,Rust ,Python ,Scala ,Eiffel , و غیره را شامل می‌شود.مزیت‌های بوت‌استرپ کردن کامپایلر.بوت‌استرپ کردن یک کامپایلر مزیت‌های زیر را دارد:توجه داشته باشید که در برخی از این نکات فرض شده‌است که کد زمان اجرای زبان برنامه‌نویسی نیز به همان زبان نوشته شده‌است.مسئله مرغ و تخم مرغ.اگر کسی بخواهد کامپایلری برای زبان x کامپایل کند (که به زبان x نوشته شده‌است) این مشکل پیش می‌آید که خود کامپایلر چگونه باید کامپایل شود. روش‌های مختلفی در عمل برای حل این مشکل «مرغ و تخم‌مرغ» استفاده شده‌اند که برخی از آن‌ها شامل موارد زیر هستند:روش توزیع کامپایلرها در کد منبع شامل ارائه نسخه پرتابلی از بایت‌کد آن کامپایلر است، به طوری که بوت‌استرپ به فرایند کامپایل کردن کامپایلر با خودش تبدیل می‌شود. نمودار T یک نمادگذاری است که برای اغلب این تکنیک‌های بوت‌استرپ کامپایلر استفاده می‌شود. در برخی موارد آسان‌ترین راه برای واداشتن یک کامپایلر پیچیده به اجرای سیستمی که نرم‌افزاری روی آن وجود ندارد یا اندک است، شامل یک سری از اسمبلرها و کامپایلرهای پیچیده‌تر است.تاریخچه بوت‌استرپ کردن کامپایلرها.اسمبلرها نخستین ابزارهای زبانی بودند که خودشان را بوت‌استرپ می‌کردند. نخستین زبان سطح بالای برنامه‌نویسی که چنین بوت‌استرپی را ارائه می‌داد ENLIAC در سال ۱۹۵۸ بود. نخستین زبان‌هایی که به‌طور گسترده از این روش استفاده کردند، زبان Algol از شرکت Burroughs B5000 در سال ۱۹۶۱ و زبان LISP در سال ۱۹۶۲ بودند.هارت (Tim Hart) و لوین (Mike Levin) یک کامپایلر لیسپ را در دانشگاه MIT در سال ۱۹۶۲ نوشتند و آن را درون یک مفسر موجود لیسپ تست کردند. زمانی که آن‌ها کامپایلر را تا نقطه‌ای بهبود دادند که بتواند کد خود را کامپایل کند، تبدیل به یک کامپایلر بوت‌استرپ شد.این تکنیک تنها زمانی ممکن است که یک مفسر از قبل، در همان زمان یا زبان کاملاً مشابه که قرار است کامپایل شود، وجود داشته باشد.