Troquei o Emacs pelo Visual Studio no Linux

Ok, é temporário e é apenas para Red. Mas a história é a seguinte:

Atualmente existe a possibilidade de salientar a sintaxe e mais algumas coisinhas utilizando Red + Emacs. Porém, ainda existe uma certa dificuldade na integração entre os dois o que faz com que o emacs vire um simples (e bem simples) editor de textos como qualquer outro. Opções simples como enviar um bloco ou até mesmo todo o programa para ser interpretado não estão disponíveis.

A plataforma primária dos desenvolvedores de Red é o Windows e eles já fizeram um bom trabalho integrando Red com o Visual Studio, pensei que poderia usar em vez de perder tempo com editores que não uso. Seria possível ajustar o Kate ou algum editor que use o gtksourceview (não gosto do scintilla). Como resolvi testar o Manjaro Budgie para mudar um pouco o visual de tempos usando o KDE (posso dizer que estou gostando), resolvi instalar o Visual Studio.

Apesar de não estar bem familiarizado, é um editor bom, relativamente simples e possui uma boa integração com Red.

captura-de-tela-de-2017-01-18-23-54-29

Anúncios

Red + Ruby = Reby ou Rud ?

Como todos sabem, ou não, a próxima versão de Red traz #macros. No primeiro formato, é apenas um nome seguido de uma função e seus respectivos parâmetros. Neste caso, a macro irá avaliar a função e trocará o nome e seus parâmetros pelo resultado. No segundo formato, baseado em um padrão definido, o usuário poderá alterar o código para um novo formato (meio estilo Lisp). É interessante pois é uma outra forma de criação de dialetos em Red. Um usuário que gosta de Ruby e Python resolveu colocar o seguinte exemplo na lista:

Para repetir um trecho um determinado número de vezes em Red, utilizamos loop. Fica algo como:

loop 10 [
    print "Hello"
]

A macro acima permite que se crie um dialeto possibilitando a mesma construção  utilizada em Ruby, ou seja:

10 times [
    print "Hello"
]

Basicamente inseriu loop no início, incluiu a primeira parte do código start/1 que é o número 10, pulou a segunda parte start/2 que é o times e incluiu o bloco que é a terceira parte.

Possibilidades? Fica por conta da sua imaginação.  Como a linguagem ainda é beta, provavelmente #macros sofrerão algumas alterações no decorrer do desenvolvimento. Ainda não sei quando, como e onde utilizar #macros e parser para a criação de dialetos, isto é, qual a melhor situação para a utilização de um ou outro ou os dois simultaneamente. Muita coisa para a minha cabecinha. 😀

Red – um pouco de diversão

Como Red ainda está em desenvolvimento (e vai continuar por um bom tempo), um dos problemas que existem é a falta de documentação. O REPL é bastante prestativo permitindo que se digite o início da função, pressione-se Tab e uma lista das possíveis complementações é mostrada. Muitas vezes você sabe que existe algo mas não lembra exatamente o nome ou como inicia. Você pode digitar what e uma relação das funções disponíveis com uma breve descrição será mostrado. Mesmo assim pode ser possível que você não lembre exatamente como é utilizada. Mas você poderá utilizar Help ou ? função e verá maiores informações sobre a utilização dela.

Mas que tal facilitar um pouco a vida? Que tal uma janela com uma lista das funções onde, ao selecionar uma função, será mostrada sua utilização, descrição, argumentos e possíveis refinamentos? Bem, tipo a janela abaixo.

red-fun

Melhor ainda se for com apenas 27 linhas de código (poderia ser menos) como o que segue:

Como o suporte para GUI no Linux e OS X ainda não estão prontos, o programa funciona só no Windows (ou no wine para Linux).

Linhas 1 a 6 é apenas o cabeçalho.

Linha 8 só é necessária se o programa for compilado. O programa help.red encontra-se em environment/console da distribuição e, no meu caso, apenas copiei para o mesmo diretório do programa.

Linhas 12 a 16 varrem as funções existentes e as armazenas na variável fn

Linhas 18 a 27 se encarregam de criar a janela, a lista e a área de texto, preencher a lista com as funções encontradas e reagir ao clique na lista mostrando as informações na área de texto. Se você acha 10 linhas muito, é só colocar tudo que está depois do do na mesma linha que ficam apenas 5 linhas.

Existe espaço para melhorias como colocar exemplos e os respectivos resultados de cada função para facilitar ainda mais a vida do usuário ou especificar um filtro para a lista de funções.

Bem, por enquanto era isso.

Red vs Crystal

Vi hoje no Twitter um post do TaQ “An Introduction to Crystal: Fast as C, Slick as Ruby” sobre Crystal. Pelo título fui dar uma olhadinha e achei interessante e, pelos objetivos, achei semelhante a Red (o título pelo menos).

Como conheço mais Red do que Crystal, tentar comparar ambos está mais para presunção do que análise isenta. Então, desculpe qualquer erro nas comparações abaixo, mas resolvi fazer um apanhado de semelhanças e diferenças.

Semelhanças e diferenças (Crystal vs Red)

  • Estágio inicial: Ambas são consideradas beta ou alfa (apesar de ja ser possível fazer muita coisa em Red; acredito que em Crystal também). Red está na versão 0.6.1 e Crystal na versão 0.18.0. Pela abrangência e complexidade de Red, é bem provável que Crystal alcance a versão 1.0 antes de Red.
  • Plataformas: Pelo que vi, Crystal está disponível para Linux e Mac OSX. Atualmente, Red está disponível para Linux, Mac OS X e Windows. Em breve para Android.
  • Instalação: Red não precisa de instalação. É só baixar o executável para a plataforma desejada e executar um script/compilar/usar o REPL.
  • Compatíveis mas não iguais: Red possui a sintaxe parecida com Rebol e Crystal parecida com Ruby. Em algumas situações, Red executa programas feitos em Rebol e Crystal em Ruby. Quem deseja migrar deve estar ciente de que precisará efetuar alterações no código e nada garante que o código funcione sem algum hack.
  • Compilar para código nativo: Com Red, você pode baixar e rodar a versão para Windows e gerar executáveis para qualquer plataforma disponível sem se preocupar com mais nada a não ser a chave -t <plataforma>. É bom deixar claro que Red é composto por duas partes. Red que apresenta grande compatibilidade com Rebol e é de alto nível e Red/System que seria um substituto para o C, compartilhando a mesma sintaxe de Red mas com menos funções. O resultado é que compilando o exemplo da sequência de Fibonacci em Crystal (que está incorreto) o executável ficou com 294K ao passo que em Red/System ficou com 6,4K.  (Crystal foi 0,05s mais rápido que Red). Outro detalhe é que Red pode gerar bibliotecas (.dll, .so, .dylib) que podem ser utilizadas por outras linguagens.
  • Tipagem: Em Crystal, as vezes não é necessário informar o tipo do dado e em outras é (não sei se pode confundir ou não). Em Red não é necessário especificar o tipo de dado mas, se o usuário desejar, poderá especificar para os parâmetros de uma função (pode ser mais de um tipo como integer, string) e assim será gerado erro se um tipo de dado diferente for enviado em vez do erro aparecer apena em tempo de execução. Red/System possui tipagem estática (como pode haver uma interface entre Red e Red/System, existem algumas facilidade para trabalhar com tipos diversos de dados)
  • Interface com bibliotecas: Crystal oferece facilidades para o acesso a bibliotecas escritas em C (não sei se outras linguagens) sem a necessidade de sair da linguagem (escrever um programa em C, por exemplo). Red/System também (e Red por intermédio de Red/System). Como o objetivo de Red/System é ser um “substituto” de C para quem programa em Red, também permite o acesso a syscall (diretamente ao Kernel).
  • Fontes: Ambas linguagens disponibilizam os fontes. Para compilar Crystal você precisa ter Crystal (existem várias linguagens com esta recursividade). Para compilar Red, você precisa ter Rebol (versão comercial). Mas existe a possibilidade de você usar a versão grátis para criar executáveis com os fontes de Red. Ou você pode usar a versão compilada para Windows, Linux e Mac que os desenvolvedores utilizam. Futuramente Red será compilado com Red e a dependência deixará de existir.
  • Espaço armazenamento: Pelo repositório do Arch, diz que eu tenho que baixar 7,5M e, depois de instalado, irá ocupar 57,9M. Para Red eu tenho que baixar 1M do executável e … só. Na realidade, ele cria um arquivo de 500K que é o console (REPL) e uma biblioteca de 10k que são necessários para a execução (considere que em 1M ele já compila para três plataformas diferentes). Não é um item muito relevante mas considerando IoT, pode ser levado em conta (ou se as operadoras limitarem o consumo de dados).

Público alvo

 Bem, qualquer linguagem serve para qualquer um. Vou apenas escrever um pouco para deixar o artigo maior

Crystal

  • Como o ideal não é a compatibilidade com Ruby que tem Rails como carro chefe, certamente não irá abocanhar uma grande parcela de desenvolvedores do Ruby se não for compatível (no artigo diz que não roda Rails).
  • Para outros usuários de Ruby, será necessário analisar com calma o custo/benefício da mudança.
  • Para quem está testando novas(?) linguagens, é uma nova opção para incluir na lista (Go, Rust, Elixir, Red, Crystal, Eve, etc.)

Red Red/System

  • Como Carl Sassenrath encerrou o desenvolvimento de Rebol 2 e disponibilizou os fontes (fora as partes que possuíam copyright) mas largou de mão, muitos ficaram órfãos. O desenvolvimento da versão 3 pela Atronix também data de 2/3 anos atrás. Red pode ser adotado por quem está sem alternativas (e por outros também).
  • Para quem possui um grande leque de aplicações que vão de drives para o SO até aplicativos para rodar no Windows+Mac+Linux+Android (outras opções no futuro como iOS) pode ser uma boa opção.
  • Para quem está de olho na IoT e não quer muita complicação também poderá ser uma opção interessante.
  • Para quem está testando novas linguagens, blá, blá, blá.
Cuidado. O texto abaixo é altamente tendencioso.
O meu interesse por Red é pela descomplicação que ele parece ter (facilidade de passear por diversos SOs sem precisar nem instalar e com 1M), escrevo um programa e gero executável para diversos ambientes, pelo que pode fazer de baixo nível (falar com o Kernel que não é o meu caso) até alto nível (criar DSL ou dialetos como são chamadas em Red), usar GUI nativa dos diversos SOs (atualmente só Windows mas para as próximas versões Android, Mac e Linux/GTK3) e previsões futuras como módulos acopláveis (usar a GPU, por exemplo), meta-DSL (facilidade para a criação de DSLs). Resumindo, parece que os desenvolvedores miraram nas estrelas para alcançar a lua.

Um exemplo que acho legal em Red é o mostrado abaixo. Em poucas linhas é possível criar uma janela, editar um código e ver em tempo real o resultado. Se você tiver curiosidade, basta baixar Red para Windows (é a versão 0.6.2 que está em desenvolvimento e possui o nome de red-latest.exe), baixar o código fonte do relógio que possui 51 linhas contendo o código para criar o ambiente, para criar o relógio e mais 16 linhas que falam sobre o programa. Funciona no wine, bastando tiraro comando transparent da primeira linha. Interessante ler outras informações no site.

blue-clock2

Clock livecoding demo

Vai demorar um bom tempo para Red chegar na versão 1.0. Alguns acham que a versão 0.7 já poderia ser considerada a 1.0 pois possui suporte a parte de I/O. Como não venho de Rebol, olho para o que está considerado para I/O e penso: “Não precisa de tudo aquilo para I/O. Já é possível ler e escrever arquivos, diretórios, posso ler até páginas pelo protocolo http[s]”. Mas se eles dizem …