http://qiita.com/akira_/items/55cf1f5911b14e265c6f Inspiré par cet article, j'ai écrit la version Nim et la version C.
Le résultat de fibonacci (45)
environnement
CPU: Intel Core i7-6700
RAM: 8GB x2
WebBrowser: Google Chrome 57.0.2987.98 (64-bit)
Language | Elapsed |
---|---|
JavaScript | 19.176 |
C Wasm | 4.357 |
Rust Wasm | 4.354 |
Nim Wasm | 4.359 |
Veuillez noter que les résultats ne sont collés qu'une seule fois et que les résultats changeront en fonction de l'environnement d'exécution et de chaque exécution.
# Nim
import os
import times
import strutils
proc fibonacci*(n: int64): int64 =
if n <= 1'i64:
1'i64
else:
fibonacci(n - 1'i64) + fibonacci(n - 2'i64)
proc main() =
let args = commandLineparams()
let n = args[0].parseInt()
echo "fibonacci($#) = $#" % [$n, $fibonacci(n.int64)]
main()
// C
#include <stdint.h>
#include <inttypes.h>
#include <stdio.h>
#include <stdlib.h>
int64_t fibonacci(int64_t n) {
if (n <= 1) {
return 1;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
int main(int argc, char** argv) {
int n = atoi(argv[1]);
printf("fibonacci(%d) = %" PRId64 "\n", n, fibonacci(n));
return 0;
}
Dans l'article ci-dessus, il semble qu'il a été construit à l'aide de l'image Docker, mais j'ai utilisé celui installé sur Xubuntu sur la machine virtuelle en utilisant emsdk comme environnement de construction.
J'omettrai l'installation de compilateurs pour divers langages tels que Rust et Nim.
http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html Téléchargez emsdk depuis, décompressez-le et mettez-le dans votre PATH.
Après avoir traversé le CHEMIN
$ emsdk update
$ emsdk install sdk-incoming-64bit
$ emsdk activate sdk-incoming-64bit
Vous pouvez installer et activer Emscripten lui-même avec.
** Addenda ** Après ça
$ source emsdk-portable/emsdk_env.sh
J'ai oublié d'écrire ce dont j'ai besoin, je vais donc l'ajouter. Je pense qu'il est bon de l'écrire dans ~ / .profile etc. ** Addendum ici **
Concernant Emscripten, s'il s'agit de sdk-incoming-64bit
, l'indicateur de version de WebAssembly semble être 1.0 correctement. (Au 14 mars 2017)
La mise en garde ici est que non seulement les builds Emscripten mais aussi LLVM et Clang s'exécutent, ce qui prend du temps et consomme beaucoup de mémoire. En ce qui concerne la mémoire, traitons-y en préparant un swap ou en préparant une grande quantité en premier lieu. (Je l'ai traité en allouant 10 Go de mémoire à la VM)
Tout ce que vous avez à faire est d'exécuter le compilateur pour votre langage.
# C
$ emcc -O3 -s WASM=1 -o fib-c.js fibonacci.c
# Rust
$ rustc -O --target=wasm32-unknown-emscripten -o fib-rust.js fibonacci.rs
# Nim
$ nim c -d:release -d:emscripten -o:fib-nim.js fibonacci.nim
Pour Nim, placez le nim.cfg suivant dans le même répertoire que la source.
@if emscripten:
cc = clang
clang.exe = "emcc"
clang.linkerexe = "emcc"
clang.options.linker = ""
cpu = "i386"
warning[GcMem]= off
passC = "-s WASM=1"
passL = "-s WASM=1"
@end
J'ai comparé quatre langages: JavaScript, C, Rust et Nim, mais cet article est peut-être quelque chose que j'ai écrit pour intéresser Nim. Actuellement, il semble que le seul langage que WebAssembly puisse faire est C / C ++ / Rust, mais j'apprécierais que vous sachiez que Nim peut également le faire. (Je ne sais pas si GC fonctionne correctement ...)
Même avec Nim, vous pouvez manipuler le DOM en utilisant jsbind
.
En particulier, Nim a GC, donc je pense que c'est plus facile à écrire que C / C ++ / Rust, donc j'aimerais que ce soit une option en tant que langage qui peut être facilement accéléré avec WebAssembly.
Nous avons créé un site sur lequel vous pouvez comparer WebAssembly afin que vous puissiez facilement l'essayer avec votre navigateur.
https://snowlt23.github.io/wasm-bench-site/
C'est une construction approximative, mais j'espère que vous pouvez ressentir l'atmosphère en la déplaçant pour le moment.
En guise de mise en garde, je fais une analyse comparative du point de vue de Wasm parce que c'est une construction grossière, et à cause de cela, si N est petit, il est plus lent que JavaScript. Nous recommandons environ «40 <= N <= 46».
Je suis une personne qui tombe malade chaque fois que j'écris du JavaScript, alors j'espère que le jour viendra où il deviendra courant que différentes langues fonctionnent sur le Web.
Recommended Posts