Come si confronta Parrot con altre macchine virtuali?
-
06-07-2019 - |
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?
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.