응용 프로그램 개발에 대한 논의에서 "부트 스트래핑"이 계속 나타납니다. 널리 퍼져있는 것처럼 보이지만 실제로 부트 스트랩이 무엇인지에 대한 잘못된 설명조차 나오지 않았습니다. 오히려 모든 사람들이 그것이 의미하는 바를 알고있는 것처럼 보입니다. 그래도 난 아니야 내가 알 수 있듯이 시작시 응용 프로그램에 필요한 초기화 작업과 관련이 있지만 완전히 틀릴 수 있습니다. 누구 든지이 아이디어를 이해하도록 도울 수 있습니까?
응용 프로그램 개발에 대한 논의에서 "부트 스트래핑"이 계속 나타납니다. 널리 퍼져있는 것처럼 보이지만 실제로 부트 스트랩이 무엇인지에 대한 잘못된 설명조차 나오지 않았습니다. 오히려 모든 사람들이 그것이 의미하는 바를 알고있는 것처럼 보입니다. 그래도 난 아니야 내가 알 수 있듯이 시작시 응용 프로그램에 필요한 초기화 작업과 관련이 있지만 완전히 틀릴 수 있습니다. 누구 든지이 아이디어를 이해하도록 도울 수 있습니까?
답변:
"부트 스트랩 (bootstrapping)"은 "자신의 부트 스트랩으로 자신을 끌어 당기는"이라는 용어에서 비롯됩니다. Wikipedia 에서 얻을 수있는 많은 것들 .
컴퓨팅에서 부트 스트랩 로더는 기계가 시작될 때 실행되는 첫 번째 코드이며 나머지 운영 체제를로드합니다. 현대 컴퓨터에서는 ROM에 저장되어 있지만 PDP-11의 부트 스트랩 프로세스를 기억합니다. 여기서 전면 패널 스위치를 통해 비트를 찔러 특정 디스크 세그먼트를 메모리에로드 한 다음 실행합니다. 말할 필요도없이, 부트 스트랩 로더는 일반적으로 매우 작습니다.
"부트 스트래핑"은 자체 또는보다 정확하게는 이전 버전을 사용하여 시스템을 구축하는 용어로도 사용됩니다. 예를 들어, ANTLR 버전 3은 ANTLR 버전 2에서 개발 된 파서를 사용하여 작성됩니다.
부트 스트랩의 예는 일부 웹 프레임 워크에 있습니다. index.php (부트 래퍼)를 호출 한 다음 프레임 워크 헬퍼, 모델, 구성을로드 한 다음 컨트롤러를로드하고 제어를 전달합니다.
보시다시피, 큰 프로세스를 시작하는 간단한 파일입니다.
부트 스트랩 에 관한 Wikipedia 기사를 참조하십시오 .
Computing의 의미를 설명하는 섹션과 링크가 있습니다 . 이 분야에서 네 가지 용도로 사용됩니다.
여기 인용문이 있지만 자세한 설명과 대체 의미에 대해서는 위의 링크를 참조하십시오.
"... 간단한 컴퓨터 프로그램이보다 복잡한 프로그램 시스템을 활성화시키는 기술입니다."
"부트 스트래핑이라는 용어의 다른 용도는 컴파일러를 사용하여 자체 언어를 컴파일하는 것입니다. 먼저 새로운 언어로 작성된 새로운 컴파일러의 더 많은 프로그램을 컴파일하기 위해 기존 언어로 새로운 프로그래밍 언어의 컴파일러의 작은 부분을 작성합니다."
"부트 스트래핑 (bootstrapping)"이라는 용어는 일반적으로 시스템 자체가 닭과 달걀 문제에 의존하기 시작하는 상황에 적용됩니다.
예를 들어 :
이 경우 부트 스트래핑은 일반적으로 외부 엔티티의 도움으로 순환 종속성을 깨는 방법을 의미합니다.
기타
응용 프로그램 개발과 관련하여 "부트 스트래핑"은 일반적으로 모듈 식 및 / 또는 자동 업데이트 가능한 소프트웨어에 대해 이야기 할 때 나타납니다.
사용자는 필요하지 않은 기능을 포함하여 전체 앱을 다운로드하고 업데이트가있을 때마다 다시 다운로드하고 수동으로 업데이트하는 대신 작은 "부트 스트랩"실행 파일 만 다운로드하여 시작합니다. 사용자가 필요로하는 응용 프로그램의 일부 또한 부트 스트랩 구성 요소는 업데이트를 찾아 시작할 때마다 설치할 수 있습니다.
알렉스, 부팅 할 때 컴퓨터가하는 일과 거의 비슷합니다. ( '부팅'은 실제로 부트 스트랩이라는 단어에서 나옵니다)
처음에는 BIOS의 작은 프로그램이 실행됩니다. 여기에는 더 크고 복잡한 프로그램을로드하고 실행하기에 충분한 머신 코드가 포함됩니다.
이 두 번째 프로그램은 NTLDR (Windows) 또는 LILO (Linux)와 같은 것으로 나머지 운영 체제를 실행하고로드 한 다음 실행할 수 있습니다.
완전성을 위해 리샘플링 / 시뮬레이션을 사용하여 표본에서 모집단 속성을 추론하는 통계에서 다소 중요하고 비교적 새로운 방법입니다. 부트 스트래핑 (통계)에 관한 긴 Wikipedia 기사가 있습니다.
사전 의미를 부여하는 부팅은 최소 리소스로 시작하는 것입니다. OS 컨텍스트에서 POST (Power On Self Test)가 CPU를 깨우기 위해 안전하다고 판단하면 OS를 신속하게로드 할 수 있어야합니다. 부팅 스트랩 코드는 BIOS에서 실행됩니다. BIOS는 작은 크기의 ROM입니다. 일반적으로 이것은 운영 체제를 RAM에로드하는 명령 세트로의 점프 명령입니다. 점프 대상은 하드 디스크의 부트 섹터입니다. 바이오스 프로그램이 확인되면 저장된 OS의 시작 주소를 포함하는 유효한 부팅 섹터, 즉 유효한 MBR (마스터 부팅 레코드)인지 여부입니다. 유효한 MBR이면 OS가 OS의 메모리 (RAM)로 복사되어 메모리 및 프로세스 관리를 처리합니다.
IMHO 첫 컴파일러는 어떻게 작성 되었는가에 대한 사실보다 더 나은 설명은 없습니다 .
요즘 운영 체제 로딩은 부트 스트랩이라고하는 가장 일반적인 프로세스입니다.
부트 스트랩은 강화 학습 과 관련 하여 소프트웨어 개발 (예 : kdgregory 등의 대부분의 답변 ) 및 Dirk Eddelbuettel에서 논의한 통계에서의 사용과 더불어 개발자에게도 유용 할 수있는 또 다른 의미를 갖습니다 .
에서 서튼과 바토 :
Widrow, Gupta 및 Maitra (1973)는 Widrow and Hoff (1960)의 LMS (Least-Mean-Square) 알고리즘을 수정하여 교육 예제 대신 성공 및 실패 신호에서 학습 할 수있는 강화 학습 규칙을 생성했습니다. 그들은 이런 형태의 학습을“ 선택적 부트 스트랩 적응 ”이라고하며“교사와의 학습”대신“비평가와의 학습”이라고 설명했다. 그들은이 규칙을 분석하고 블랙 잭 연주법을 배울 수있었습니다. 이것은 Widrow의 강화 학습에 대한 격리 된 계획으로, 감독 학습에 대한 기여는 훨씬 더 영향력이있었습니다.
이 책은 목표 값이 이전 근사를 기반으로 부트 스트랩 방법을 기반으로하는 다양한 강화 알고리즘을 설명합니다.
마지막으로 DP [Dynamic Programming] 방법의 마지막 특수 속성 중 하나에 주목합니다. 그들 모두는 후속 상태 값의 추정치에 기초하여 상태 값의 추정치를 갱신한다. 즉, 다른 추정치에 따라 추정치를 갱신합니다. 우리는이 일반적인 아이디어를 부트 스트랩 이라고 부릅니다 . 많은 강화 학습 방법은 부트 스트랩을 수행하지만 DP가 요구하는 완전하고 정확한 환경 모델을 필요로하지 않는 부트 스트랩을 수행합니다.
이것은 부트 스트랩의 위키 백과 페이지 에 언급 된 부트 스트랩 집계 및 인텔리전스 폭발과 다릅니다 .
대중적인 Twitter 부트 스트랩을 사용하는 것과 관련 하여이 유형의 부트 스트랩은 모듈 식 구성 요소가 필요할 때까지 참조하거나 참조 할 때까지 웹 응용 프로그램이 웹 응용 프로그램에 모듈 식 구성 요소를 통합하지 않고 모듈 식 구성 요소를 웹 응용 프로그램에 통합하는 동작이라고 생각합니다 .
개발자는 CSS 트위터 부트 스트랩 테마의 기본 복사본을 웹 응용 프로그램에로드 (참조)함으로써 완벽하게 통합 할 수 있습니다. 부 올라! 그런 다음 이러한 변경 사항 중 일부를 재정의해야 할 수도 있지만 리소스 / 구성 요소를 건드리지 않고 완전히 재사용 할 수있는 방식으로 그렇게 할 수 있습니다.
동일한 개념은 Web Devs가 jQuery API 등을 구현하는 방법이지만 실제로 Devs는 부트 스트랩 자체로 표현하지 않습니다. 그것이하는 것은 유연성과 재사용 성을 향상시키면서 앱의 서로 다른 컴포넌트 / 리소스를 격리하는 것이 동일한 서버 또는 CDN에 자유롭게 상주 할 수있게하는 것입니다.
참고 : 부트 스트랩을 계산할 때 MBR을 처리하고 UNIX에서는 OS를 RAM으로로드하는 ROM의 작은 프로그램 인 특수 부트 로더 또는 관리자가 필요합니다. 그것에 대해 생각하면 부트 스트랩 로더가 MBR을 확인 하고이 테이블을 기반으로 OS를로드하는 동작에서 동일한 개념이 발생합니다.
부팅 프로그램을 시작하기 위해 스위치를 뒤집은 세대에 속합니다. 1980 년대 초, ECIL (Electronics Corporation of India Ltd)이 개발 한 Micro-78이라는 마이크로 컴퓨터를 연구했습니다. Altair 8800의 일종의 복제품이었습니다. 토글 스위치를 사용하여 작은 부팅 프로그램을 입력하고 버튼을 눌러 실행하면 어떤 일이 발생하는지 분명히 기억합니다. 프로그램은 플로피 디스크의 첫 번째 트랙에 포함 된 두 번째 부팅 프로그램을 읽고 두 번째 부팅 프로그램이 디스크 운영 체제를로드하기 위해 실행을 시작하는 방식으로 자체적으로 덮어 씁니다. "부트 스트랩"이라는 용어는 첫 번째 부트 프로그램이 두 번째 부트 프로그램의 추가 기능으로 "풀업"되는 방식으로 두 번째 부트 프로그램을 읽고 덮어 쓰는이 프로세스를 의미한다고 생각합니다.
프로그래밍 세계에서 겸손한 초보자로서,이 단어가 다른 곳에서 약간 다른 방식으로 많이 사용 된 것을 본 후 여기에있는 모든 대답을 훑어 보면서 Bootstrapping의 Wikipedia 페이지를 읽었습니다. 처음 에는이 단어의 사용상의 차이점 을 이해하는 것이 유익합니다 . 극히 드문 경우 일 수 있을까요 ... 그래도 Wikipedia에서 담당자를 가져올 수 있습니까?
나에게 그것은 가능한 모든 의미가있는 것 같습니다 : 가능한 한 간단한 것으로 시작 Thing1, Thing2와 약간 더 복잡한 것을 만드십시오. 이제 Thing2를 사용하여 할 수있는 것보다 더 효율적이고 신속하게 어떤 종류의 작업을 수행 할 수 있습니다 원래 Thing1을 사용했습니다. 그런 다음 Thing2에서 Thing 3 ad infinitum까지 반복하십시오.
나는 생물학적 진화와 '추상 계층 (Layers of Abstraction)'(나와 같은 초보자, 아헴, 위키피디아, 기침)과 밀접한 관련이있는 것으로 본다. 스위치, 머신 코드, 어셈블리, C, 파이썬, AI를 갖춘 1940 년대 컴퓨터의 진화 "% 4 ^ % 저녁 식사를 내 기본 & ^ $ % 요구 사항으로 만들고 바닥을 청소하십시오. % $ £"@ : ~ "술 취한 영어 또는 아마존 부족 방언으로 '예외 없음' '(초보자에게는 다시 ... 당신은 짐작했습니다)-단순한 무지로 인해 많은 링크가 누락되었습니다.
그런 다음 특정 소프트웨어에서 의미 : 의미 1 : Thing1은 최신 버전의 Thing2를로드하는 데 사용됩니다 (물론 Thing2가 Thing2보다 크면 Thing2가 Thing1보다 커지기 때문입니다).
의미 2 : Thing1은 Thing2의 상위 언어를 약간 쓰는 데 사용되는 print ( "Hello,", user.name)보다 1001011100 .... 011001에 가까운 하위 언어입니다. Thing2의이 작은 비트는 Thing2 자체를 베이비 어휘 수준에서 성인 어휘 수준으로 확장하는 데 사용됩니다 (Thing2는 자체 버전의 아기 버전에 의해 처리되기 시작하거나 올바른 기술 용어 '컴파일'을 사용합니다 (영리한 아기입니다)) 그 자체는 물론 Thing1에 의해서만 컴파일 될 수 있고, 존재하기 전에 존재하지 않을 수 있습니다!), Thing2의 하위 버전은 Thing2의 Surly Teenager 버전을 컴파일합니다.이 시점에서 프로그래밍 커뮤니티는 Surly Teenager의 '문제'를 결정합니다 ( 소프트웨어 용어와 은유 용어!)는 장기적으로 받아 들일 수있는 충분한 시간을 소비 할 가치가 있습니다.또는 그들을 포기하기 위해 (여기서 비유 할 곳이 확실하지 않음)
그렇다면, Thing2는 어린 시절부터 성인까지 '부트 스트랩'된 것 같습니다 (아마도 그 아이는 그 남자의 아버지입니다). .