Google anuncia una preview de Dart, su lenguaje para reemplazar JavaScript
Si seguís la cuenta de javaHispano en twitter ya estaréis al tanto de que Google lleva un tiempo trabajando en un nuevo lenguaje de programación: Google Dart. Se trata de un lenguaje que pretende ser una versión mejorada de JavaScript.
Ayer en la conferencia GotoCon Aarhus 2011 dos ingenieros de Google (Lars Bak, creador de V8, y Gilad Bracha) presentaron una versión preview de Dart, junto con herramientas de desarrollo para este lenguaje de programación. En estos momentos, Dart todavía no forma parte de Chrome, pero es de esperar que en el futuro cercano lo esté.
Su sintaxis es un tanto similar a la de Javascript, aunque tiene clases con herencia simple e interfaces. De modo opcional, puede emplearse tipado estático, soporta tipos genéricos, sobrecarga de operadores, lamdas y un modelo de concurrencia al estilo de los Actores de Erlang. Eso sí, el lenguaje sigue siendo "mono thread".
Aquí tenéis el problema de los números de Fibonacci implementado en Dart:
int fib(int n) { if (n <= 1) return n; return fib(n - 1) + fib(n - 2); } main() { print('fib(20) = ${fib(20)}'); }
Aquí tenéis un ejemplo de una clase:
class Point { Point(this.x, this.y); distanceTo(Point other) { var dx = x - other.x; var dy = y - other.y; return Math.sqrt(dx * dx + dy * dy); } var x, y; }
Y aquí un ejemplo de una interfaz:
interface Shape { num perimeter(); } class Rectangle implements Shape { final num height, width; Rectangle(num this.height, num this.width); num perimeter() => 2*height + 2*width; }
Un ejemplo de tipos genéricos:
main() { print(new List<String>() is List<Object>); print(new List<Object>() is List<String>); print(new List<String>() is List<int>); print(new List<String>() is List); print(new List() is List<String>); }
Un ejemplo de uso de concurrencia:
// Receive mensajes class Printer extends Isolate { main() { port.receive((message, replyTo) { if (message == null) port.close(); else print(message); }); } } //Envía mensajes main() { new Printer().spawn().then((port) { for (var message in ['Hello', 'from', 'other', 'isolate']) { port.send(message); } port.send(null); }); }
Si queréis jugar un poco con este lenguaje lo mejor es que empleéis una pequeña consola web interactiva que hay en la página web del proyecto. La consola permite escribir código Dart y ejecutarlo en la web, mostrando errores de ejecución bastante intuitivos. Además, trae una serie de ejemplos ya hechos que se pueden modificar. Aquí podéis ver un programaen dicha consola mostrando los 10 primeros números de la serie de Fibonacci:
Reader Comments (7)
Ayer noche me pasé un rato agradable trasteando con el nuevo engendro.
Además de lo comentado por Abraham, hay agregar que no solo piensan que funcione en el navegador, sino que una máquina virtual lo pueda ejecutar en el servidor. Eso me llama mucho la atención, ya que se podrían escribir códigos de validación que valieran tanto en cliente como en servidor. ¿Podrá funcionar en tablets o teléfonos? Los creadores lo insinuan.
Otras características del lenguaje que me agradaron mucho son:
- Tipos flexibles: puedes declarar una variable con var o con un tipo estricto.
- Constructores nominados (adicionales a los clásicos construtores anónimos)
var cosa = new Cosa.compleja("Dato1", "Dato2"),
- Constructores factoría. ¡Ah! Y los constructores sin cuerpo
Punto(this.x, this.y);
- El manejo de accesores (getters) y mutadores (setters) es mucho mas congruente y sencillo.
Por supuesto, ya hay críticas. Hay quién dice que era innecesario porque ya se está desarrollando ecma.next, o que no es buena idea meter otro lenguaje mas porque ya hay demasiados.
Yo creo que Dart no solo está apuntando a Javascript o a EcmaScript. ¿Querrá ser competencia de lenguajes como Groovy o Java? ¿Querrán usarlo en Android? Ni idea. Son solo especulaciones mías.
Cada tres meses, más o menos, un lenguaje nuevo.
Esta "Torre de Babel" va a necesitar que le refuercen los cimientos, o se caerá :)
Mientras tanto, las estadísticas de Tiobe muestran, mes a mes, dónde está el uso real de los lenguajes.
Me pregunto si dentro de 6 o 12 meses, este nuevo "invento" estará antes o después de la posición 50 en Tiobe. Teniendo en cuenta las posiciones que tienen algunos lenguajes, que ya llevan años en desarrollo y uso, y siempre logran "hacer bastante ruido" en los medios...
No los voy a mencionar por sus nombres, porque seguro que me tirarán piedras :D
Pues, a mí, me parece bien. Quizás estos lenguajes no lleguen a ninguna parte, pero pueden aportar ideas que puedan llegar a ser usadas en versiones más actuales de otros lenguajes.
¿Problemas? Los típicos de cualquier lenguaje nuevo. Si es capaz de aportar algún tipo de ventaja con respecto a lo ya disponible, y el rendimiento es bueno (recordemos a Go), pues, siendo un lenguaje flexible, y con una notación conocida, puede hacerse con su nicho.
Lo de que se pueda emplear tanto en el lado cliente como en el servidor me ha parecido, sencillamente, genial. Además, según la página del lenguaje, ya está soportado por Chrome y Firefox 4+.
Yo lo voy a seguir de cerca.
@choces
"Torre de Babel"
Curiosa analogía, en especial si piensas en...
Yahveh, para evitar el éxito de la edificación, hizo que los constructores comenzasen a hablar diferentes lenguas, luego de lo cual reinó la confusión y se dispersaron por toda la Tierra.
;-)
Un saludo,
Erlang no Erland. Erland suena a parque de diversiones. :D
Corregido, gracias.
No es la primera vez que escucho la analogía con la torre de Bábel... véanse el nivel de lenguas que hay en el mundo y cuando se intento crear el esperanto, ¿qué paso? La verdad, que tanto lenguaje es bueno por la diversidad, pero sí os fijáis tanta diversidad genera un alto grado de incomunicación...
En fin, al grano. A mí Google (debe ser que me tira el nombre) junto con Javascript me parece una combinación interesante, la verdad.
Saludos,