Julia, un lenguaje de programación ¿con lo mejor de todos los

Anuncio
Julia, un lenguaje de programación
¿con lo mejor de todos los mundos?
Según la Wikipedia, Julia es un lenguaje de programación dinámico, de alto
nivel y alto rendimiento para cálculos científicos y técnicos con una
sintaxis similar a la de otros entornos de computación similares. Dispone de
un compilador avanzado, mecanismos para la ejecución en paralelo y una
extensa biblioteca de funciones matemáticas. La biblioteca, desarrollada
fundamentalmente en Julia, también contiene código desarrollado en C o
Fortran.
El lenguaje fue creado por Stefan Karpinski, estudiante graduado de la
Universidad de California, que estaba involucrado en una herramienta
simulación de redes que requería el uso de varios lenguajes de programación
diferentes. Curiosamente, ninguno de los lenguajes usados podía hacer toda la
tarea, todo el proceso. Por ello, Karpinski, junto con su compañero de
universidad Viral Shah y Jeff Bezanson del MIT, decidieron resolverlo
diseñando un nuevo lenguaje que fuera compatible con prácticamente cualquier
tarea. La meta de Karpinski y su equipo es construir un lenguaje único que
haga todo bien.
En este lenguaje, bautizado como Julia, las bibliotecas están escritas en
Julia y se integra lo mejor del código de C y Fortran en los siguientes
rubros: álgebra lineal, generación de números al azar, procesamiento de
señales y procesamiento de strings (cadenas de caracteres). Además, la
comunidad de desarrolladores de Julia ha contribuido con una serie de
paquetes externos en muy poco tiempo. IJulia es una colaboración de IPython y
las comunidades de Julia, lo cual le da un navegador con una interfaz gráfica
basada en Julia,
Los programas de Julias se organizan definiendo funciones y sobrecargando las
mismas para diferentes combinaciones de tipos de argumentos, los cuales
pueden ser definidos por el usuario.
Un resumen de las características de Julias son:
Posibilidad de definir el comportamiento de una función con una combinación
de tipos de argumentos
Sistema dinámico de tipos: tipos para documentar, optimizar y ejecutar
rutinas. Buen desempeño, el cual se aproxima (estadísticamente) a lenguajes
como C manejador de paquetes interconstruido. Macros como en LISP y otras
metafacilidades de programación. Se pueden llamar funciones de Python vía
llamadas a PyCall
Llamada a funciones de C directamente. No se necesita nada más. Capacidades
poderosas de Shell para manejar otros procesos. Diseñado para computación
distribuida y en paralelo.
Tipos definidos por el usuario que son rápidos y compactos como si fuesen
interconstruidos.
Generación automática de código especializado, eficiente, de acuerdo al tipo
de argumentos que de pasan
Conversiones elegante y extensibles así como promoción de tipos numéricos y
otros tipos
Soporte para Unicode
Licencia MIT : libre y de código abierto
La cuestión es si esta idea tendrá éxito. Los programadores tienden a irse a
lenguajes más que probados, amén de tener un soporte generalizado. Desde
luego que en esta selva de lenguajes de programación, hay para todos, pero
falta ver si Julia puede madurar y convencer a los programadores de sus
bondades.
www.asociacionaepi.es
Mozilla nos trae su nuevo lenguaje de
programación llamado Rust
Rust es un nuevo lenguaje de programación multiparadigmático que está siendo desarrollado por
Mozilla. Según se puede leer en su sitio oficial, el objetivo de este nuevo lenguaje es
diseñar e implementar un lenguaje de sistemas seguro, concurrente, práctico y estático.
El desarrollo del lenguaje, fue empezado en 2006 por Graydon Hoare, y en 2009, la fundación
Mozilla, se involucró en el proyecto. Además de Hoare, hay otros desarrolladores detrás como
son el miembro del comité Ecma, Dave Herman, y el CTO de Mozilla y creador de JavaScript,
Brendan Eich.
Por ahora se conoce poco sobre el código, pero se puede ver algo de sintaxis en la FAQ de
Rust. Os pongo un trozo de código.
iter pairs()-> tup(int,int){
let int i =;
let int j =;
while(i <10){
put tup(i, j);
i +=1;
j += i;
}
}
fn main(){
let int i =10;
let int j =;
for each (tup(int,int) p in pairs()){
log p._0;
log p._1;
check (p._0 +10== i);
i +=1;
j = p._1;
}
check(j ==45);
}
Las características que nos aportará este nuevo lenguaje, han sido resumidas por los
desarrolladores de Mozilla.
Orientado a seguridad
Memoria de seguridad, para evitar bugs que sirvan como brechas de seguridad. Gestión
automática de guardado.
Control de las modificaciones. Inmutables por defecto. El estado de mutabilidad no se comparte
entre tareas.
Ejecución dinámica de seguridad: errores, registros, etc.
Capacidad para definir invariantes complejas
Orientado a la concurrencia
Control de la memoria explícita. Control de localización y de etiquetas.
Tareas de peso muy ligero. Facilidad para convertir miles en millones.
Stack iterators
Compilación nativa y estática. Emite archivos ELF / PE / Mach-o
Una interfaz simple y directa para C.
Orientado a la práctica
Multiparadigmático, totalmente funcional, concurrente, OO
Funciones de primera clase con vínculos
Multiplataforma. Desarrollado para Windows, Linux, OSX
Cadenas UTF8
Funciona con cadenas nativas existentes. GDB, Balgrind, Shark, etc
Permite romper normas en la práctica, si es explícito dónde y cómo
Como se ha comentado, es un proyecto aún en desarrollo, por lo que no podemos ofrecer mucha
más información, solo esperar a que por parte de Mozilla vayan sacando más información al
respecto.
Las diez tecnologías mejor pagadas que
un programador puede aprender
Un estudio publicado recientemente basándose en la base de datos del buscador de
empleos tecnológico, Dice, muestra un interesante pulso de la industria del
desarrollo y la valoración de cierta tecnologías, de acuerdo al salario que las
empresas pagan a los profesionales.
Entre los principales puntos a destacar:
Una tremenda especialización entre los profesionales de la analitica y la
minería de datos.
El posicionamiento de Bigdata entre las tecnologías mejor valoradas.
El dominio de las tecnologías de backend frente a las tecnologías frontend o
aplicaciones móviles.
Ranking de tecnologías mejor pagadas
R: un lenguaje y entorno de programación para análisis estadístico y gráfico.
Proporciona un amplio abanico de herramientas estadísticas para el análisis
de comportamientos. Es uno de los pilares para el análisis de grandes datos
en el concepto más amplio de Bigdata. Si queréis empezar a aprender algo de
R, os aconsejamos, la versión en español de R for Beginners, traducido por
Jorge A. Ahumada.
NoSQL: el conjunto de bases de datos y sistemas de almacenamiento
contrapuesto al sistema tradicional de bases de datos relacionales. Existen
un amplio abanico de tecnologías y módelos como sistemas de grafos,
documentos, orientadas a objetos, a colummnas, clave-valor, etc… Entre ellas
nos encontramos con Redis, MongoDB, Cassandra, Neo4J, DynamoDB, etc…
MapReduce: es un modelo de programación para procesar grandes cantidades de
datos, en forma paralela y en clusters. Está compuesto por el proceso
de Map() para el filtrado y de Reduce() para el procesado. Podemos
encontrarnos con tecnologías como Hadoop.
PMBok: uno de los estándares de gestión de proyectos más extendidos del
mundo. En el se basan distintos master que certifican a jefes de proyectos y
gestores en la industria del software. Más enfocado a la parte de gestión que
a la desarrollo de software.
Cassandra: una de las tecnologías NoSQL que mencionábamos más arriba con un
fuerte posicionamiento en el mercado. Desarrollada inicialmente por Facebook
en 2008 y que se describe como un modelo de datos BigTable. Sus principales
usarios son grandes compañías como Twitter o la propia Facebook.
Onmigraffle, más orientado a profesionales de usabilidad que programación,
pero se cuela sorprendentemente en el ranking. Se trata de una herramienta
para crear diagramas, gráficas de flujo, ilustraciones, etc… Similar a
Microsoft Visio, pero que se posicionar fuertemente para construir todo tipo
de diseños y wireframes por los expertos en usabilidad, bastante bien
valorados
Pig: volvemos a referirnos a Bigdate y MapReduce con esta herramienta
construida con la intención como plataforma por encima de Hadoop para el
análisis de datos. Incialmente desarrollada por Yahoo, ahroa pertenece a la
fundación Apache.
Service Oriented Arquitecture (SOA): esta es una de las habilidades o
conocimientos más amplio basados en el patrón de diseño y arquitectura de
aplicaciones SOA: las aplicaciones se sustentan en servicios totalmente
independientes que encajan con otros para formar funcionalidades más amplias.
Hadoop: Otra más para apuntar en el conjunto relacionado con BigData. Un
modelo de almacenamiento y análisis de grandes cantidades de datos cuyo
sistema es HDFS. Sus usos principales son el clustering de datos y aplicar
técnicas de MapReduce
MongoDB: una de las bases de datos NoSQL más ampliamente usadas. Parte de su
popularidad viene gracias a su modelo basado en documentos y JSON de
almacenamiento que hacen bastante cómodo su uso y tratamiento.
Después de confeccionar este ranking, quizás la industria de software en España
sea muy distinta. Pero no viene mal conocer y echar un vistazo estas tecnologías
que están en la punta de lanza en otros mercados como el norteamericano. Quizás
en unos años tengamos que pegarnos más en serio con ellas, sobre todo
con Bigdata que, como vemos, difiere mucho del estado casi en pañales de España.
Las aplicaciones en HTML5 todavía no
alcanzan a las nativas
De esto trata el documento publicado por Forrester. Un artículo en el que
intenta explicar cómo satisfacer la demanda de la próxima generación, y la
estrategia de desarrollo móvil que hay que seguir, que no es otra que HTML5 y
Responsive Design.
Todos los programadores que se dedican hoy en día al desarrollo de software para
dispositivos móviles, se encuentran con un problema en común. Un problema que
para los usuarios es una ventaja, pero que para otros es un auténtico quebradero
de cabeza. Se trata del tamaño de las pantallas de nuestros aparatos de
bolsillo.
Forrester realizó una encuesta a 146 estadounidenses responsables de IT en
octubre de 2013 sobre las tecnologías móviles que utilizaban. En lo más alto
estaba HTML5 y Responsive Design. Más del 40% de los encuestados señaló que
usaban ambos.
Gracias a esta encuesta hemos podido ver que el diseño de aplicaciones
desarrolladas en HTML5 no es una panacea, sino todo lo contrario. De hecho , una
de las respuestas de la encuesta del informe señala que el 59% de las
aplicaciones móviles desarrolladas únicamente en HTML5, sufrieron retrasos en
sus plazos de entrega. Donde la mayor cantidad de tiempo se pierde en pruebas y
corrección de errores.
Por todos es conocido que las aplicaciones nativas son más rápidas que las
programadas en HTML5. De esto gran parte de culpa la tienen los navegadores
móviles, que no se actualizan como deberían. Mientras que algunos sistemas
operativos móviles que se construyen con HTML5, como Firefox OS, son demasiado
lentos para ser considerados por los desarrolladores.
Además, otras investigaciones han demostrado que el interés de los
desarrolladores por crear software en HTML5 se ha ido perdiendo para su uso
general, aunque la mayoría piensa que sigue siendo una de las principales
opciones para que formen una pequeña parte de otras aplicaciones.
Se libera Dart 1.1
Hace apenas un par de meses se liberó la versión 1.0 de Dart. Hoy sale la
versión 1.1 que promete mejor desempeño, más características, así como
herramientas mejoradas. En un artículo de Seth Ladd, anunciando la salida de
Dart 1.1, indica que es más rápido que Javascript por un 25% más o menos.
Dice Ladd: “Dart continúa brillando. El desempeño en las pruebas hechas por
Richards hablan de un 25% más rápido a favor de la primera versión, haciendo
el runtime comparable con el de Javascript original. El desempeño de nuevo
benchmark, FluidMotion se ha duplicado desde noviembre. Dart2js ahora genera
Javascript que trabaja al menos tan bien, si no es que mejor que el
equivalente idiomático de Javascript”.
Las notas de Ladd indican que hay un número de mejoras para el lado del
servidor de Dart, incluyendo soporte para archivos grandes, copia de
archivos, manejadores de procesos de señales e información de la consola. Hay
nuevo soporte ara el User Datagram protocol (UDP), cuya intención es permitir
a los desarrolladores escribir aplicaciones de streaming más eficientes, así
como documentación para el soporte de las línea de comandos y las
aplicaciones desde el lado del servidor de Dart.
Las actualizaciones del editor de Dart incluyen depuración mejorada,
implementación de código y más herramientas de descripción. En promedio, el
desempeño del editor y el analizador también han mejorado.
Descargar