Hace 9 años | Por nomeves a infoworld.com
Publicado hace 9 años por nomeves a infoworld.com

La empresa de nginx tiene planes para utilizar JavaScript como lenguajes de aplicaciones para su servidor web. Nginx (pronunciado "engine x") tiene una base instalada de 140 millones de sitios compitiendo e incluso superando a servidores web de Microsoft y Apache. Además atrajo la atención de Canonical, el cual ha decidido soportarlo en su distribución Ubuntu Linux Server.

Comentarios

Libertual

#17 Go no es javascript , punto para node.js

morzilla

#19 Go no es javascript , punto para Go

D

#15 NOSQL no es un reemplazo a MYSQL en absoluto.

Sobre node.js y npm, lo soporta hasta EMACS. Bueno, EMACS soporta hasta cafeteras así que...

#17 Go es primo hermano de Plan9/9front . Y su concurrencia no tiene nada que ver con lo que andáis acostumbrados.

Aunque eso de crear binarios estáticos y que rulen siempre, mola.

Y es idea de Plan9, igualmente.

A ver para cuando los namespaces del mencionado SO en Linux. Ya tardan.

D

Míralo, el del 502 Bad gateway de las narices.

D

#1 ¿Scripts largos?

vazana

#33 > Mi opinión es que necesitamos lenguajes compilados mejores y mas simples pero más expresivos

De acuerdo con esto, aunque personalmente Go no me gusta.

#30 > javascript es mucho más hermoso que PHP o java.

De acuerdo con esto, pero los tipos estáticos de Scala ayudan a leer lo que ha escrito otro y a usarlo. Trabajar con otra gente (incluyendo tu futuro tú) con tipos dinámicos es más complicado y requiere documentar bien, algo que no siempre se hace.

#32 ¿quién usa swing hoy? Tiene más sentido embeber un servidor web y usar el navegador, como hace el typesafe activator.

#25 tienes clojurescript si quieres, pero a "la gente normal" no le gusta la sintaxis de lisp. Con Julia parece que quieren hacer algo con la potencia de Lisp, la eficiencia de C y la sintaxis de Python. No sé si lo conseguirán, pero no suena mal.

dreierfahrer

#35
De acuerdo con esto, pero los tipos estáticos de Scala ayudan a leer lo que ha escrito otro y a usarlo. Trabajar con otra gente (incluyendo tu futuro tú) con tipos dinámicos es más complicado y requiere documentar bien, algo que no siempre se hace.


Pero que vas a documentar en javascript!!!! si no hay ni clases!

ktzar

#37 En Go tampoco hay clases y claro que se documenta. Javascript se puede documentar perfectamente.

Pero, volvemos a un problema clásico: documentación. Documentar el código es una tontería y, la verdad, no vale para nada. TDD. TDD. TDD... es la única solución. Si la documentación no está viva, no vale de nada.

Las ventajas de la documentación y los comentarios "inline" son la mayor mentira que se enseña en las universidades... Se enseña tanto, que lleva meses conseguir sacarle esa basura a los programadores que llegan a mi empresa.

Vamos, 100 veces mejor que "La función limpiaString sustituye los espacios por barras bajas, pero devuelve false si no se pasa nada" es tener:

```function testLimpiaString() assertFalsy(limpiaString(""));
assertEquals("hola-mundo", limpiaString("hola Mundo"));
">
```

dreierfahrer

#39 Pero, volvemos a un problema clásico: documentación. Documentar el código es una tontería y, la verdad, no vale para nada.

Eso SI que es una tonteria y es vivir en los mundos de yupi.

La documentacion es FUN-DA-MEN-TAL. Hasta en los servicios REST si quieres que los use alguien que no seas tu (y donde pone 'tu' pon 'fuera de tu empresa').

Y no hay nada mas util que una API descrita en JavaDoc.

El codigo dentro de funciones? desde luego que es sintoma de que hay algo mal y debe desaparecer, pero fuera indica lo que hace la funcion/clase sin que tengas que leerte y traducir al lenguaje natural las toneladas de pruebas que haya (o no) de ella....

vazana

#37 ni falta que hacen, puedes hacer objetos con métodos y atributos, pero estaría bien especificar qué métodos implementan esos objetos, a ser posible de forma que el IDE lo detecte y avise si hay problemas.

#39 mucho mejor: un sistema de tipos, para reducir la cantidad de tests necesarios y comprender más fácilmente estructuras más complejas, como lo que menciona #40.

ktzar

#40 #41 Los programadores no suelen ser muy buenos explicando con palabras qué hace cierto código, ni nada en general. Y aunque lo fueran, los tests describen perfectamente y de forma matemática, lógica, y viva, qué es lo que hace cierto código. No se puede "alejar" del comportamiento del código, porque entonces falla. En cambio, ¿cuántas veces habéis sufrido código cuyo comentario no describe perfectamente, porque el código cambió, o porque el que escribió el comentario no lo hizo correctamente? Es imposible probar que un comentario está mal escrito, o deja de tener validez. En cambio, si eso pasa con un test, no pasa.

Otra cosa son los tutoriales tipo librillo sobre cómo usar un API, o definir un servicio REST, pero comentar el código es contraproducente. ¿Qué es lo que más se aprovecha de esas documentaciones? Los ejemplos, y los tests son ejemplos que sabes que están al día. No digo que a veces no sea necesario comentar ciertas cosas, pero hay que ver cada linea de comentario como un error, como un problema que hay que intentar solucionar.

#42 Los tests demuestran y ejercitan la lógica implementada en el código, las estructuras no se tienen porqué validar, si es que usas un lenguaje que soporta tipado fuerte.

Repito, ciclos TDD-refactor y code coverage. Es la única forma de saber que tu código hace lo que esperas, y comunicarlo a los demás en un idioma común: código. Y por cierto, los lenguajes que tienen una OOP clásica, tienen a ser difícilmente testeables, y es por eso que mucha gente está tendiendo a cosas como Go, donde el duck typing (que ni sé si tiene un nombre en castellano) chirría menos.

Un cordial saludo

dreierfahrer

#39 Vamos, 100 veces mejor que "La función limpiaString sustituye los espacios por barras bajas, pero devuelve false si no se pasa nada" es tener:

Pues no, para nada.

En un IDE mediocre la frase me aparecerá como pop-up cuando pase sobre el punto en el que estoy usando esa función. Sabré que hace mirando una frase que sale sola....

Lo que tu propones me hará ir a donde demonios este la prueba, buscar en ese archivo, mirar que de verdad es la función que estoy mirando, mirar el código, traducirlo a lenguaje humano (y son cuatro lineas, en lugar de una) y darme cuenta de que no es lo que busco pq realmente estoy buscando un método que me quite los diacríticos... Así que pasare a 'limpiaAFondoString' y volver a repetir el mismo mecanismo...

Los comentarios para las APIs son gloria bendita.

dreierfahrer

#24 Y lo que no mencionáis es que javascript a diferencia de los horrorosos java o php, es un lenguaje hermoso!

Javascript es el lenguaje mas ASQUEROSO que existe.

No conozco PHP -ni ganas-, conozco lo rigido que es java (lo cual en cierto modo es apreciable para hacer POO) y conozco mas lenguajes de programacion (C++, python, estoy mirando GO) y el lenguaje mas absurdo y horrible es Javascript sin duda...

Pocos lenguajes de programacion has de conocer para decir que javascript es hermoso... por dios si es un lenguaje 'orientado a objetos' que no tiene ni clases!

Java te hace escribir un monton de lineas que, realmente, son innecesarias pero te permite hacer unas estructuras MUY complejas y que alguien que venga detras de ti sepa que cojones estas haciendo... Eso en javascript no se puede hacer, es tan mierdoso que solo vale para cosas sencillas...

Y lo de siempre, sino cojes y me dices algun buen IDE para desarrollar javascript... que en 20 años habran hecho alguno no? a, no? pues eso.

#26 de tu enlace:

JavaScript was already painful enough in the browser, why on earth anyone ever thought it was a good idea to use it on the server boggles the mind.


Te prometo que es algo que me pregunto a diario...

#33 Me encanta python, hago todo lo que puedo en python... pero python es MUCHO mas lento que java.... MUCHO.

Java, en benchmarks, es comparable a C++ (mas lento, si, pero esta en el mismo orden) e incomparablemente mas repido que python (como te dicen por ahi arriba es un orden de magnitud mas lento).

Aun asi python es perfectamente valido para hacer casi cualquier cosa (que no tenga multithreading, claro), pero es indiscutiblemente mas lento que java...

ktzar

#36 Javascript es una maravilla de lenguage, su flexibilidad tiene cosas alucinantes... Y para entender lo de los contextos no hay más que asimilar dos axiomas:

- Una función es un string con código
- `this` es diferente si llamas a una función que es un atributo de un objeto, que está en una variable, o si usas apply. That's all.

Javascript no es orientado a objetos, si no a prototipos. Y claro que hay IDEs para Javascript, Webstorm es uno, por ejemplo. Lo que no quita para ver las cosas buenas en Ruby (expresividad), Golang (carencia de OOP traditional y muy buen multithreading y sincronización), Python, C, o Java...

D

#36 Poner a Java al mismo nivel que C++ es de risa.

Sobre todo con optimizaciones del compilador.

Solo compara Minetest con Carbone (c++) vs Minecraft.

Mientras que Minetest le ha tirado a un colega con un P4 con una gráfica de cuando el GTA3 con requisitos mínimos, MC ni arrancaba.

D

#33 Go se compila. Y hay structs.

D

Todo parece converger hacia Javascript cada vez más y más como script de programación para la web.

n

#2 Y hay grandes framework en javascript como angularJS que son una maravilla.

w

#2
#7 Y Mozilla sacrificó a su creador Brendan Eich en el altar de lo políticamente correcto

n

#8 Ahora igual se lo están pensando.

Shotokax

#8 para ti la homofobia no pasará de ser algo "políticamente incorrecto". Yo creo que es algo más.

w

#53 Existe una diferencia muy grande entre no estar de acuerdo con la legalización del matrimonio entre gente del mismo sexo y pedir que los quemen en la hoguera.

Shotokax

#54 existe una diferencia muy grande entre ser homófobo y, necesariamente, pedir que quemen a alguien en la hoguera.

w

#55 Estar en contra del matrimonio gay no implica ser homófobo.

Shotokax

#56 eso lo dices tú. Yo no estoy de acuerdo.

dreierfahrer

JAVASCRIPT APESTA

En mayusculas y negritas.

D

#13 Javascript es un hijo bastardo de Lisp. Y traga CPU que da asco.

D

#24 Hubiera preferido HTML + LISP + JSON (ironicamente) en vez de HTML, JS y XML .

s

#25 sabes qué es el acrónimo json?

D

#27 Sí. Y JSON por sí mismo mola. El lenguaje, no.

Y se puede usar SIN Javascript.

s

#28 El lenguaje es expresivo... quizá el más expresivo... Y quizá por eso también puede ser el más horrible. No sé ((((LISP)))), pero sí sé que es el padre conceptual de javascript... pero sé otros lenguajes y son mucho más feos, mucho menos expresivos e inflexibles que javascript.

El secreto del éxito de javascript está en ello, es un lenguaje hermoso, flexible y expresivo. Puedes programar javascript siguiendo varios paradigmas, con varias lógicas, los errores del lenguaje los puedes corregir con el propio lenguaje... Creo que por eso javascript es el lenguaje del presente y quizá lo sea del futuro.

JSON mola porque JSON es javascript. La expresividad de javascript permite la expresividad de JSON, por eso todos los lenguajes han creado librerías para transformar sus menos expresivos modelos de objetos, al modelo de objetos de javascript.

No vas a hacer con javascript lo que haces con C, para eso está C. Pero si en algún momento puedes hacer con javascript lo que haces con PHP o java, hazlo con javascript; javascript es mucho más hermoso que PHP o java.

D

#30 No me gustan ni PHP ni Java.

De hecho me está gustando Go ya que la forma de gestionar procesos es similar a la de plan9, donde estoy haciendo pinitos en C (todo lo que sabía en Win/Linux lo he tenido que "reaprender") .

#31 JVM es lenta, muy lenta. Está lejos por ejemplo, de Python con GTK en fluidez si miramos SWING.

D

#27 Si te soy sincero como lenguaje JS no es tan malo como XML en el tratamiento de datos, pero la verdad, hasta que google no sacó su V8 JS era un truño lento de cojones.

Sobre JSON, ojalá los de Gnome metan json en la config en vez de xml.

s

#29 Eso no es fallo del lenguaje, es fallo del intérprete. Si tienes un lenguaje interpretado hermoso como python, con un intérprete que fuera un truño, todo el mundo diría que el lenguaje es un truño.

Javascript es hermoso por su estructura y su flexibilidad. Si hasta hace unos años los intérpretes eran un truño es otra cosa...
Quién usaría java si la jvm fuera lenta!!!

vazana

#22 ¿traga CPU comparado con qué? En los benchmarks que he visto es lo más eficiente que hay con tipado dinámico. Sólo tres veces más lento que C. Eso no es nada...

difusion
D

parece ser que emplearían js para pequeños scripts en la configuración.

sería un poco absurdo competir con node.

Así que el mundo sigue como hasta ahora: fullstack MEAN, y reverse proxy nginx

Por cierto, si en el server solo teneis un back no necesitáis reverse proxy, es posible usar los puertos 80 y 443 sin ser root con un comandito.

s

#49 Yo entiendo un namespace como un conjunto de objetos que trabajan bajo un marco común que los diferencias de otros marcos...

En javascript es inmediato crear espacios de nombre encapsulando en function o en un objeto. Puedes equivocarte sin darte cuenta? Pues claro, el precio de la flexibilidad es ese. En Java no te puedes equivocar... es tan feo el lenguaje que no te deja ninguna libertad. Puedes conseguir un "namespace" sin "name"!

Sobre la herencia prototipal... Qué es heredar? extender las propiedades de una clase para que una clase hija obtenga las de su clase padre?.... o heredar es obtener un prototipo de un modelo con un apuntador a dicho prototipo?

Si no te gusta la sintaxis ObjetoHijo.prototype = new Objeto() no tienes que usarla, puedes escribirlo de otro modo. Si no te gusta la sintaxis Class A extends B en otros lenguajes... qué otra sintaxis usas???

También a mí me encanta python. Python es el lenguaje en que programaría profesionalmente si de mi dependiera... y es el que más me gusta... junto a javascript, de los pocos que conozco.

Pero las funciones lambda en python son poco flexibles, y en javascript son magníficas.

Python tiene la comprensión de listas, algo hermoso por definición... javascript no las tiene... pero alguien reescribe el lenguaje con el propio lenguaje en cofeescript y las tiene! Cuántos lenguajes permiten reescribirse a sí mismos para tener las características de otros lenguajes??? Eso es la flexibilidad, expresividad y la belleza de la que hablo sobre javascript.

Hay otros lenguajes mejores? Seguro... otros más expresivos? habrá. Otros más expresivos muy usados y populares? lo dudo...

dreierfahrer

#c-50" class="content-link" style="color: rgb(227, 86, 20)" data-toggle="popover" data-popover-type="comment" data-popover-url="/tooltip/comment/2282478/order/50">#50 En javascript es inmediato crear espacios de nombre encapsulando en function o en un objeto

Lo cual no deja de ser un atentado a la legibilidad fruto de una carencia de JS.

Python tiene la comprensión de listas, algo hermoso por definición... javascript no las tiene... pero alguien reescribe el lenguaje con el propio lenguaje en cofeescript y las tiene! Cuántos lenguajes permiten reescribirse a sí mismos para tener las características de otros lenguajes??? Eso es la flexibilidad, expresividad y la belleza de la que hablo sobre javascript.

Generalmente UN MONTON por no decirte que TODOS... asi a bote pronto C, C++, VB.net, ironpython, c#, java, grovy, scala.... Todos van en la misma VM.... Que me dices que algunos 'no compilan al mismo lenguaje sino que van sobre una VM'? pues es que, realmente, no les hace falta pq no son lenguajes de programacion horrorosos como JS.

De hecho la mera existencia de lenguajes que compilan a javascript es la prueba viviente de que javascript es insufrible. Es un 'no aguanto JS y hago alternativas pq esto es innaguantable'


Si no te gusta la sintaxis ObjetoHijo.prototype = new Objeto() no tienes que usarla, puedes escribirlo de otro modo. Si no te gusta la sintaxis Class A extends B en otros lenguajes... qué otra sintaxis usas???


Si yo leo 'Class A extends B' se exactamente lo que ocurre y se que no ocurrira que A extenda a B si no leo eso, si tengo 50 maneras de hacer algo tan basico como la herencia y un proyecto por el que han pasado 20 manos me voy a cagar pq cada uno va a haber hecho cada cosa a su bola. No se necesitan 50 maneras de hacer 1 cosa, sino 1 manera clara de hacer 1 cosa.

Y ese es el gran problema de javascript: no sirve para cosas grandes.

morzilla

#51 Estoy muy de acuerdo con la mayoría de lo que dices, pero una puntualización:

la mera existencia de lenguajes que compilan a javascript es la prueba viviente de que javascript es insufrible

La existencia de lenguajes que compilan a JavaScript, en algunos casos, se debe a que JavaScript es "el lenguaje ensamblador de la web". No compilan a JavaScript porque JavaScript sea maravilloso ni horroroso, sino porque es el único lenguaje que se puede ejecutar en cualquier navegador.

Ejemplos:
- Compilación de Java a JavaScript.
- Compilación de C, C++ y otros lenguajes a JavaScript con Emscripten/ASM.js.

Es de locos. Una chapuza tras otra. Pero funciona y es la única forma de hacerlo hoy en día: aplicaciones que corren en un navegador con performance cada día un poco más cercana a la de escritorio. Vamos, el Unreal corriendo en Chrome

D

52
Eres subnormal profundo.
Los tests no demuestran nada y no quiero tocar ni con un palo de 100 mil millones de kilométros cuadrados de sección ni de longitud cualquier cosa que hayas programado.

Mismamente los tests pueden quedar anticuados ante un cambio de funciones o refactorizado de código. Así pues tienes doble trabajo: cambiar el código y cambiar los tests.

Es más, los tests pueden estar mal hechos por lo que tu fe ciega en los tests te fallaría absolutamente, dando falsos positivos o negativos, según el caso.

Y bueno, defender a muerte el JavaScript es otro sinsentido cuando el mismo nombre del lenguaje denota claramente para qué hay que usarlo. Es un puñetero lenguaje para hacer scripts, ni más ni menos.

Que se haya montado todo lo que se ha montado alrededor de JS es porque la mayoría de programadores web SON PARA PASARLOS POR LAS CÁRNICAS Y NO SABEN NI HACERTE UN QUICKSORT USANDO UNA CANTIDAD DE MEMORIA DEL ORDEN O(n) (el óptimo es O(log n)).
Porque la verdad, la web actual da puñetero asco con el abuso del JS (antes se abusaba del Flash).

Pero bueno, ahí tenemos JS haciéndose con el poder como un cáncer: GNOME 3 admite extensiones escritas en JavaScript (viva el rendimiento) y los navegadores no lo han pasado precisamente bien tratando de asimilar el extenso uso que se está haciendo de JS. Y ahora los de Nginx pretenden adoptar también a JS para meterle aplicaciones.

Nova6K0

Javascript, es decir de lo más usado para crear malware. Por eso existen herramientas como NoScript y similares.

Salu2

s

Javascript, osease el lado del cliente, en donde es posible manipular el código... lo digo porque creo que, por ejemplo, jQuery permite hacer llamadas AJAX a cualquier "servicio" y eso es una forma de exponerse ya que va en el código... se conoce alguna nivel/framework/work-around de ofuscación/cifrado que ofrezca esta arquitectura? Está claro que tener código en el lado del cliente es guay para algunas cosas, pero no trago que valga para todo.

D

#6

CORS lleva tiempo implementado en los ultimos navegadores y en practicamente todos los servidores.

Sandevil

#15 Claro, y gracias a los IDEs que hay para ese lenguaje tan usado, como por ejemplo: NINGUNO.
No he mencionado los ides en ningun momento, estas desviando el tema.

"La mayoria" no usa NoSQL, basicamente pq la mayoria NO necesita NoSQL. Y node... no te flipes... Node, actualmente y espero que por mucho tiempo, es de hipsters.... Hablo del fullstack, estas desviando el tema. Curioso que arremetas contra node, cuando soluciona en bastantes aspectos tus quejas sobre packages.

Respeto tu odio a javascript pero no lo comparto.

D

#15 Cuantas tonterías en tan poco espacio! Node.js esta soportado no sólo por Eclipse, incluso por Visual Studio, el mejor IDE que conozco. Infórmate antes de soltar sandeces.
cc/ #16

Galero

#5 Estás en el siglo XX todavía

vazana

Por cierto, para todos los que se quejan de Javascript, tiene orden superior decente, sólo por eso ya es mejor que Java. En realidad cualquier cosa es mejor que Java, el lenguaje hecho para que millones de personas en India trabajen por la remota posibilidad de ir de vacaciones a Java (la isla).

dreierfahrer

#43 A que te refieres con 'orden superior'?

s

#44 Poder devolver funciones, eso en lo que javascript es más flexible porque viene de LISP. Java es orientado a objetos, puro y duro, no es más que eso. Javascript es orientado a objetos, procedimental, funcional, declarativo... según cómo lo quieras programar. Por eso es flexible.

Javascript te permite crear un factory real... no un factory simulado como java. En Java tú creas una estructura complejísima para que te devuelva los objetos que le pides. En javascript creas una función que te devuelve funciones constructoras de los objetos que quieres... eso es una factoría de objetos como dios manda:

https://docs.angularjs.org/guide/providers
http://stackoverflow.com/questions/14324451/angular-service-vs-angular-factory

y no esto:
http://es.wikipedia.org/wiki/Factory_Method_%28patr%C3%B3n_de_dise%C3%B1o%29

Javascritp no tiene clases, porque no hace falta... tiene objetos, todo son objetos.
Quieres el equivalente a una clase? lo puedes crear:
https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object/create

Incluso, por su expresividad, puedes reformar el lenguaje para hacer que la sintaxis se te parezca a lenguajes con clases (en prototype.js, creo recordar, lo hacían de una forma similar):

Class.create("MiClase", ,
function miMetodo2()
});

var unaClase = MiClase();
unaClase.miMetodo1(); //blabla

dreierfahrer

#47 Cojo tu comentario y le doy la vuelta:

Java tiene clases definidas y una estructura OO clara y facilmente entendible y ampliable.

Java no devuelve funciones pq no lo necesita, ademas mira lo flexible que es que hay patrones de diseño creacionales como factory, abstract factory y builder que son perfectamente conocidos por todos, y que permiten que no le haga falta devolver una funcion...

Incluso se consigue un codigo mas claro en ese sentido!!!!

Con esto te quiero decir que si jugamos a 'tiene unas cosas y las cosas que no tiene las puede solventar' a eso puede jugar todo el mundo...

Me encanta python pq puedes hacer una factory real, es mas, te permite hacer un hashmap de funciones... eso mola, joder! Pero es que ademas te permite hacer clases, herencias... y todo de una manera super agil! No ves? con python no tengo que decir 'pero puedes solventarlo asi'

Pero a javascript le hace falta poder definir estructuras bien... Prototipar es horrible. Los callbacks son horribles. El hecho de que no haya namespaces te permite sobreescribir funciones sin darte cuenta, las variables globales que tiene apestan, IEEE754 apesta... Hay un monton de cosas que apestan de javascript que no apestan de otros lenguajes.