Conheça a linguagem de programação Julia

Julia é uma linguagem de programação dinâmica de alto nível projetada para atender os requisitos da computação de alto desempenho numérico e científico, sendo também eficaz para a programação de propósito geral.

Julia é escrito em C, C++, e Scheme, usando a estrutura do compilador LLVM, enquanto a maior parte da biblioteca padrão de Julia é implementado na própria Julia.

O desenvolvimento de Julia começou em 2009 e uma versão de código aberto foi divulgado em fevereiro de 2012. Alguns aspectos incomuns do projeto Julia incluem ter um sistema sofisticado, com tipos paramétricos dependentes de uma linguagem de programação totalmente dinâmico e adotando expedição múltipla como seu paradigma de programação do núcleo. Cada um desses recursos tem aparecido em dialetos Lisp , como Common Lisp e Dylan, mas a combinação dos dois em um único idioma é único ( ver recursos de linguagem ) . O aspecto mais notável da implementação da Julia é o seu desempenho, que muitas vezes é o dobro do código C , totalmente otimizado, colocando-o no reino de linguagens compiladas de alto desempenho.

Julia se inspira significativamente em Matlab e vários dialetos de Lisp , incluindo Scheme e Common Lisp , e compartilha muitas características com Dylan – uma outra linguagem dinâmica múltipla orientada a expedição com a sintaxe – e Fortress (linguagem de programação), outra linguagem de programação numérica com expedição múltipla e um sofisticado sistema de tipo paramétrico . Enquanto CLOS acrescenta expedição múltipla para Common Lisp , a adição é opt-in : funções só definidos pelo usuário explicitamente declarados genérico pode ser estendida. Em Julia , Dylan e Fortress, por outro lado, essa extensibilidade é o padrão e funções internas do sistema são todos genéricos e extensíveis.

Características da Linguagem

De acordo com o site oficial da linguagem Julia, as principais características da linguagem são:

  • Multi-métodos: provê capacidade de definir o comportamento da função através de muitas combinações de tipos de argumento.
  • Tipagem dinâmica: tipos de documentação, otimização e despacho.
  • Boa performance, que se aproxima de linguagens com tipagem estatica, exemplo a linguagem C.
  • Possui um gerenciador de pacotes prático e simples de usar.
  • Possui macros com Lisp e outros pacotes de meta programação.
  • Fornece chamada para funções da linguagem Python: para isso utiliza-se o pacote PyCall
  • Possui APIs especiais para chamada de funções em C diretamente.
  • Poderosa capacidade para o gerenciamento de outros processos.
  • Projetado para paralelismo e computação distribuída.
  • Detém uma geração eficiente de código, especializado para diferentes tipos de argumentos.
  • Apresenta uma forma elegante e extensivo para tipos numéricos.
  • Inclui suporte eficiente para Unicode, incluindo UTF-8
  • Licença pela MIT , livre e open source.

O conceito de despacho múltiplo ou também conhecido como multi métodos em Lisp é uma generalização do polimorfismo usado em linguagens orientadas a objetos que na qual utilizam herança. Em Julia todos os tipos são declarados como concreto que também são subtipos de tipos abstratos. Tipos concretos não pode ser subtipos, mas sua composição é usada sobre herança, que é usado por linguagens tradicionais orientadas a objetos.

Julia também se inspira significativamente em vários dialetos de Lisp, incluindo Scheme e Common Lisp. Utilizou também conceitos da linguagem Fortress, sendo uma linguagem acadêmica, numérica e com despacho múltiplo.

Compilador JIT

O compilador just-in-time (JIT) baseado em LLVM de Julia, combinado com seu design, permite que a linguagem se equipare à performance da linguagem C em vários cenários. Para se ter uma ideia da performance relativa de Julia comparada a outras linguagens que podem ser utilizadas para computação numérica e científica, escrevemos um pequeno conjunto de micro-benchmarks em uma variedade de linguagens: C, Fortran, Julia, Python, Matlab/Octave, R, JavaScript, Java, Lua, Go, and Mathematica. Os resultados dos micro-benchmarks a seguir foram obtidos utilizando um único núcleo (execução serial) de um processador Intel(R) Core(TM) i7-3960X 3.30GHz com 64GB de RAM 1600MHz DDR3 , rodando a distro openSUSE LEAP 42.3 .:


Imagem Benchmark julia – Wikipedia

Interação

Julia inclui um shell com sessão interativa que pode ser usado para experimentar o código rapidamente. Funciona em sistemas operacionais Linux, Windows e Mac. Abaixo apresenta uma pequena sessão como exemplo de uma soma simples.

Julia também funciona através de scripts com formato .jl na qual pode ser interpretado na seguinte forma.

$ julia script.jl

Paralelismo

A execução paralela presente em Julia é realizada através de um sistema de multiprocessamento baseado em mensagens, implementado através da biblioteca padrão da linguagem. O projeto da linguagem suporta a implementação de bibliotecas através de sub-rotinas simétricas, que também podem ser compreendidas como threadscooperativamente programadas. Este recurso permite uma comunicação assíncrona escondida em cada biblioteca, sem que seja necessário ao usuário configurar os callbacksmanualmente. Julia não suporta atualmente threads nativas, o que é uma limitação, mas se encontra em vantagem ao evitar as complexidades do uso sincronizado de memória compartilhada.[