Pyroeis vs JavaScript

Fengari 0.1.5, interpreted Pyroeis, compiled numeric Lua and native JavaScript running the same algorithms. Everything runs in your browser, right now.Fengari 0.1.5, Pyroeis interprété, Lua numérique compilé et JavaScript natif sur les mêmes algorithmes. Tout s’exécute dans votre navigateur, maintenant.

Pyroeis normally interprets Lua bytecode in JavaScript. Its optional numeric compiler converts supported functions and complete numeric loops into JavaScript that your browser can optimize. This page measures both execution modes against hand-written JavaScript. To move a Lua program to JavaScript for good, try the Lua to JavaScript translator. Algorithms outside the supported subset are marked Interpreter fallback.Pyroeis interprète normalement du bytecode Lua en JavaScript. Son compilateur numérique optionnel convertit les fonctions prises en charge et les boucles numériques complètes en JavaScript que votre navigateur peut optimiser. Cette page mesure les deux modes d’exécution face à du JavaScript écrit à la main. Pour porter durablement un programme Lua vers JavaScript, essayez le traducteur Lua vers JavaScript. Les algorithmes hors du sous-ensemble pris en charge sont marqués Repli interpréteur.

Ready. A full run takes about 10 to 30 seconds and the page may freeze briefly while each Lua benchmark runs.Prêt. Une série complète prend environ 10 à 30 secondes et la page peut se figer brièvement pendant chaque benchmark Lua.
BenchmarkTest JavaScript Fengari 0.1.5 Pyroeis interpretedPyroeis interprété Compiled LuaLua compilé Interpreter / JSInterpréteur / JS Pyroeis speedupAccélération Pyroeis Time, log scaleTemps, échelle log Same resultMême résultat
JavaScriptFengari 0.1.5Pyroeis interpretedPyroeis interprétéCompiled LuaLua compilé

MethodMéthode

Upstream Fengari uses 32-bit integers while Pyroeis supports a wider integer range. These inputs keep integer intermediates within the shared signed 32-bit range; the pseudo-random generator explicitly uses floats for its larger products. No checksum differences are hidden or excluded.Fengari amont utilise des entiers 32 bits tandis que Pyroeis accepte une plage d’entiers plus large. Ces entrées gardent les intermédiaires entiers dans la plage commune des 32 bits signés ; le générateur pseudo-aléatoire utilise explicitement des flottants pour ses plus grands produits. Aucune différence de checksum n’est masquée ni exclue.

Each benchmark uses the same input size and returns a checksum; the last column checks all four measured modes. The upstream adapter calls the Fengari 0.1.5 C API and includes its host call overhead, just as Pyroeis timings include vm.call; this is a comparison of these integrations, not an isolated measurement of interpreter internals. Every mode gets an untimed warm-up. Each timed sample repeats the function for at least 80 ms, then divides by the number of calls; the median sample is reported. This keeps short expressions measurable despite browser clock rounding. Interpreter times include vm.call overhead; compiled times include the guards in the callable returned by vm.compile.Chaque benchmark utilise la même taille d’entrée et renvoie un checksum ; la dernière colonne vérifie les quatre modes mesurés. L’adaptateur amont appelle l’API C de Fengari 0.1.5 et inclut son coût d’appel hôte, tout comme les temps Pyroeis incluent vm.call ; il s’agit d’une comparaison de ces intégrations, pas d’une mesure isolée des entrailles de l’interpréteur. Chaque mode bénéficie d’un échauffement non chronométré. Chaque échantillon chronométré répète la fonction pendant au moins 80 ms, puis divise par le nombre d’appels ; l’échantillon médian est affiché. Les expressions courtes restent ainsi mesurables malgré l’arrondi de l’horloge du navigateur. Les temps interpréteur incluent le coût de vm.call ; les temps compilés incluent les gardes de l’appelable renvoyé par vm.compile.

Lua loading and compilation happen outside the timed samples. Numeric compilation supports arithmetic, locals and integer numeric for loops; calls, tables and branches use the interpreter. Fallback rows show no compiled timing and are excluded from the compiler summary. The Pyroeis speedup column divides the Fengari 0.1.5 time by the Pyroeis time, using the compiled time when it exists and the interpreted time otherwise. A browser policy that blocks dynamic JavaScript compilation also causes fallback. Pyroeis opens only base, string, table and math. The upstream adapter opens the standard libraries and removes debug, io, os, package and file loaders. No execution budgets are enabled during timings; numeric compilation is intentionally disabled under limits.Le chargement et la compilation Lua ont lieu hors des échantillons chronométrés. La compilation numérique prend en charge l’arithmétique, les locales et les boucles for numériques entières ; appels, tables et branchements utilisent l’interpréteur. Les lignes en repli n’affichent pas de temps compilé et sont exclues du résumé du compilateur. La colonne d’accélération Pyroeis divise le temps de Fengari 0.1.5 par celui de Pyroeis, en prenant le temps compilé s’il existe et le temps interprété sinon. Une politique navigateur qui bloque la compilation JavaScript dynamique provoque aussi un repli. Pyroeis n’ouvre que base, string, table et math. L’adaptateur amont ouvre les bibliothèques standard et retire debug, io, os, package et les chargeurs de fichiers. Aucun budget d’exécution n’est actif pendant les mesures ; la compilation numérique est volontairement désactivée sous limites.

The algorithmsLes algorithmes