بوت‌استرپینگ (کامپایلر)

از ویکی‌پدیا، دانشنامهٔ آزاد

بوت‌استرپ (به انگلیسی: bootstrapping) جزو آن دسته از واژه‌هایی است که در حوزه‌های مختلفی وارد شده و از این رو معانی و تفسیرهای متفاوتی برای آن وجود دارد. اما به‌طور کلی منظور از بوت‌استرپ فرایندی خود راه‌انداز است که بدون ورودی بیرونی عمل می‌کند. در فناوری رایانه از این اصطلاح (با اختصار بوت شدن) معمولاً برای اشاره به فرایند بارگذاری نرم‌افزار پایه در حافظه یک رایانه پس از روشن شدن آن، به خصوص در مورد سیستم عامل استفاده می‌شود. سپس سیستم عامل مسئولیت بارگذاری نرم‌افزارهای مورد نیاز را بر عهده می‌گیرد.[۱][۲][۳]

پیشینه و منشأ اصطلاح بوت استرپ[ویرایش]

بارون مونکوزن با کشیدن موی‌های سر خودش، توانست خودش و اسبش را از باتلاق بیرون بکشد

به‌طور گسترده‌ای گفته می‌شود که استعاره "bootstrap" از داستان افسانه ای بارون مونکوزن سرچشمه گرفته‌است که وی با کشیدن موهای سر خودش، توانست خودش و اسبش را از یک باتلاق بیرون بکشد.[۱]

در یکی از تمرینات پایان فصل یک کتاب معروف و قدیمی (۱۹۸۸) فیزیک مدرسه ای پرسیده شده: ((چرا یک مرد نمی‌تواند خود را از روی زمین با کشیدن بندهای کفش خودش بلند کند؟))[۴]

Bootstrap یا bootstrapping عملی است که از این گفته به دست می‌آید: «تا خود را با استفاده از بندهای چکمه خود از روی زمین بلند کنید.» اصطلاحات دلالت بر این دارند که شخص خودکفا است و نیازی به کمک دیگران ندارد.[۵]

یک جفت چکمه به همراه یک بوت استرپ قابل مشاهده

چکمه‌ها (بوت) معمولاً یک حلقه (استرپ) یا دستگیره در بخش فوقانی خود دارند که به نام بوت‌استرپ نامیده می‌شود و به فرد اجازه می‌دهد که با استفاده از انگشت یا وسیله دیگری بوت‌ها را از زمین بردارد. اصطلاحی در قرن نوزدهم به خصوص در ایالات‌متحده رواج داشت که «کسی را به وسیله بوت‌استرپ از روی زمین برداریم» و اشاره به کاری ناشدنی داشت. بدین ترتیب از بوت‌استرپ به عنوان استعاره‌ای برای بهبود دادن چیزی بدون کمک بیرونی استفاده می‌شود؛ که این معنی اخیر در قرن بیستم رواج بیشتری داشت.[۲]

معانی بسیار متفاوت بوت استرپ در حوزه‌های مختلف[ویرایش]

کاربردهای بوت استرپ[ویرایش]

همان‌طور که اشاره کردیم اصطلاح بوت استرپ گستره بوده و معنایی بسیار وسیعی دارد که بسته به رشته‌ای که مورد استفاده قرار می‌گیرد، متفاوت خواهد بود. در ادامه معنی این واژه در برخی حوزه‌های مهم‌تر را بررسی می‌کنیم.

بوت‌استرپ در زمینه علوم رایانه[ویرایش]

بوت‌استرپ در علوم رایانه در بخش‌های بوت شدن رایانه، در زمینه توسعه نرم‌افزار، در کامپایلرها، نصاب‌ها، شبکه‌های همپوشان، پیش‌بینی رویدادهای گسسته و هوش مصنوعی/یادگیری ماشین کاربرد دارد.

بوت شدن رایانه[ویرایش]

کدهای شانزده شانزدهی مربوط به بوت شدن FreeBSD

بوت شدن فرایندی است که در طی آن یک رایانه آغاز به کار می‌کند و به‌طور خاص به راه‌اندازی نرم‌افزارهای آن اشاره دارد. این فرایند شامل زنجیره‌ای از مراحل است که در طی آن یک برنامه کوچک و ساده بارگذاری می‌شود و سپس برنامه‌های بزرگ‌تر و پیچیده‌تر را در مرحله بعدی راه‌اندازی می‌کند. در این معنی رایانه‌ها خود را به کمک بوت‌استرپ (در معنی لغوی) بالا می‌کشند، یعنی خود را به کمک تلاش‌های خودشان بهبود می‌بخشند. بوت شدن به معنی اجرای زنجیره‌ای رویدادها است که با اجرای رویه‌های مبتنی بر سخت‌افزار آغاز می‌شود و سپس هدایت سیستم به فیرمویر و نرم‌افزاری که در حافظه اصلی بارگذاری شده‌است، سپرده می‌شود. بوت شدن غالباً شامل فرایندهایی مانند اجرای تست از خود (self-test)، بارگذاری تنظیمات پیکربندی، بارگذاری یک BIOS، رصدگرهای مقیم حافظه (resident monitor)، هایپروایزر (Hypervisor)، سیستم عامل یا نرم‌افزار کاربردی است.

اصطلاح رایانه‌ای بوت‌استرپ در دهه ۱۹۵۰ میلادی به عنوان یک استعاره مطرح شد. در آن زمان در رایانه‌ها با فشردن دکمه بوت‌استرپ، یک مدار سخت‌افزاری، برنامه بوت‌استرپ را از یک واحد ورودی می‌خواند. سپس رایانه برنامه بوت‌استرپ را اجرا کرده و در ادامه دستورالعمل‌های بیشتری از برنامه را می‌توانست بخواند. این یک فرایند خودبسنده بود که بدون کمک بیرونی و با استفاده از دستورالعمل‌هایی که به صورت دستی وارد می‌شدند صورت می‌گرفت. این اصطلاح به عنوان یک اصطلاح رایانه‌ای دست کم از سال ۱۹۵۳ مورد استفاده قرار می‌گیرد.[۶]

توسعه نرم‌افزار[ویرایش]

بوت‌استرپ می‌تواند به توسعه محیط‌های متوالیاً پیچیده‌تر و سریع‌تر برنامه‌نویسی نیز اشاره کند. ساده‌ترین محیط احتمالاً یک ویرایشگر متنی بسیار ساده و یک برنامه اسمبلر خواهد بود. با استفاده از این ابزارها فرد می‌تواند ویرایشگر متنی پیچیده‌تر و یک کامپایلر ساده برای زبان سطح بالاتر بنویسد و این فرایند همین‌طور ادامه می‌یابد تا این که می‌توان یک IDEگرافیکی و زبان برنامه‌نویسی کاملاً سطح بالا ایجاد کرد.[۷]

از نظر تاریخی بوت‌استرپ به تکنیکی ابتدایی برای توسعه برنامه‌های رایانه‌ای نیز اشاره دارد که با استفاده از کامپایلر متقابل که توسط یک رایانه از قبل موجود اجرا می‌شد، جایگزین شده‌است. بوت‌استرپ در زمینه توسعه برنامه در طی دهه ۱۹۵۰ میلادی آغاز شد، یعنی زمانی که هر برنامه‌ای بر روی کاغذ و با استفاده از کد ده‌دهی یا در کد باینری به صورت بیت به بیت (۱ و ۰ها) طراحی می‌شد. در این زمان هیچ زبان رایانه‌ای سطح بالایی وجود نداشت، همچنین هیچ کامپایلر، اسمبلر و لینکر نیز موجود نبود. یک برنامه اسمبلر کوچک که چندین دستورالعمل را به کد باینری یا ده‌دهی تبدیل می‌کرد A1 نام داشت. این برنامه اسمبلر کوچک در ادامه در زبانی که اسمبلی نامیده می‌شد، بازنویسی شد؛ اما این بار افزونه‌هایی داشت که امکان استفاده از برخی نمانیک‌ها (Mnemonic) را برای کدهای عملیات‌های پیچیده‌تر فراهم می‌ساخت.[۸]

این برنامه منبع اسمبلر در ادامه به وسیله نسخه اجرایی قبلی خود (A1) به کد ده‌دهی و باینری اسمبل شد تا A2 متولد شود. این چرخه ادامه یافت و بهبودهایی در این برنامه نیز حاصل شد تا این که کل مجموعه دستورالعمل‌ها کد شدند، آدرس‌های برنچ به‌طور خودکار محاسبه شدند و مواد دیگر (مانند اسمبلی شرطی، ماکروها، اپتیمیزیشن‌ها و غیره) نیز تسهیل شدند. بدین ترتیب نخستین برنامه اسمبلی SOAP که اختصار عبارت برنامه اسمبلی اپتیمال نمادین (Symbolic Optimal Assembly Program) بود توسعه یافت. در ادامه کامپایلرها، لودرها و نرم‌افزارهای کاربردی به زبان اسمبلی کدنویسی شدند و فرایند بوت‌استرپ با توسعه سیستم‌های نرم‌افزاری پیچیده با استفاده از نرم‌افزارهای ساده‌تر ادامه یافت.

این اصطلاح از سوی داگ انگلبرت (Doug Engelbart) برای اشاره به اعتقادی استفاده شد که سازمان‌های مختلف می‌توانند با بهبود فرایندهایی که برای بهینه‌سازی استفاده می‌کنند، خود را بهبود بخشند.

کامپایلرها[ویرایش]

توسعه کامپایلرها برای زبان‌های جدید برنامه‌نویسی نخستین بار در یک زبان موجود توسعه یافت؛ اما پس از آن در یک زبان جدید نوشته شد و توسط خودش کامپایل شد که نماد دیگری از بوت‌استرپ محسوب می‌شود. استفاده از یک زبان موجود برای بوت‌استرپ کردن یک زبان جدید روشی برای حل پارادوکس علیت، «اول مرغ بود یا تخم‌مرغ؟» است. در بخش انتهای این نوشته، فرایند تاریخی بوت‌استرپ در کامپایلرها به تفصیل مورد بحث و بررسی قرار گرفته‌است.

نصاب‌ها[ویرایش]

در طی نصب برنامه‌های کامپایلر برخی اوقات لازم است که برنامه نصب کننده یا نرم‌افزار مدیریت بسته‌ها خودش به‌روزرسانی شود. الگوی رایج برای انجام این کار استفاده از یک فایل بوت‌استرپ کوچک مثلاً (setup.exe) است که نصاب را به‌روزرسانی می‌کند و فرایند نصب واقعی را پس از به‌روزرسانی آغاز می‌کند. برخی اوقات فایل بوت‌استرپ کننده، خود پیش‌نیازهای دیگری که برای نرم‌افزار لازم است را در طی فرایند بوت‌استرپ کردن نصب می‌کند.

شبکه‌های همپوشان[ویرایش]

یک گره بوت‌استرپ که به نام میزبان تلاقی (rendezvous host) نیز نامیده می‌شود.[۹] گرهی در یک شبکه همپوشان است که اطلاعات پیکربندی اولیه را به گره‌های اخیراً ملحق شده ارسال می‌کند به طوری که بتوانند به‌طور موفقیت‌آمیزی به شبکه همپوشان ملحق شوند.[۱۰][۱۱]

شبیه‌سازی رویدادهای گسسته[ویرایش]

نوعی از شبیه‌سازی رایانه‌ای به نام «شبیه‌سازی رویداد گسسته» (discrete event simulation) وجود دارد که عملیات‌های یک سیستم را به صورت یک توالی زمانی از رویدادها نشان می‌دهد. مدل شبیه‌سازی از تکنیکی که بوت‌استرپینگ نامیده می‌شود، استفاده کرده و نقاط داده‌ای اولیه را با استفاده از تولیدکننده عدد شبه تصادفی برای زمان‌بندی مجموعه اولیه رویدادهای در انتظار بوت‌استرپ می‌کند. این رویدادهای اولیه سپس رویدادهای دیگری را زمان‌بندی می‌کنند و در طی زمان رویکردهای زمانی رویدادها به وضعیت پایدار خود می‌رسد. رفتار بوت‌استرپ هنگامی که رفتار وضعیت پایدار حاصل شود، کنار زده می‌شود.

هوش مصنوعی و یادگیری ماشین[ویرایش]

بوت‌استرپ تکنیکی است که برای بهبود مکرر عملکرد یک الگوریتم طبقه‌بندی استفاده می‌شود. هوش مصنوعی Seed، نوعی از هوش مصنوعی است که فرض می‌شود توانایی خود-بهینه‌سازی بازگشتی دارد. بدین ترتیب چنین سیستمی با استفاده از قابلیت خود-بهینه‌سازی می‌تواند به تدریج خود را بهبود بخشد و به‌طور بالقوه افزایشی نمایی در هوش داشته باشد. تاکنون یک چنین هوش مصنوعی شناخته نشده‌است؛ اما یکی از حوزه‌های فعال تحقیقاتی محسوب می‌شود. هوش مصنوعی Seed بخش مهمی از برخی نظریه‌ها در مورد تکینگی فناوری است. طرفداران این نظریه بر این باورند که توسعه هوش مصنوعی Seed، به سرعت موجب ظهور هوش‌هایی به مراتب قوی‌تر (از طریق بوت‌استرپ شدن) خواهد شد و از این رو عصر جدیدی آغاز خواهد شد.[۱۲][۱۳]

آمار[ویرایش]

بوت‌استرپ تکنیکی برای نمونه‌سازی مجدد است که برای به دست آوردن تخمین‌هایی از آماره‌های خلاصه استفاده می‌شود.[۱۴]

کسب و کار[ویرایش]

بوت‌استرپ در تجارت به معنی آغاز یک کسب و کار بدون کمک یا سرمایه بیرونی است. چنین استارتاپ‌هایی هزینه توسعه شرکت خود را از طریق گردش نقدی درونی تأمین می‌کنند و هزینه‌های خود را به دقت کنترل می‌کنند.[۱۵] به‌طور کلی افراد برای آغاز کردن یک کسب و کار نوپا، مبلغ کمی از پول را برای فرایند بوت‌استرپ کنار می‌گذارند.[۱۶] بوت‌استرپ کردن می‌تواند به عنوان مکملی برای مدل اقتصادسنجی نیز استفاده شود.[۱۷]

زیست‌شناسی[ویرایش]

ریچارد داوکینز در کتاب خود با عنوان «رودی از عدن» (River Out of Eden) از مفهوم بوت‌استرپ در رایانه برای توضیح تمییز زیست‌شناختی سلول‌ها استفاده کرده‌است: «سلول‌های مختلف ترکیب‌های متفاوتی از مواد شیمیایی دریافت می‌کنند که باعث می‌شود ترکیب‌های گوناگونی از ژن‌ها فعال شوند و برخی ژن‌ها تلاش کنند تا ژن‌های دیگر را روشن یا خاموش کنند. بدین ترتیب بوت‌استرپ ادامه می‌یابد تا این که مجموعه کاملی از انواع مختلفی از سلول‌ها را به دست می‌آوریم.»[۱۸]

تبارزایش (فیلوژنتیک)[ویرایش]

تحلیل بوت‌استرپینگ روشی جهت داوری در مورد قدرت پشتیبانی برای کلادهایی روی درخت تبار زایی است. عددی که روی هر گره نوشته می‌شود نشان‌دهنده درصد درختان بوت‌استرپی است که آن کلاد را در نقاط انتهایی شاخه نمایندگی می‌کنند.[۱۹]

حقوق (قانون)[ویرایش]

بوت‌استرپ در حقوق به معنی جلوگیری از پذیرش شهادت سماعی در پرونده‌های کیفری است.[۲۰]

زبان‌شناسی[ویرایش]

در زبان‌شناسی بوت‌استرپ به معنی نظریه‌ای در زمینه اکتساب زبان است.[۲۱]

فیزیک[ویرایش]

نظریه کوانتوم: بوت‌استرپ در نظریه کوانتوم به معنی یک معیار بسیار عمومی سازگاری برای تعیین شکل یک نظریه کوانتوم از روی برخی فرضیه‌ها در مورد طیف ذرات یا اپراتورها است.[۲۲]

الکترونیک[ویرایش]

خازن‌های بوت استرپ c1 و c2 در مدار BJT امیتر مشترک

بوت‌استرپ شکلی از فیدبک مثبت در طراحی مدارهای آنالوگ محسوب می‌شود. همچنین در زمینه شبکه‌های برق می‌دانیم که یک شبکه توزیع توان تقریباً هرگز عامدانه قطع نمی‌شود. ژنراتورها و ایستگاه‌های برق در موارد لزوم آغاز به کار کرده یا کار خود را خاتمه می‌دهند. یک ایستگاه برق معمولی برای این که بتواند برق تولید کند باید اول برق را دریافت کند. این برق از شبکه تأمین می‌شود و از این رو در مواردی که کل شبکه از کار بیفتد این ایستگاه‌های منفرد نمی‌تواند شروع به کار کنند.[۲۳] بدین ترتیب برای آغاز به کار شبکه باید دست کم‌تعداد اندکی از ایستگاه‌های برق برحسب توان خودشان آغاز به کار کنند. در فرایندی که آغاز سیاه نامیده می‌شود، یک ایستگاه برق بدون تکیه بر توان بیرونی شروع به کار می‌کند. در غیاب برق در شبکه یک یا چند ایستگاه سیاه باید شبکه را بوت‌استرپ کنند.[۲۴]

شبکه‌های تلفن همراه[ویرایش]

در شبکه‌های تلفن همراه یک فانکشن سرور بوت‌استرپ (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 نوشته شده‌است) این مشکل پیش می‌آید که خود کامپایلر چگونه باید کامپایل شود. روش‌های مختلفی در عمل برای حل این مشکل «مرغ و تخم‌مرغ» استفاده شده‌اند که برخی از آن‌ها شامل موارد زیر هستند:

  • پیاده‌سازی یک مفسر یا کامپایلر برای زبان x در زبانy. برای مثال نیکلاوس ویرت (Niklaus Wirth) نخستین کامپایلر زبان پاسکال را به زبان فرترن نوشت.
  • از قبل مفسر یا کامپایلر دیگری برای زبان x در زبان دیگری مانند y نوشته شده باشد. این طرحی است که غالباً بوت‌استرپ می‌شود.
  • نسخه‌های قبلی کامپایلر در زیرمجموعه‌ای از زبان x نوشته شده باشند که برای کامپایلر دیگری موجود باشد. برای مثال برخی از فرامجموعه‌های جاوا، هسکل و نخستین کامپایلر فری پاسکال بوت‌استرپ شده بودند.
  • یک کامپایلر که از افزونه‌های زبان غیراستاندارد یا دیگر ویژگی‌های زبان اصلی پشتیبانی می‌کند را بدون استفاده از آن افزونه‌ها یا ویژگی‌ها می‌توان نوشت. بدین ترتیب امکان کامپایل کردن آن با کامپایلر دیگری که از همان زبان مبنا استفاده می‌کند؛ اما مجموعه متفاوتی از افزونه‌ها و ویژگی‌ها دارد، ممکن می‌شود. بخش‌های اصلی کامپایلر C++ به نام clangt در زیرمجموعه‌ای از زبان C++ نوشته شده‌است که آن را می‌توان با استفاده از ++g و ++Microsoft Visul C کامپایل کرد. ویژگی‌های پیشرفته با برخی افزونه‌های GCC نوشته شده‌اند.
  • کامپایلر زبان x از معماری دیگری که برای یک کامپایلر X دارد، به صورت متقابل کامپایل شود. کامپایلرهای C معمولاً بدین ترتیب به پلتفرم‌های دیگر پورت می‌شوند. ضمناً این روش پس از بوت‌استرپ اولیه برای فری پاسکال نیز استفاده شده‌است.
  • کامپایلر در زبان x نوشته شود، سپس به صورت دستی آن را از منبع کامپایل کنیم (که به احتمال زیاد روش بهینه‌ای نخواهد بود) و آن را روی کد اجرا کنیم تا یک کامپایلر بهینه به دست آوریم. دونالد کنوت از این روش برای سیستم برنامه‌نویسی WEB literate استفاده کرده‌است.

روش توزیع کامپایلرها در کد منبع شامل ارائه نسخه پرتابلی از بایت‌کد آن کامپایلر است، به طوری که بوت‌استرپ به فرایند کامپایل کردن کامپایلر با خودش تبدیل می‌شود. نمودار T یک نمادگذاری است که برای اغلب این تکنیک‌های بوت‌استرپ کامپایلر استفاده می‌شود. در برخی موارد آسان‌ترین راه برای واداشتن یک کامپایلر پیچیده به اجرای سیستمی که نرم‌افزاری روی آن وجود ندارد یا اندک است، شامل یک سری از اسمبلرها و کامپایلرهای پیچیده‌تر است.[۲۹][۳۰]

تاریخچه بوت‌استرپ کردن کامپایلرها[ویرایش]

اسمبلرها نخستین ابزارهای زبانی بودند که خودشان را بوت‌استرپ می‌کردند. نخستین زبان سطح بالای برنامه‌نویسی که چنین بوت‌استرپی را ارائه می‌داد ENLIAC در سال ۱۹۵۸ بود. نخستین زبان‌هایی که به‌طور گسترده از این روش استفاده کردند، زبان Algol از شرکت Burroughs B5000 در سال ۱۹۶۱ و زبان LISP در سال ۱۹۶۲ بودند. هارت (Tim Hart) و لوین (Mike Levin) یک کامپایلر لیسپ را در دانشگاه MIT در سال ۱۹۶۲ نوشتند و آن را درون یک مفسر موجود لیسپ تست کردند. زمانی که آن‌ها کامپایلر را تا نقطه‌ای بهبود دادند که بتواند کد خود را کامپایل کند، تبدیل به یک کامپایلر بوت‌استرپ شد.[۳۱] این تکنیک تنها زمانی ممکن است که یک مفسر از قبل، در همان زمان یا زبان کاملاً مشابه که قرار است کامپایل شود، وجود داشته باشد.[۳۱]

منابع[ویرایش]

  1. ۱٫۰ ۱٫۱ World Wide Words: Boot, Michael Quinion
  2. ۲٫۰ ۲٫۱ "bootstraps--speculation/questions". 2005-08-28. http://listserv.linguistlist.org/pipermail/ads-l/2005-August/053187.html.
  3. "figurative 'bootstraps'". 2005-08-11. http://listserv.linguistlist.org/pipermail/ads-l/2005-August/052756.html.
  4. Jan Freeman, Bootstraps and Baron Munchausen, Boston.com, January 27, 2009
  5. Ulysses cited in the Oxford English Dictionary
  6. Buchholz, Werner (1953). "The System Design of the IBM Type 701 Computer". Proceedings of the I.R.E. 41 (10): 1273. doi:10.1109/jrproc.1953.274300.
  7. "Application Development (AppDev) Defined and Explained" Bestpricecomputers.co.uk. 2007-08-13.
  8. Hohle, Barbara (2009). "Bootstrapping Mechanisms in First Language Acquisition"(PDF). Linguistics. 47 (2): 359–382.doi:10.1515/LING.2009.013Archived from the original بایگانی‌شده در ۲۸ اکتبر ۲۰۱۴ توسط Wayback Machine(PDF) on 2014-10-28. Retrieved 28 October 2014.
  9. Francis, Paul (2000-04-02)."Yoid: Extending the Internet Multicast Architecture". www.aciri.org. Retrieved 2008-12-24.
  10. Traversat; et al. (2006-06-20). "US Patent 7,065,579".Retrieved 2008-12-23.
  11. Saxena; et al. (2003). "Yoid: Extending the Internet Multicast Architecture"(PDF). www.aciri.org. Retrieved 2008-12-24.
  12. Cortese, Francesco Albert Bosco (Spring 2014). "The Maximally Distributed Intelligence Explosion". AAAI Spring Symposium. Archived from the original on 13 April 2021. Retrieved 21 December 2019.
  13. Waser, Mark R. (2014). "Bootstrapping a Structured Self-Improving & Safe Autopoietic Self". Procedia Computer Science. 41: 134–139. doi:10.1016/j.procs.2014.11.095.
  14. Wu, C.F.J. (1986). Jackknife, bootstrap and other resampling methods in regression analysis (with discussions). Annals of Statistics, 14, 1261-1350
  15. "The art of the bootstrap". 21 November 2008. Retrieved 23 June 2018.
  16. Godin, Seth. "The Bootstrap Bible" (PDF). Retrieved 23 June 2018.
  17. J. Scott Armstrong (2001). "Judgmental Bootstrapping: Inferring Experts= Rules for Forecasting" (PDF). Principles of Forecasting: A Handbook for Researchers and Practitioners. Kluwer Academic Publishers. Archived from the original (PDF) on 2010-06-20. Retrieved 2012-01-10.
  18. Richard Dawkins, River Out of Eden, pages 23-25, 1995 (paper) شابک ‎۰−۴۶۵−۰۶۹۹۰−۸
  19. Bradley Efron; Elizabeth Halloran & Susan Holmes (1996). "Bootstrap confidence levels for phylogenetic trees". PNAS. 93 (23): 13429. doi:10.1073/pnas.93.23.13429. PMC 38940.
  20. Bourjaily v. United States, 483 U.S. 171 (1987).
  21. Hohle, Barbara (2009). "Bootstrapping Mechanisms in First Language Acquisition" (PDF). Linguistics. 47 (2): 359–382. doi:10.1515/LING.2009.013. Archived from the original (PDF) on 2014-10-28. Retrieved 28 October 2014.
  22. G. Chew (1962). S-Matrix theory of strong interactions. New York: W.A. Benjamin.
  23. IEEE Standard 100 Authoritative Dictionary of IEEE Standards Terms, Seventh Edition, IEEE Press, 2000 ISBN 0-7381-2601-2 page 123
  24. Philip P. Walsh, Paul Fletcher Gas turbine performance, John Wiley and Sons, 2004 ISBN 0-632-06434-X, page 486
  25. «Generic Authentication Architecture by Timo Olkkonen, Helsinki University of Technology» (PDF). بایگانی‌شده از اصلی (PDF) در ۵ ژوئیه ۲۰۱۶. دریافت‌شده در ۲۱ دسامبر ۲۰۱۹.
  26. Stephen Gowans: The bootstrap theory of propaganda, November 23, 2009, retrieved October 24, 2019
  27. Compilers and Compiler Generators: An Introduction With C++. Patrick D. Terry 1997. International Thomson Computer Press. ISBN 1-85032-298-8
  28. Compilers and Compiler Generators: An Introduction With C++. Patrick D. Terry 1997. International Thomson Computer Press. ISBN 1-85032-298-8
  29. ۲۹٫۰ ۲۹٫۱ "Compiler Construction and Bootstrapping" by P.D.Terry 2000. HTML بایگانی‌شده در ۲۰۰۹-۱۱-۲۳ توسط Wayback Machine. PDF بایگانی‌شده در دسامبر ۱۴, ۲۰۱۰ توسط Wayback Machine.
  30. "Bootstrapping a simple compiler from nothing" بایگانی‌شده در مارس ۳, ۲۰۱۰ توسط Wayback Machine by Edmund GRIMLEY EVANS 2001
  31. ۳۱٫۰ ۳۱٫۱ Tim Hart and Mike Levin. "AI Memo 39-The new compiler" (PDF). Archived from the original (PDF) on 2011-02-24. Retrieved 2008-05-23.