Domanda

Parrot è la macchina virtuale originariamente progettata per Perl 6.

Quali capacità tecniche offre la VM Parrot a macchine virtuali concorrenti come Java Virtual Machine (JVM) / Hotspot VM e Common Language Runtime (CLR) mancano?

È stato utile?

Soluzione

La seguente risposta è stata scritta nel 2009. Vedi anche questo aggiornamento 2015 di raiph .

Per espandere su @Reed e sottolineare alcuni punti salienti, i codici operativi di Parrot sono a un livello molto più elevato rispetto alla maggior parte delle macchine virtuali. Ad esempio, mentre la maggior parte delle macchine memorizza numeri interi e float, i registri di base sono numeri interi, numeri, stringhe e cookie Parrot Magic (PMC). Il solo fatto di avere stringhe integrate è un passo avanti rispetto alla JVM.

Più interessante è il PMC, un po 'come il tipo di oggetto di JVM ma molto più fungibile. I PMC sono un contenitore per tutti gli altri tipi più complicati di cui hai bisogno un vero linguaggio come array, tabelle, alberi, iteratori, I / O ecc. Il PMC e la grande varietà di op incorporate significa meno lavoro per lo scrittore di lingue. Parrot non evita i frammenti disordinati ma necessari di implementazione di un linguaggio.

Le mie informazioni potrebbero non essere aggiornate, ma credo che i codici operativi siano inseribili, puoi spedire una macchina virtuale Parrot che contenga solo i codici operativi richiesti dalla tua lingua. Sarebbero stati anche ereditabili, se la tua lingua vuole che i loro array funzionino un po 'diversamente dagli array di Parrot di serie, puoi farlo sottoclassandolo.

Infine, Parrot può essere scritto non solo in assemblatore ( PASM ) ma anche un linguaggio di livello leggermente superiore, Parrot Intermediate Representation (PIR) . PIR ha loop, subroutine, variabili localizzate e alcune operazioni matematiche e di confronto di base, tutte le basi che le persone si aspettano in un linguaggio di programmazione, senza allontanarsi troppo dal metal.

Tutto sommato, Parrot è molto amichevole con i progettisti di lingue (è scritto da e per loro) che vogliono progettare una lingua e lasciare il più possibile dell'implementazione a qualcun altro.

Altri suggerimenti

Puoi leggere gran parte di questo nella Parrot VM Intro pagina

Il vantaggio principale che Parrot ha rispetto alla JVM o al CLR sarebbe che è progettato per supportare prima i linguaggi dinamici e potenzialmente fornire un supporto e prestazioni migliori per i linguaggi tipizzati dinamicamente. JVM e CLR sono entrambi orientati maggiormente a supportare linguaggi tipicamente statici, e molte delle decisioni progettuali lo dimostrano.

Un'altra cosa che rende Parrot diverso dalla maggior parte delle macchine virtuali (sicuramente diversa dalla JVM), è che è una macchina di registro piuttosto che una macchina stack. Ma penso che le persone discuteranno a lungo se questo può essere chiamato un vantaggio o uno svantaggio.

Non conosco abbastanza JVM e CLR, ma i miei consigli:

  • supporto per linguaggi dinamici (chiusure, scalari polimorfici, continuazioni, co-routine) (velocità)
  • invio metodo dinamico,
  • funzioni di prima classe,
  • continuazioni di prima classe,
  • parametri (facoltativo, denominato, ..),
  • basato sul registro
  • ha l'interoperabilità di HLL fornita a livello di assembly
  • gamma di piattaforme

Aggiornamento: questo è probabilmente irrilevante poiché JVM è uno dei backend di Rakudo Perl 6 al giorno d'oggi. Vedi Rakudo Perl 6 su la JVM (calendario dell'Avvento Perl 6 2013, giorno 3).

  

Parrot è la macchina virtuale originariamente progettata per Perl 6.

Ora ci sono due VM originariamente progettate per Perl 6; si impegna a MoarVM iniziato nel 2012.

  

Quali capacità tecniche offre la VM Parrot che mancano alle macchine virtuali concorrenti come la Java Virtual Machine (JVM) / Hotspot VM e Common Language Runtime (CLR)?

In un'altra risposta su questa pagina , Reini Urban, l'attuale sviluppatore di Parrot (aprile 2015), fornisce una breve confronto di Parrot con JVM e CLR VM.

Secondo Reini , un vantaggio chiave che Parrot ha rispetto MoarVM è "efficacemente thread senza blocco".

Il vantaggio principale e la differenza tecnica rispetto alla JVM e al CLR è che i tipi ( classi chiamati PMC) e le operazioni ( metodi ) possono essere caricati dinamicamente da un efficiente utente- fornito implementazioni C e il framework parser per creare ed estendere le lingue è integrato.

Questa domanda è obsoleta. Rakudo Perl 6 non bersaglia più Parrot come backend; MoarVM è il backend preferito, con il backend JVM un work in progress (generalmente funziona, ma molte funzionalità di Perl 6 non implementate o attualmente non funzionanti). È in corso un lavoro di sviluppo (non pronto per gli utenti) per aggiungere Javascript come terzo back-end.

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