Esistono linguaggi di programmazione gestiti che vengono compilati in base al codice macchina?

StackOverflow https://stackoverflow.com/questions/1213043

  •  06-07-2019
  •  | 
  •  

Domanda

Le lingue gestite sono quelle che gestiscono la pulizia della memoria per te.

MODIFICA Non sto parlando della raccolta dei rifiuti. Ero solo interessato a conoscere le lingue che avrebbero libero () memoria per me automaticamente, e comunque compilato fino al codice macchina.

È stato utile?

Soluzione

Sembra che tu sia confuso " gestito " e "raccolta dei rifiuti", mentre spesso le lingue gestite (ad esempio C # e Java) hanno la raccolta dei rifiuti automatizzata, "gestita" in realtà si riferisce al fatto che esiste una "macchina virtuale" che esegue il tuo codice (vedi http://en.wikipedia.org/wiki/Managed_code ) .

Quindi, ad esempio, CLR (Common Language Runtime) è la macchina virtuale che esegue il codice .Net e JVM (Java virtual machine) è la macchina virtuale che esegue il codice java.

Puoi infatti avere Garbage Collection per le lingue non gestite (ad esempio C ++ ) e viceversa hanno gestito le lingue senza garbage collection (EDIT: ne cercavo alcune ma non riesco a trovarne nessuna a meno che Obiettivo C conta, non sono sicuro che abbia un senso enorme creare un linguaggio gestito senza garbage collection)

Sia Java che C # possono infatti essere compilati direttamente nel codice macchina, quindi vengono eseguiti direttamente e non usano una macchina virtuale - per il codice .Net questo viene fatto usando NGEN (in realtà il CLR compila gli assiemi .Net nella macchina codice mentre lo esegui, la cosiddetta compilazione "just in time"

EDIT: Come aggiornamento all'aggiornamento della tua domanda, ci sono in effetti una serie di alternative alla garbage collection in uno spettro tra l'estremo della gestione manuale completa della memoria e la garbage collection, e un molte lingue compilate in codice macchina incorporano varie forme di gestione della memoria che non richiedono di liberare esplicitamente la memoria.

Posso chiedere: è un "fuori interesse"? domanda, o stai cercando di selezionare una lingua per un progetto? Se quest'ultimo è allora perché sei così interessato a compilare la tua lingua in codice macchina? Certamente nel caso in cui .Net abbia il codice JIT compilato offre una serie di vantaggi in termini di prestazioni (nella maggior parte dei casi), anche NGENing del codice non rimuove la dipendenza dal framework .Net.

Altri suggerimenti

lotti:

LISP (e varianti), Erlang, C # (sotto Mono), Haskell, Java (con gcj)

Sicuro ci sono. Java, per esempio. (Gcj)

Tuttavia, il termine stesso gestito implica che devi portare un po 'di tempo di esecuzione.

Qualche altro, nel senso più ampio di " gestito " significa sicuro (tramite controllo del tipo di runtime o analisi statica esaustiva) e / o immondizia raccolta:

  • OCaml
  • D
  • Ada
  • Prolog
  • Pulizia
  • Eiffel

Analogamente alla risposta di Efraims, qualsiasi programma .NET verrà compilato anche in codice macchina, di solito in 2 passaggi (JIT) ma esiste uno strumento NGEN per precompilare MSIL in nativo.

Esiste una scelta semi-GC: GLIB.

Gilb usa il conteggio dei riferimenti per gestire la durata dell'oggetto. Quando il conteggio di rifrazione incontra 0, un oggetto viene pulito.

È molto più inconsistente di .NET, Java o Python, ma quando devi usare C, è meglio di niente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top