Node.js no se debe comparar con Narwhal, en su lugar, se debe comparar con Rhino. Al igual que Rhino, Node.js es un intérprete de JavaScript.
Node.js se ajustan a la especificación CommonJS para los módulos, por lo que todas las bibliotecas son compatibles con CommonJS. Parece que Narwhal también es compatible con CommonJS, lo que significa que podrían usarse en Node.
Pero primero mire los módulos estándar de Node, ya que parece que hay mucha coincidencia con Narwhal. También, echar un vistazo a la lista de módulos de 3 ª parte para Node.js:
respuesta adicional:
Ah, ahora veo. Narwhal es realmente como el Nodo. Dijiste que Narwhal es un marco que me echó. Ahora veo que no es así. De hecho, la página de introducción dice que puedes ejecutar frameworks como Nitro encima del intérprete de Narwhal.
La diferencia entre Narwhal y Node es básicamente que Narwhal usa una arquitectura de motor javascript conectable, mientras que Node solo usa V8. Ambos son javascript "shells" propiamente dicho (vamos a llamarlos así por ahora para evitar confusiones con el término "intérprete").
No estoy seguro de cuán lejos se pueden tomar las bibliotecas CommonJS escritas para cualquiera de las plataformas y usarlas en la otra plataforma. Supongo que ciertamente todas las libs JS puras son compatibles. El nodo utiliza un modelo de E/S sin bloqueo, por lo que es posible que algunos módulos binarios para Narwhal no funcionen correctamente en Node.
Sin embargo, el nodo recalca la programación del estilo de devolución de llamada (para aprovechar al máximo las E/S sin bloqueo). Para un programador experimentado de JS esto no es un problema ya que estamos acostumbrados a setTimeout()
, XMLHttpRequest
etc. De hecho, como un experimentado programador de JS, prefiero el estilo de Node. Narwhal siente demasiado como C.
Ejemplos:
Esto es lo que quiero decir con los diferentes "sensación" del nodo sobre Narwhal.
En Narwhal, el ejemplo para sorber un archivo es:
var fs = require("file");
var data = fs.read(myfilename); /* code stops at this point
* until all data is read
*/
/* process data here */
En Node.js es:
var fs = require('fs');
fs.readFile(myfilename, function(err,data) {
/* process data here */
});
/* readFile returns immediately and code continues
* executing while file is being read
*/
Al igual que setTimeout
, la lectura de archivos en el Nodo es asíncrona (código de su necesidad esperar a que el disco duro busque y lea datos durante los cuales puede ejecutar otras partes de código).
"...una clase de aplicaciones que no se pueden escribir eficazmente con IO bloqueante, como juegos que mantienen su estado en la memoria del servidor y comunicación con varios clientes. " esto parece una afirmación fuerte - Estoy de acuerdo en que NodeJs es muy probable que más adecuado para escribir este tipo de aplicaciones, pero no llegaría a decir que, en general, "no se pueden escribir de manera eficiente" con hilos y API de bloqueo. – oberhamsi
"Los módulos de entrada y salida de Narwhal son bloqueados, al igual que las bibliotecas estándar para Python , Ruby, Tcl ... "Me gustaría no saber que la E/S estándar de Tcl no es bloqueante (o más precisamente se puede usar de una manera que no bloquea) y ha sido así desde la década de 1990. – slebetman
aparte de esta (vieja) pregunta, Narwhal parece haberse convertido en un proyecto abandonado. –