Apa itu bootstrap?

636

Saya terus melihat "bootstrap" yang disebutkan dalam diskusi pengembangan aplikasi. Tampaknya tersebar luas dan penting, tetapi saya belum menemukan penjelasan yang buruk tentang apa sebenarnya bootstrap itu; melainkan, seolah-olah semua orang seharusnya tahu apa artinya. Tapi saya tidak. Sedekat yang saya bisa pikirkan, ini ada hubungannya dengan tugas inisialisasi yang diperlukan suatu aplikasi pada saat peluncuran, tetapi saya bisa sepenuhnya salah tentang hal itu. Adakah yang bisa membantu saya untuk memahami ide ini?

Alex Basson
sumber
8
Menurut Wikipedia, ada empat penggunaan kata "bootstrap" untuk komputasi - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens
1
Saya baru saja memperbarui posting HeDinges dengan ini. Saya mencari beberapa klarifikasi tentang bentuk bootstrap yang sedang dilihat Alex.
Thomas Owens
Dalam pengembangan perangkat lunak, ini mengacu pada pengembangan lingkungan pemrograman yang lebih kompleks dan lebih cepat secara berturut-turut.
Lucky
Dalam pengembangan perangkat lunak .NET, pemahaman saya adalah merujuk pada pengaturan lingkungan di mana aplikasi akan berjalan seperti layanan apa pun yang perlu didaftarkan atau dimuat.
Neo

Jawaban:

318

"Bootstrapping" berasal dari istilah "menarik diri Anda dengan bootstraps Anda sendiri." Itu bisa Anda dapatkan dari Wikipedia .

Dalam komputasi, bootstrap loader adalah bagian pertama dari kode yang berjalan ketika mesin mulai, dan bertanggung jawab untuk memuat sisa sistem operasi. Di komputer modern itu disimpan dalam ROM, tapi saya ingat proses bootstrap pada PDP-11, di mana Anda akan menyodok bit melalui switch panel depan untuk memuat segmen disk tertentu ke dalam memori, dan kemudian menjalankannya. Tidak perlu dikatakan, bootstrap loader biasanya cukup kecil.

"Bootstrapping" juga digunakan sebagai istilah untuk membangun sistem menggunakan dirinya sendiri - atau lebih tepatnya, versi pendahulunya. Misalnya, ANTLR versi 3 ditulis menggunakan parser yang dikembangkan dalam ANTLR versi 2.


sumber
8
Wow, saya hampir lupa tentang saklar panel depan pada PDP. Terima kasih atas ingatannya !!
Jeff Hornby
7
Koreksi saya jika saya salah. Meskipun jawaban ini menjelaskan perincian teknis tentang apa itu bootstrap, ia tidak pernah menjawab pertanyaan awal dalam konteks pertanyaan.
jayscript
5
@jayscript - Bagaimana Anda memilih untuk menjawab pertanyaan ini? Itu adalah ungkapan idiomatis, dan idiom biasanya dipahami dengan baik oleh kelompok sosial yang menggunakannya, dan di luar itu tidak dapat dipahami. Saya mencoba menjawab dengan contoh, yang saya percaya adalah salah satu dari beberapa cara untuk mencoba menerjemahkan idiom.
3
@ kdgregory Saya tidak akan bisa menjawab pertanyaan ini karena saya datang ke sini untuk mencari jawaban. Saya berspekulasi bahwa kata bootstrap itu sendiri adalah metafora untuk beberapa konsep teknis berbeda yang terkait longgar, yang mungkin menjadi sumber kebingungan.
jayscript
2
PDP 11 ?! Saya tidak menyadari bahwa kami memiliki orang tua di sini. : P
John Red
255

Contoh bootstrap ada di beberapa kerangka kerja web. Anda memanggil index.php (bootstrapper), dan kemudian memuat kerangka kerja pembantu, model, konfigurasi, dan kemudian memuat controller dan memberikan kendali padanya.

Seperti yang Anda lihat, ini adalah file sederhana yang memulai proses besar.

ryeguy
sumber
50
Dalam hal pengembangan web (yang merupakan konteks dari pertanyaan awal), saya pikir ini adalah jawaban terbaik.
cartbeforehorse
Sepertinya cukup berhubungan dengan Laravel, tetapi Laravel masih belum ada di tahun 2009.
LppEdd
@Wajdan Ali Tidak, ini seharusnya bukan jawaban yang diterima. Ini adalah pandangan mikroskopis tentang penggunaan baru dari istilah bootstrap, yang beberapa orang berpendapat sebenarnya adalah penyalahgunaan istilah yang jauh sebelumnya. "To bootstrap" mengacu pada menarik diri Anda dengan bootstraps Anda, yaitu, menggunakan kekuatan sesuatu untuk meningkatkan itu sendiri. Ini adalah asal dari istilah "untuk mem-boot komputer Anda." Penggunaan pop saat ini dalam pengembangan web bukan satu-satunya (atau asli) penggunaan kata tersebut. Banyak jawaban lain mengatasinya dengan tepat.
Kallaste
3
@Allall, baiklah, tetapi ini adalah jawaban yang saya cari, dan, berdasarkan konteks pertanyaan awal ("pengembangan aplikasi"), sepertinya ini jawaban yang paling tepat seperti yang sudah ditunjukkan.
Bynary
@ aaron.bynum, tidak, jawaban yang diberikan berlaku untuk kerangka kerja pengembangan web, dan jelas bukan pengembangan aplikasi. Jawabannya menyesatkan dan cacat, karena bergantung pada kesalahpahaman yang umum dipegang tentang apa sebenarnya bootstrap dan dari mana asalnya. Itu hanya menyebarkan informasi yang salah. Jika itu yang Anda datang ke sini, cari baik-baik saja, tetapi SO secara keseluruhan menghargai informasi yang benar. Demikian komentar saya.
Kallaste
51

Lihat di artikel Wikipedia tentang bootstrap .

Ada bagian dan tautan yang menjelaskan apa artinya dalam Komputasi . Ini memiliki empat kegunaan yang berbeda di lapangan.

Berikut adalah beberapa kutipan, tetapi untuk penjelasan yang lebih mendalam, dan makna alternatif, lihat tautan di atas.

"... adalah teknik di mana program komputer sederhana mengaktifkan sistem program yang lebih rumit."

"Penggunaan lain dari istilah bootstrap adalah dengan menggunakan kompiler untuk mengkompilasi dirinya sendiri, dengan terlebih dahulu menulis sebagian kecil kompiler dari bahasa pemrograman baru dalam bahasa yang ada untuk mengkompilasi lebih banyak program dari kompiler baru yang ditulis dalam bahasa baru."

HeDinges
sumber
6
Bisakah Anda mengutip atau memparafrasekan sehingga pembaca tidak perlu melintasi beberapa situs web untuk mendapatkan jawaban mereka?
Kurt W. Leucht
5
"Industri Perangkat Lunak, bisnis unik menjual barang di bawah standar secara hukum, dan membebankan biaya untuk peningkatannya."
Stein Åsmul
Saya mencari jawaban Bootstrapping di Compiler . Ini sangat membantu.
Siraj Alam
49

Istilah "bootstrap" biasanya berlaku untuk situasi di mana sistem bergantung pada dirinya sendiri untuk memulai, semacam masalah ayam dan telur.

Contohnya:

  • Bagaimana Anda mengkompilasi kompiler C yang ditulis dalam C?
  • Bagaimana Anda memulai proses inisialisasi OS jika Anda belum menjalankan OS?
  • Bagaimana Anda memulai sistem terdistribusi (peer-to-peer) di mana klien bergantung pada rekan-rekan mereka yang dikenal saat ini untuk mencari tahu tentang rekan-rekan baru dalam sistem?

Dalam hal itu, bootstrap mengacu pada cara memecahkan ketergantungan melingkar, biasanya dengan bantuan entitas eksternal, misalnya

  • Anda dapat menggunakan kompiler C lain untuk mengkompilasi (bootstrap) kompiler Anda sendiri, dan kemudian Anda dapat menggunakannya untuk mengkompilasi ulang sendiri
  • Anda menggunakan potongan kode terpisah yang mengatur proses awal tanpa tergantung pada fungsi yang disediakan oleh OS
  • Anda menggunakan daftar rekan-rekan awal kode-keras atau URL pelacak-kode-keras yang memasok daftar rekan

dll.

Ivan Poliakov
sumber
4
Ini benar-benar menjadi inti pertanyaan. Di mana dua jawaban lainnya, lewatkan sepenuhnya.
Arturo Hernandez
1
Saya merasa penjelasan ini adalah yang paling relevan dengan pengembangan perangkat lunak secara umum. Benar-benar membawa pulang konsep ini untuk saya
Vance Palacio
24

Dalam konteks pengembangan aplikasi, "bootstrap" biasanya muncul ketika berbicara tentang perangkat lunak modular dan / atau auto-updatable.

Daripada pengguna mengunduh seluruh aplikasi, termasuk fitur yang tidak diperlukan, dan mengunduh ulang dan memperbaruinya secara manual setiap kali ada pembaruan, pengguna hanya mengunduh dan memulai executable "bootstrap" kecil, yang pada gilirannya mengunduh dan menginstalnya bagian dari aplikasi yang dibutuhkan pengguna. Selain itu, komponen bootstrap dapat mencari pembaruan dan menginstalnya setiap kali dimulai.

Michael Borgwardt
sumber
4
Saya tidak pernah mendengar istilah "bootstrap" yang digunakan dalam konteks tertentu.
Bombe
Biasa digunakan dalam hal aplikasi php (misalnya menggunakan Komposer untuk menyelesaikan ini)
AturSams
15

Alex, cukup banyak apa yang komputer Anda lakukan ketika boot. ('Booting' komputer sebenarnya berasal dari kata bootstrap)

Awalnya, program kecil di BIOS Anda berjalan. Itu berisi kode mesin yang cukup untuk memuat dan menjalankan program yang lebih besar, lebih kompleks.

Program kedua itu mungkin sesuatu seperti NTLDR (di Windows) atau LILO (di Linux), yang kemudian mengeksekusi dan dapat memuat, lalu menjalankan, sisa dari sistem operasi.

pergi ke sana
sumber
2
Meskipun saya membaca semua jawaban (yang diperluas dengan istilah yang baik dan saya memilih beberapa), perbandingan "booting" sederhana ini atau "bootstrap" memberi saya motivasi terbaik untuk membaca semua yang lain untuk menghubungkan titik-titik. Srsly, itu seperti menjelaskan topik yang rumit ke anak berusia 5 tahun dan mereka mendapatkannya. Terima kasih.
Chris22
14

Untuk kelengkapan, ini juga merupakan metode yang agak penting (dan relatif baru) dalam statistik yang menggunakan resampling / simulasi untuk menyimpulkan properti populasi dari sampel. Ini memiliki artikel Wikipedia panjangnya tentang bootstrap (statistik) .

Dirk Eddelbuettel
sumber
1
Relatif baru? Itu adalah bagian dari pendidikan statistik saya setidaknya 15 tahun yang lalu.
Toon Krijthe
6
Itulah sebabnya saya mengatakan 'relatif': Artikel-artikel awal Efron berasal dari awal 1980-an sebagai kebalikan dari awal literatur ketahanan dari tahun 1960-an.
Dirk Eddelbuettel
4

Boot tegap arti kamus untuk memulai dengan sumber daya minimum. Dalam Konteks OS, OS harus dapat memuat dengan cepat begitu Power On Self Test (POST) menentukan bahwa aman untuk membangunkan CPU. Kode tali booting akan dijalankan dari BIOS. BIOS adalah ROM berukuran kecil. Umumnya ini adalah instruksi lompat ke set instruksi yang akan memuat sistem operasi ke RAM. Tujuan Jump adalah sektor Boot di Hard Disk. Setelah program bios memeriksa, itu adalah sektor Boot yang valid yang berisi alamat awal dari OS yang disimpan, yaitu apakah itu adalah MBR (Master Boot Record) yang valid atau tidak. Jika MBR yang valid, OS akan disalin ke memori (RAM) dari sana pada OS yang menangani Manajemen Memori dan Proses.

achoora
sumber
2

IMHO tidak ada penjelasan yang lebih baik daripada fakta tentang Bagaimana kompiler pertama ditulis?

Saat ini pemuatan Sistem Operasi adalah proses paling umum yang disebut Bootstrapping

Ivanzinho
sumber
Tautan yang Anda berikan dalam jawaban Anda sangat membantu.
Siraj Alam
2

Bootstrapping memiliki arti lain dalam konteks penguatan pembelajaran yang mungkin berguna untuk diketahui oleh pengembang, selain penggunaannya dalam pengembangan perangkat lunak (sebagian besar jawaban di sini, misalnya oleh kdgregory ) dan penggunaannya dalam statistik seperti yang dibahas oleh Dirk Eddelbuettel .

Dari Sutton dan Barto :

Widrow, Gupta, dan Maitra (1973) memodifikasi algoritma Least-Mean-Square (LMS) dari Widrow dan Hoff (1960) untuk menghasilkan aturan pembelajaran penguatan yang bisa belajar dari sinyal kegagalan dan keberhasilan alih-alih dari contoh pelatihan. Mereka menyebut bentuk pembelajaran ini sebagai " adaptasi bootstrap selektif " dan menggambarkannya sebagai "belajar dengan seorang kritikus" alih-alih "belajar dengan seorang guru." Mereka menganalisis aturan ini dan menunjukkan bagaimana itu bisa belajar bermain blackjack. Ini adalah perampokan yang terisolasi ke dalam pembelajaran penguatan oleh Widrow, yang kontribusinya pada pembelajaran yang diawasi jauh lebih berpengaruh.

Buku ini menjelaskan berbagai algoritma penguatan di mana nilai target didasarkan pada perkiraan sebelumnya sebagai metode bootstrap:

Akhirnya, kami mencatat satu properti khusus terakhir dari metode DP [Dynamic Programming]. Semuanya memperbarui estimasi nilai negara berdasarkan estimasi nilai negara penggantinya. Yaitu, mereka memperbarui estimasi berdasarkan estimasi lainnya. Kami menyebut ide umum ini bootstrap . Banyak metode pembelajaran penguatan melakukan bootstrap, bahkan yang tidak memerlukan, seperti yang diminta DP, model lingkungan yang lengkap dan akurat.

Perhatikan bahwa ini berbeda dari agregasi bootstrap dan ledakan intelijen yang disebutkan di halaman wikipedia saat bootstrap.

Scipio
sumber
1

Dalam hal itu sehubungan dengan menggunakan Bootstrap Twitter populer saya merasa seperti ini jenis bootstrap adalah tindakan mengintegrasikan komponen modular ke dalam aplikasi Web tanpa aplikasi Web bahkan harus mengakui komponen modular ada sampai dibutuhkan atau referensi itu .

Pengembang dapat dengan mulus mengintegrasikan salinan default tema CSS Twitter Bootstrap hanya dengan memuat (referensi) ke dalam aplikasi Web. Vuola! Maka Anda mungkin perlu menimpa beberapa perubahan ini, tetapi Anda dapat melakukannya sedemikian rupa sehingga sumber daya / komponen tidak tersentuh dan sepenuhnya dapat digunakan kembali.

Konsep yang sama ini adalah bagaimana Web Devs mengimplementasikan jQuery APIs dan sebagainya, tetapi tidak benar-benar diungkapkan oleh Devs sebagai bootstrap per se. Apa yang dilakukannya adalah meningkatkan fleksibilitas dan penggunaan kembali sementara memungkinkan isolasi berbagai komponen / sumber daya aplikasi untuk berada secara bebas baik di server yang sama atau mungkin di CDN.

CATATAN: Dalam menghitung kesepakatan bootstrap dengan MBR dan dalam UNIX, dibutuhkan bootloader atau manajer khusus yang merupakan program kecil dalam ROM yang memuat OS ke dalam RAM. Jika Anda memikirkannya, konsep yang sama terjadi pada aksi bootstrap loader memeriksa MBR dan memuat OS berdasarkan tabel ini yang terjadi tanpa OS memiliki gagasan bahwa ini terjadi.

yardpenalty.com
sumber
0

Saya milik generasi yang membalik sakelar untuk memasuki program boot. Pada awal 1980-an, saya bekerja pada komputer mikro bernama Micro-78, yang dikembangkan oleh Electronics Corporation of India Ltd (ECIL). Itu adalah semacam tiruan dari Altair 8800. Saya ingat dengan jelas apa yang terjadi ketika sebuah program boot kecil dimasukkan menggunakan toggle switches dan dieksekusi dengan menekan sebuah tombol. Program membaca program boot kedua yang terkandung dalam trek pertama floppy disk dan menimpanya dengan sendirinya sedemikian rupa sehingga program boot kedua mulai dijalankan untuk memuat sistem operasi disk. Saya pikir istilah "bootstrap" mengacu pada proses membaca program boot pertama dan menimpa program boot kedua dengan sendirinya, dengan cara "menarik diri" dengan fungsionalitas tambahan dari program boot kedua.

Murthy KVM
sumber
-3

Sebagai seorang pemula yang rendah hati di dunia pemrograman, dan membolak-balik semua jawaban di sini setelah melihat kata ini banyak digunakan dalam cara yang agak berbeda di tempat yang berbeda, saya menemukan membaca halaman Wikipedia tentang Bootstrapping (ya! Saya tidak memikirkan itu baik pada awalnya) sangat informatif untuk memahami perbedaan dalam penggunaan kata ini. Mungkinkah ...... pada kesempatan yang sangat langka ...... Wikipedia bahkan mungkin memiliki penjelasan yang lebih baik tentang istilah-istilah tertentu daripada .... (dihapus)? Akankah mereka membawa poin perwakilan di Wikipedia?

Bagi saya, sepertinya semua artinya ada hubungannya: mulai dengan sesuatu yang sesederhana mungkin1, membuat sesuatu yang sedikit lebih kompleks dengan Thing2 itu, dan sekarang Anda dapat menggunakan Thing2 untuk melakukan beberapa jenis tugas lebih efisien dan lebih cepat daripada yang Anda bisa awalnya dengan Thing1. Kemudian ulangi dari Thing2 ke Thing 3 ad infinitum ...

Saya melihatnya terkait erat dengan evolusi biologis dan 'Layers of Abstraction' (pemula seperti saya lihat, ahem, Wikipedia, batuk) - evolusi dari komputer tahun 1940 dengan sakelar, kode mesin, Majelis, C, Python, AI yang dapat Anda berikan semua jenis instruksi kompleks seperti "buat% 4 ^% makan malam ke default saya & ^ $% persyaratan dan bersihkan lantai Anda% $ £" @: ~ "dalam bahasa gaul mabuk dialek Inggris atau suku Amazon tanpa mereka mengeluarkan pengecualian '(untuk pemula lagi ... Anda dapat menebaknya) - melewatkan banyak tautan di sana karena ketidaktahuan yang sederhana.

Kemudian dalam arti perangkat lunak tertentu: Meaning1: Thing1 digunakan untuk memuat Thing2 versi terbaru (karena tentu saja Thing2 akan lebih besar dari Thing1, sama seperti Thing3 akan lebih besar dari Thing2).

Meaning2: Thing1 adalah bahasa tingkat yang lebih rendah (lebih dekat ke 1001011100 .... 011001 daripada cetak ("Hello,", user.name)) digunakan untuk menulis sedikit bahasa yang lebih tinggi dari Thing2, maka sedikit Thing2 ini adalah digunakan untuk memperluas Thing2 sendiri dari tingkat kosakata bayi ke tingkat kosakata orang dewasa (Thing2 mulai diproses, atau menggunakan istilah teknis yang benar 'dikompilasi', oleh versi bayi itu sendiri (itu adalah bayi yang pintar!), sedangkan versi bayi dari Thing2 itu sendiri tentu saja hanya dapat dikompilasi oleh Thing1, karena itu tidak dapat ada sebelum itu ada, kan!), maka versi anak dari Thing2 mengkompilasi versi Remaja Surly dari Thing2, di mana komunitas pemrograman saat memutuskan apakah 'masalah' Surly Teenager ( istilah perangkat lunak dan istilah metafora!) layak menghabiskan cukup waktu penyelesaian untuk diterima jangka panjang,atau untuk membiarkan mereka (tidak yakin ke mana harus mengambil analogi di sini).

Jika ya, maka Thing2 memiliki 'Bootstrapped' sendiri (mungkin beberapa kali) dari masa kanak-kanak hingga dewasa: "anak adalah ayah dari pria" (Wordsworth, sarankan jangan mencoba mencari kutipan atau penulis di Stack Overflow) .

Will Croxford
sumber