Bootstrapping là gì?


636

Tôi tiếp tục thấy "bootstrapping" được đề cập trong các cuộc thảo luận về phát triển ứng dụng. Có vẻ như cả hai đều phổ biến và quan trọng, nhưng tôi chưa bắt gặp ngay cả một lời giải thích kém về việc bootstrapping thực sự là gì; đúng hơn, có vẻ như mọi người chỉ cần biết ý nghĩa của nó. Tôi không, mặc dù. Gần như tôi có thể hình dung, nó có liên quan đến các tác vụ khởi tạo được yêu cầu của một ứng dụng khi khởi chạy, nhưng tôi có thể hoàn toàn sai về điều đó. Bất cứ ai có thể giúp tôi hiểu ý tưởng này?


8
Theo Wikipedia, có bốn cách sử dụng từ "bootstrapping" liên quan đến điện toán - en.wikipedia.org/wiki/Bootstrapping#Computing
Thomas Owens

1
Tôi vừa cập nhật bài viết của HeDinges với điều này. Tôi đang tìm kiếm một số giải thích rõ về hình thức bootstrapping mà Alex đang xem xét.
Thomas Owens

Trong phát triển phần mềm, nó đề cập đến sự phát triển của các môi trường lập trình nhanh hơn, phức tạp hơn.
May mắn

Trong phát triển phần mềm .NET, tôi hiểu rằng nó đề cập đến việc thiết lập môi trường mà ứng dụng sẽ chạy, chẳng hạn như bất kỳ dịch vụ nào cần được đăng ký hoặc tải.
Neo

Câu trả lời:


318

"Bootstrapping" xuất phát từ thuật ngữ "tự kéo mình lên bằng bootstraps của chính bạn." Bạn có thể nhận được rất nhiều từ Wikipedia .

Trong điện toán, bộ tải bootstrap là đoạn mã đầu tiên chạy khi máy khởi động và chịu trách nhiệm tải phần còn lại của hệ điều hành. Trong các máy tính hiện đại, nó được lưu trữ trong ROM, nhưng tôi nhớ lại quá trình bootstrap trên PDP-11, nơi bạn sẽ chọc các bit thông qua các công tắc bảng mặt trước để tải một phân đoạn đĩa cụ thể vào bộ nhớ, rồi chạy nó. Không cần phải nói, bộ tải bootstrap thường khá nhỏ.

"Bootstrapping" cũng được sử dụng như một thuật ngữ để xây dựng một hệ thống sử dụng chính nó - hay chính xác hơn là phiên bản tiền nhiệm. Ví dụ: ANTLR phiên bản 3 được viết bằng trình phân tích cú pháp được phát triển trong ANTLR phiên bản 2.


8
Wow, tôi gần như đã quên về các công tắc bảng mặt trước trên PDP. Cảm ơn cho những kỷ niệm!!
Jeff Hornby

7
Đúng nếu tôi đã sai lầm. Mặc dù câu trả lời này giải thích chi tiết kỹ thuật về việc bootstrapping có thể là gì, nhưng nó không bao giờ trả lời câu hỏi ban đầu trong bối cảnh của câu hỏi.
jayscript

5
@jayscript - Làm thế nào bạn chọn trả lời câu hỏi này? Đó là một thành ngữ thành ngữ và các thành ngữ thường được hiểu rõ bởi nhóm xã hội sử dụng chúng và không thể hiểu được bên ngoài nó. Tôi đã cố gắng trả lời bằng ví dụ, mà tôi tin là một trong số ít cách để cố gắng dịch thành ngữ.

3
@kdgregory Tôi sẽ không thể trả lời câu hỏi này khi tôi đến đây để tìm câu trả lời. Tôi suy đoán rằng chính từ bootstrapping là một phép ẩn dụ cho một số khái niệm kỹ thuật khác nhau có liên quan lỏng lẻo, có thể là nguồn gốc của sự nhầm lẫn.
jayscript 22/03/2016

2
PDP 11?! Tôi đã không nhận ra rằng chúng tôi có người già ở đây. : P
John Red

255

Một ví dụ về bootstrapping là trong một số khung web. Bạn gọi index.php (bootstrapper), sau đó nó tải các trình trợ giúp khung, mô hình, cấu hình, sau đó tải bộ điều khiển và chuyển điều khiển cho nó.

Như bạn có thể thấy, đó là một tệp đơn giản bắt đầu một quy trình lớn.


50
Về mặt phát triển web (đó là bối cảnh của câu hỏi ban đầu), tôi nghĩ đây là câu trả lời tốt nhất.
cartb Beforehorse

Có vẻ khá liên quan đến Laravel, nhưng Laravel vẫn không ở đó vào năm 2009.
LppEdd

@Wajdan Ali Không, đây không phải là câu trả lời được chấp nhận. Đây là một cái nhìn vi mô về việc sử dụng mới thuật ngữ bootstrapping, mà một số người cho rằng thực sự là một sự lạm dụng của một thuật ngữ sớm hơn nhiều. "To bootstrap" có nghĩa là tự kéo mình lên bằng bootstraps, nghĩa là sử dụng sức mạnh của thứ gì đó để tận dụng chính nó. Nó là nguồn gốc của thuật ngữ "để khởi động máy tính của bạn." Việc sử dụng pop hiện tại trong phát triển web không phải là cách sử dụng duy nhất (hoặc bản gốc) của từ này. Nhiều câu trả lời khác giải quyết điều này một cách thích hợp.
Kallaste

3
@Kallaste, tốt thôi, nhưng đây là câu trả lời tôi tìm kiếm, và, dựa trên ngữ cảnh của câu hỏi ban đầu ("phát triển ứng dụng"), nó dường như là câu trả lời thích hợp nhất như đã chỉ ra.
tạm biệt

@ aaron.bynum, không, câu trả lời được đưa ra áp dụng cho các khung phát triển web và chắc chắn không phải là phát triển ứng dụng. Câu trả lời là sai lệch và thiếu sót, bởi vì nó dựa trên sự hiểu lầm thường được tổ chức về việc bootstrapping thực sự là gì và nó đến từ đâu. Nó chỉ truyền bá thông tin sai lệch. Nếu đó là những gì bạn đến đây để tìm kiếm thì tốt, nhưng SO là toàn bộ giá trị thông tin chính xác. Vì vậy, nhận xét của tôi.
Kallaste

51

Xem trên bài viết Wikipedia về bootstrapping .

Có một phần và các liên kết giải thích ý nghĩa của nó trong Máy tính . Nó có bốn cách sử dụng khác nhau trong lĩnh vực này.

Dưới đây là một số trích dẫn, nhưng để giải thích sâu hơn và ý nghĩa thay thế, hãy tham khảo các liên kết ở trên.

"... là một kỹ thuật trong đó một chương trình máy tính đơn giản kích hoạt một hệ thống chương trình phức tạp hơn."

"Một cách sử dụng khác của thuật ngữ bootstrapping là sử dụng trình biên dịch để tự biên dịch, bằng cách trước tiên viết một phần nhỏ của trình biên dịch ngôn ngữ lập trình mới bằng ngôn ngữ hiện có để biên dịch thêm các chương trình của trình biên dịch mới được viết bằng ngôn ngữ mới."


6
Bạn có thể vui lòng trích dẫn hoặc diễn giải để người đọc không phải truy cập nhiều trang web để có câu trả lời không?
Kurt W. Leucht

5
"Công nghiệp phần mềm, công việc duy nhất là bán hàng hóa không đạt tiêu chuẩn một cách hợp pháp và tính phí cho việc nâng cấp của họ."
Stein Åsmul

Tôi đang tìm kiếm một câu trả lời Bootstrapping trong Trình biên dịch . Điều này rất hữu ích.
Siraj Alam

49

Thuật ngữ "bootstrapping" thường áp dụng cho tình huống trong đó một hệ thống phụ thuộc vào chính nó để bắt đầu, loại vấn đề về gà và trứng.

Ví dụ:

  • Làm thế nào để bạn biên dịch một trình biên dịch C được viết bằng C?
  • Làm thế nào để bạn bắt đầu quá trình khởi tạo HĐH nếu bạn chưa chạy HĐH?
  • Làm thế nào để bạn bắt đầu một hệ thống phân tán (ngang hàng) trong đó các khách hàng phụ thuộc vào các đồng nghiệp hiện được biết đến của họ để tìm hiểu về các đồng nghiệp mới trong hệ thống?

Trong trường hợp đó, bootstrapping đề cập đến một cách phá vỡ sự phụ thuộc vòng tròn, thường là với sự trợ giúp của một thực thể bên ngoài, ví dụ

  • Bạn có thể sử dụng một trình biên dịch C khác để biên dịch (bootstrap) trình biên dịch của riêng bạn, và sau đó bạn có thể sử dụng nó để biên dịch lại chính nó
  • Bạn sử dụng một đoạn mã riêng biệt để thiết lập quy trình ban đầu mà không phụ thuộc vào bất kỳ chức năng nào do HĐH cung cấp
  • Bạn sử dụng danh sách các đồng nghiệp ban đầu được mã hóa cứng hoặc URL theo dõi được mã hóa cứng cung cấp danh sách ngang hàng

Vân vân.


4
Điều này thực sự nhận được ở trung tâm của câu hỏi. Trường hợp hai câu trả lời khác, bỏ lỡ nó hoàn toàn.
Arturo Hernandez

1
Tôi cảm thấy như lời giải thích này có liên quan nhất đến phát triển phần mềm nói chung. Thực sự mang ý tưởng về nhà cho tôi
Vance Palacio

24

Trong bối cảnh phát triển ứng dụng, "bootstrapping" thường xuất hiện khi nói về phần mềm mô đun và / hoặc tự động cập nhật.

Thay vì người dùng tải xuống toàn bộ ứng dụng, bao gồm các tính năng anh ta không cần, và tải xuống lại và cập nhật thủ công bất cứ khi nào có bản cập nhật, người dùng chỉ tải xuống và bắt đầu một "bootstrap" nhỏ, lần lượt tải xuống và cài đặt những thứ đó các bộ phận của ứng dụng mà người dùng cần. Ngoài ra, thành phần bootstrap có thể tìm kiếm các bản cập nhật và cài đặt chúng mỗi khi nó được khởi động.


4
Tôi chưa bao giờ nghe thấy thuật ngữ khởi động lại được sử dụng trong bối cảnh cụ thể đó.
Bombe

Thường được sử dụng liên quan đến các ứng dụng php (ví dụ sử dụng Trình soạn thảo để thực hiện việc này)
AturSams

15

Alex, đó là khá nhiều những gì máy tính của bạn làm khi khởi động. ('Khởi động' một máy tính thực sự xuất phát từ từ bootstrapping)

Ban đầu, chương trình nhỏ trong BIOS của bạn chạy. Nó chứa đủ mã máy để tải và chạy một chương trình lớn hơn, phức tạp hơn.

Chương trình thứ hai đó có lẽ là một cái gì đó giống như NTLDR (trong Windows) hoặc LILO (trong Linux), sau đó thực thi và có thể tải, sau đó chạy, phần còn lại của hệ điều hành.


2
Mặc dù tôi đã đọc tất cả các câu trả lời (mở rộng về thuật ngữ này và tôi đã bỏ phiếu một số), so sánh "khởi động" đơn giản này hay còn gọi là "bootstrapping" đã cho tôi động lực tốt nhất để đọc tất cả các câu hỏi khác để kết nối các dấu chấm. Srsly, nó giống như giải thích một chủ đề phức tạp cho một đứa trẻ 5 tuổi và họ có được nó. Cảm ơn.
Chris22

14

Để hoàn thiện, đây cũng là một phương pháp khá quan trọng (và tương đối mới) trong thống kê sử dụng mô hình hóa / mô phỏng để suy ra các đặc tính dân số từ một mẫu. Nó có bài viết Wikipedia dài riêng về bootstrapping (thống kê) .


1
Tương đối mới? Đó là một phần của giáo dục thống kê của tôi ít nhất 15 năm trước.
Toon Krijthe

6
Đó là lý do tại sao tôi nói 'tương đối': Các bài báo ban đầu của Efron là từ đầu những năm 1980, trái ngược với sự khởi đầu của văn học mạnh mẽ từ những năm 1960.
Dirk Eddelbuettel

4

Khởi động đóng gói ý nghĩa từ điển là để bắt đầu với các tài nguyên tối thiểu. Trong Bối cảnh của HĐH, HĐH sẽ có thể tải nhanh một khi Tự kiểm tra bật nguồn (POST) xác định rằng nó an toàn để đánh thức CPU. Mã dây đeo khởi động sẽ được chạy từ BIOS. BIOS là một ROM có kích thước nhỏ. Nói chung, nó là một lệnh nhảy tới tập lệnh sẽ tải Hệ điều hành vào RAM. Đích đến của Jump là khu vực Boot trong Đĩa cứng. Khi chương trình bios kiểm tra nó là một khu vực khởi động hợp lệ có chứa địa chỉ bắt đầu của hệ điều hành được lưu trữ, tức là nó có phải là MBR hợp lệ (Bản ghi khởi động chính) hay không. Nếu MBR hợp lệ, HĐH sẽ được sao chép vào bộ nhớ (RAM) từ đó trên HĐH sẽ đảm nhiệm việc quản lý Bộ nhớ và Quy trình.



2

Bootstrapping còn có một ý nghĩa khác trong bối cảnh học tăng cường có thể hữu ích cho các nhà phát triển, ngoài việc sử dụng nó trong phát triển phần mềm (hầu hết các câu trả lời ở đây, ví dụ như bởi kdgregory ) và sử dụng trong thống kê như Dirk Eddelbuettel đã thảo luận .

Từ Sutton và Barto :

Widrow, Gupta và Maitra (1973) đã sửa đổi thuật toán Least-Mean-Square (LMS) của Widrow và Hoff (1960) để tạo ra một quy tắc học tập củng cố có thể học hỏi từ các tín hiệu thành công và thất bại thay vì từ các ví dụ đào tạo. Họ gọi đây là hình thức học tập thích ứng với bootstrap chọn lọc và mô tả nó là học tập với một nhà phê bình, thay vì học tập với một giáo viên. Họ đã phân tích quy tắc này và chỉ ra làm thế nào nó có thể học chơi blackjack. Đây là một bước đột phá tách biệt trong học tập củng cố bởi Widrow, người có đóng góp cho việc học có giám sát có ảnh hưởng lớn hơn nhiều.

Cuốn sách mô tả các thuật toán gia cố khác nhau trong đó giá trị đích dựa trên một xấp xỉ trước đó là các phương thức bootstrap:

Cuối cùng, chúng tôi lưu ý một thuộc tính đặc biệt cuối cùng của các phương thức DP [Lập trình động]. Tất cả đều cập nhật các ước tính về các giá trị của các trạng thái dựa trên ước tính các giá trị của các trạng thái kế tiếp. Đó là, họ cập nhật các ước tính trên cơ sở các ước tính khác. Chúng tôi gọi đây là bootstrapping ý tưởng chung . Nhiều phương pháp học tăng cường thực hiện bootstrapping, ngay cả những phương pháp không yêu cầu, như DP yêu cầu, một mô hình hoàn chỉnh và chính xác về môi trường.

Lưu ý rằng điều này khác với tổng hợp bootstrap và sự bùng nổ trí thông minh được đề cập trên trang wikipedia về bootstrapping.


1

Về mặt sử dụng Twitter Bootstrap phổ biến, tôi cảm thấy kiểu bootstrapping này là hành động tích hợp một thành phần mô-đun vào một ứng dụng Web mà không cần ứng dụng Web phải thừa nhận thành phần mô-đun tồn tại cho đến khi nó cần hoặc tham chiếu nó .

Nhà phát triển có thể tích hợp liền mạch một bản sao mặc định của chủ đề CSS Twitter Bootstrap bằng cách tải (tham chiếu) nó vào ứng dụng Web. Vũola! Sau đó, bạn có thể cần ghi đè một số thay đổi này, nhưng bạn có thể thực hiện theo cách sao cho tài nguyên / thành phần không bị ảnh hưởng và hoàn toàn có thể sử dụng lại.

Khái niệm tương tự này là cách các Dev Web triển khai API jQuery, v.v., nhưng nó không thực sự được Devs thể hiện như bootstrapping mỗi se. Những gì nó làm là cải thiện tính linh hoạt và khả năng sử dụng lại trong khi cho phép cách ly các thành phần / tài nguyên khác nhau của ứng dụng cư trú tự do trên cùng một máy chủ hoặc có thể trên CDN.

LƯU Ý: Trong điện toán, các giao dịch bootstrapping với MBR và trong UNIX, nó yêu cầu trình quản lý hoặc bộ tải khởi động đặc biệt là một chương trình nhỏ trong ROM tải HĐH vào RAM. Nếu bạn nghĩ về nó, khái niệm tương tự diễn ra trong hoạt động của trình tải bootstrap kiểm tra MBR và tải HĐH dựa trên bảng này xảy ra mà HĐH không có ý tưởng nào về việc này xảy ra.


0

Tôi thuộc thế hệ đã bật công tắc để vào chương trình khởi động. Đầu những năm 1980, tôi đã làm việc trên một máy vi tính có tên Micro-78, được phát triển bởi Electronics Corporation of India Ltd (ECIL). Đó là một bản sao của Altair 8800. Tôi nhớ rõ điều gì xảy ra khi một chương trình khởi động nhỏ được nhập bằng các công tắc bật tắt và được thực hiện bằng cách nhấn một nút. Chương trình đọc một chương trình khởi động thứ hai có trong rãnh thứ nhất của đĩa mềm và ghi đè lên chính nó theo cách mà chương trình khởi động thứ hai bắt đầu thực thi để tải hệ điều hành đĩa. Tôi nghĩ thuật ngữ "bootstrap" dùng để chỉ quá trình này của chương trình khởi động đầu tiên đọc và ghi đè lên chương trình khởi động thứ hai trên chính nó, theo cách "tự kéo lên" với chức năng bổ sung của chương trình khởi động thứ hai.


-3

Là một người mới bắt đầu khiêm tốn trong thế giới lập trình, và lướt qua tất cả các câu trả lời ở đây sau khi thấy từ này được sử dụng rất nhiều theo những cách hơi khác nhau ở những nơi khác nhau, tôi thấy đọc trang Wikipedia trên Bootstrapping (duh! Tôi không nghĩ đến lúc đầu, nó rất hữu ích để hiểu sự khác biệt trong cách sử dụng từ này. Có thể là ...... trong những dịp cực kỳ hiếm hoi ...... Wikipedia thậm chí có thể có những giải thích tốt hơn về các thuật ngữ nhất định hơn .... (được giải thích lại)? Họ sẽ mang lại điểm rep trên Wikipedia chứ?

Đối với tôi, dường như tất cả đều có ý nghĩa gì đó: bắt đầu với thứ gì đó đơn giản nhất có thể Thing1, làm cho thứ gì đó phức tạp hơn một chút với Thing2, và bây giờ bạn có thể sử dụng Thing2 để thực hiện một số loại nhiệm vụ hiệu quả và nhanh chóng hơn bạn có thể ban đầu với Thing1. Sau đó lặp lại từ Thing2 đến Thing 3 ad infinitum ...

Tôi thấy nó có mối liên hệ chặt chẽ với cả tiến hóa sinh học và 'Lớp trừu tượng' (những người mới như tôi thấy, ahem, Wikipedia, ho) - sự tiến hóa từ máy tính của năm 1940 với các công tắc, mã máy, hội, C, Python, AI bạn có thể cung cấp tất cả các loại hướng dẫn phức tạp để thích "biến bữa tối% 4 ^% thành yêu cầu mặc định của tôi & ^ $% và làm sạch sàn nhà bạn% $ £" @: ~ "trong tiếng địa phương tiếng Anh hoặc tiếng Amazon say sưa mà không cần ngoại lệ '(Đối với người mới một lần nữa ... bạn đã đoán ra) - đã bỏ lỡ rất nhiều liên kết ở đó do sự thiếu hiểu biết đơn giản.

Sau đó, trong một số ý nghĩa phần mềm cụ thể: Ý nghĩa1: Thing1 được sử dụng để tải phiên bản mới nhất của Thing2 (vì tất nhiên Thing2 sẽ lớn hơn Thing1, giống như Thing3 sẽ lớn hơn Thing2).

Ý nghĩa2: Thing1 là ngôn ngữ cấp thấp hơn (gần với 1001011100 .... 011001 so với in ("Xin chào", user.name)) được sử dụng để viết một chút ngôn ngữ cao hơn của Thing2, sau đó một chút của Thing2 là được sử dụng để mở rộng Thing2 từ cấp độ từ vựng của bé sang cấp độ từ vựng của người lớn (Thing2 bắt đầu được xử lý hoặc sử dụng thuật ngữ chính xác 'được biên dịch', bởi phiên bản bé của chính nó (đó là một đứa trẻ thông minh!), trong khi phiên bản bé của Thing2 Bản thân nó tất nhiên chỉ có thể được biên soạn bởi Thing1, vì nó không thể tồn tại trước khi nó tồn tại, phải không!), sau đó phiên bản con của Thing2 biên dịch phiên bản Surly Teenager của Thing2, tại đó cộng đồng lập trình quyết định liệu các vấn đề của Surly Teenagers's '( thuật ngữ phần mềm và thuật ngữ ẩn dụ!) đáng để dành đủ thời gian giải quyết để được chấp nhận lâu dài,hoặc từ bỏ chúng đến (không chắc chắn nơi nào có sự tương tự ở đây).

Nếu có, thì Thing2 đã tự 'Bootstrapping' (có thể vài lần) từ khi còn nhỏ đến khi trưởng thành: "đứa trẻ là cha của người đàn ông" (Wordsworth, đề nghị đừng thử tra cứu trích dẫn hoặc tác giả trên Stack Overflow) .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.