Auto-găzduire

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Auto-găzduirea este utilizarea unui program ca parte a lanțului de instrumente sau a sistemului de operare care produce versiuni noi ale aceluiași program - de exemplu, un compilator care își poate compila propriul cod sursă . Software-ul de auto-găzduire este obișnuit pe computerele personale și sistemele mai mari. Alte programe care sunt de obicei găzduite de sine includ nucleele, ansamblurile, interpreții de linie de comandă și software-ul de control al versiunilor.

Dacă un sistem este atât de nou încât nu au fost scrise programe pentru acesta, atunci software-ul este dezvoltat pe un alt sistem de auto-găzduire și plasat pe un dispozitiv de stocare pe care noul sistem îl poate citi. Dezvoltarea continuă în acest mod până când noul sistem își poate adapta în mod fiabil propria dezvoltare. Scrierea unor noi instrumente de dezvoltare software fără utilizarea unui alt sistem gazdă este rară și, în multe cazuri, impracticabilă.

Istorie

Primul compilator auto-hosting (cu excepția asamblatoarelor) a fost scris pentru Lisp de Hart și Levin la MIT în 1962. Au scris compilatorul Lisp în Lisp, testându-l într-un interpret Lisp. Odată ce compilatorul a fost îmbunătățit până la punctul în care și-a putut compila propriul cod sursă, acesta a fost auto-găzduit.

Tehnica este posibilă numai atunci când există deja un interpret pentru același limbaj care trebuie compilat. Acesta este inspirat de conceptul de a rula un program pe sine ca intrare, care este, de asemenea, utilizat în diferite teste în informatică teoretică, ca dovadă că problema terminării este indecidabilă.

Exemple

Ken Thompson a început dezvoltarea Unix în 1968 scriind și compilând programe pe GE-635 și portându-le pe PDP-7 pentru testare. După ce s-au finalizat kernel-ul inițial Unix, interpretul de linie de comandă, editorul, asamblarea și câteva utilitare, sistemul de operare Unix a fost auto-găzduit: programele puteau fi scrise și testate chiar pe PDP-7.

Dezvoltarea kernel-ului Linux a fost găzduită inițial de sistemul Minix . Odată ce au fost aduse suficiente pachete, cum ar fi GCC, GNU Bash și alte utilitare, dezvoltatorii pot lucra la versiuni noi ale nucleului Linux folosind o versiune mai veche a acestuia (de exemplu, compilează un nucleu 3.21 pe o mașină cu un nucleu 3.18). Această procedură poate fi utilizată și atunci când construiți o nouă distribuție Linux de la zero.

Multe limbaje de programare au avut implementări de auto-găzduire: compilatoare care sunt în limba respectivă pentru limba respectivă. Aceste limbi includ Ada , BASIC , C , C ++ [1] C # [2] , ClojureScript [3] , CoffeeScript , Dylan , F # , FASM , Forth , Gambas , Go , Haskell , HolyC, Java , Lisp , Modula-2 , OCaml , Oberon , Pascal , Python , Rust , Scala , Smalltalk , Vala și Visual Basic . [2]

În alte cazuri, implementarea inițială nu a fost găzduită de sine, ci mai degrabă scrisă în altă limbă (sau chiar în limbajul mașinii ); în alte cazuri, implementarea inițială a fost dezvoltată folosind bootstrapping .

Notă

  1. ^ gcc 4.8, LLVM / clang
  2. ^ a b Mono gmcs și Microsoft Roslyn
  3. ^ ClojureScript Next

Elemente conexe