http://qiita.com/akira_/items/55cf1f5911b14e265c6f Inspiriert von diesem Artikel habe ich die Nim-Version und die C-Version geschrieben.
Das Ergebnis von "Fibonacci (45)"
Umgebung
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 |
Bitte beachten Sie, dass die Ergebnisse nur einmal eingefügt werden und sich die Ergebnisse abhängig von der Ausführungsumgebung und jeder Ausführung ändern.
# 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;
}
Im obigen Artikel scheint es, dass es mit dem Docker-Image erstellt wurde, aber ich habe das auf Xubuntu auf der VM installierte mit emsdk als Build-Umgebung verwendet.
Ich werde die Installation von Compilern für verschiedene Sprachen wie Rust und Nim weglassen.
http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html Laden Sie emsdk von herunter, entpacken Sie es und fügen Sie es in Ihren PFAD ein.
Nach dem Durchgang durch den Pfad
$ emsdk update
$ emsdk install sdk-incoming-64bit
$ emsdk activate sdk-incoming-64bit
Sie können Emscripten selbst mit installieren und aktivieren.
** Nachtrag ** Danach
$ source emsdk-portable/emsdk_env.sh
Ich habe vergessen zu schreiben, was ich brauche, also werde ich es hinzufügen. Ich denke, es ist gut, es in ~ / .profile usw. zu schreiben. ** Nachtrag zu hier **
In Bezug auf Emscripten scheint das Versionsflag von WebAssembly, wenn es "sdk-incoming-64bit" ist, korrekt 1.0 zu sein. (Stand 14. März 2017)
Die Einschränkung hierbei ist, dass nicht nur Emscripten-, sondern auch LLVM- und Clang-Builds ausgeführt werden, was zeitaufwändig ist und viel Speicher verbraucht. In Bezug auf das Gedächtnis wollen wir uns damit befassen, indem wir zunächst einen Tausch oder eine große Menge vorbereiten. (Ich habe 10 GB Speicher der VM zugewiesen)
Sie müssen lediglich den Compiler für Ihre Sprache ausführen.
# 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
Platzieren Sie für Nim die folgende Datei nim.cfg im selben Verzeichnis wie die Quelle.
@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
Ich habe vier Sprachen verglichen: JavaScript, C, Rust und Nim, aber dieser Artikel könnte etwas sein, das ich geschrieben habe, um Nim zu interessieren. Derzeit scheint die einzige Sprache, die WebAssembly kann, C / C ++ / Rust zu sein, aber ich würde es begrüßen, wenn Sie wissen könnten, dass Nim dies auch kann. (Ich bin nicht sicher, ob GC richtig funktioniert ...)
Selbst mit Nim können Sie das DOM mit jsbind
bearbeiten.
Insbesondere hat Nim GC, daher denke ich, dass es einfacher zu schreiben ist als C / C ++ / Rust. Daher möchte ich, dass es eine Option als Sprache ist, die mit WebAssembly leicht beschleunigt werden kann.
Wir haben eine Website erstellt, auf der Sie WebAssembly vergleichen können, damit Sie es einfach mit Ihrem Browser ausprobieren können.
https://snowlt23.github.io/wasm-bench-site/
Es ist eine grobe Konstruktion, aber ich hoffe, Sie können die Atmosphäre spüren, indem Sie sie vorerst bewegen.
Als Einschränkung, ich vergleiche aus Wasms Sicht, weil es eine grobe Konstruktion ist, und aus diesem Grund ist N, wenn es klein ist, langsamer als JavaScript. Wir empfehlen etwa 40 <= N <= 46.
Ich bin eine Person, die jedes Mal krank wird, wenn ich JavaScript schreibe. Ich hoffe, dass der Tag kommt, an dem es für verschiedene Sprachen zur Gewohnheit wird, im Web zu arbeiten.
Recommended Posts