Aprendendo OCaml com emacs no Windows

No post anterior falei do livro de Andrei Formiga sobre a linguagem OCaml. Se você comprou, vai descobrir que uma das principais ferramentas para quem está começando a estudar OCaml é um REPL decente (Read-Evaluate-Print Loop). Infelizmente a melhor ferramenta de REPL para OCaml, a utop, não está disponível para Windows e o REPL que vem no OCaml é limitado e deixa muito a desejar.

Como sou usuário Windows, a melhor alternativa que encontrei até o momento foi utilizar o emacs. Sei que também existe uma solução para eclipse, mas por questões pessoais escolhi tentar primeiro o emacs. Adicionando um pequeno módulo, ele pode servir de interface para o REPL do OCaml e também, utilizando algumas teclas de atalho, compilar e executar sua aplicação.

Os passos mágicos para configuração do emacs podem ser encontrados aqui nessa página, mas vou tentar passar as dicas para quem está no Windows. Afinal de contas, essa é a razão desse post existir. É bom aproveitar a oportunidade para dizer que esse post não tem nenhuma pretensão de ensinar a usar o emacs. Também estou partindo do princípio que você já tem o OCaml instalado e configurado no path do seu computador.

Instalando o emacs

Minha instalação do emacs não passa de uma versão pré-compilada, baixada e descompactada numa pasta qualquer. No meu caso: C:\Apps\emacs-24.3\. Após descompactar os arquivos, coloquei o caminho para a pasta bin do emacs no PATH do Windows. Depois disso, basta executar a partir do comando runemacs.exe. Você pode abrir usando emacs.exe, mas aí ele vai exibir o terminal de console junto com a IDE.

Untitled

Adicionando o módulo OCaml ao emacs

Baixe os arquivos .ml que darão suporte ao novo módulo através desse endereço: emacs-ocaml-mode.zip. Depois de baixado, descompacte o arquivo na pasta site-lisp. No meu caso, o caminho de destino é C:\Apps\emacs-24.3\site-lisp. O próximo passo é adicionar as instruções que informam ao emacs como carregar o módulo sempre que alguma arquivo com a extensão .ml estiver aberto. Para isso, vamos precisar editar o arquivo de inialização .emacs no Windows. Minha pouca experiência mostrou que a melhor forma de fazer isso é através do próprio emacs.

Com o emacs aberto, digite a sequência ctrl+x ctrl+f e o caminho ~/.emacs conforme ilustrado na figura abaixo.

Digite o conteúdo que está na imagem ou copie e cole daqui. Salve o arquivo (ctrl+x ctrl+s) e corra para o abraço.

Fazendo uso do módulo

Isso já é suficiente para você ter pelo menos o syntax highlight. Mas o módulo oferece muito mais que isso e a melhor forma de ver todas as funcionalidades que ele oferece é através do comando ctrl+h m.

Seguem alguns comandos que achei uteis até agora:

ctrl+c ctrl+e Roda o comando que o cursor está utilizando o REPL que vem no OCaml. Ele também já move o cursor para o próximo comando.
ctrl+c ctrl+s Abre o REPL do OCaml dentro do emacs.
ctrl+c ctrl+c Exibe o comando para compilar o arquivo atual. Geralmente eu altero para ficar no formato: ocamlc -o executavel.exe codigofonte.ml
ctrl+x 1 Não é um comando do módulo, mas serve para fechar o terminar do OCaml e exibir apenas o arquivo fonte.
alt+! Também não é do módulo mas server para abrir o prompt para executar algum arquivo. Por exemplo: a aplicação recem compilada.

Novo livro sobre OCaml

Uma das coisas que as vezes me dá uma dor no coração é ver alguém de computação não conseguir ler bem um livro em inglês. Praticamente toda documentação de software está em inglês e quem não tem familiaridade com o idioma sempre acaba ficando para trás. Já vi muita gente no Brasil partir para escrever documentação direto em inglês, mesmo tendo como português sua língua nativa. Por esse motivo, é muito difícil encontrar material de qualidade escrito direto para português, sem ser tradução. O livro OCaml – Programação funcional na pátrica é uma exceção. A publicação ainda chama muito a atenção por aborda o tema de forma didática sem perder a profundidade no assunto.

Se já é difícil encontrar material bom para assuntos que todos devemos dominar, quanto mais para aqueles que acrescentam um diferencial em nossas carreiras. Os tão falados paradigmas funcionais que estão sendo acrescentados nas linguagens de programação mais populares como Java e C#, e já vindo em novas linguagens como Swift, vieram de linguagens funcionais como OCaml. Mergulhar nesse livro não é apenas aprender uma nova tecnologia que possibilita escrever um código legível e com performance próxima ao C++, mas também ajuda o leitor a tornar-se um programador mais versátil.

Como desenvolvedor .NET há anos, não poderia deixar de mencionar a relação entre o F# e o OCaml. A linguagem da Microsoft começou, na verdade, como uma implementação da segunda para o .NET. Porém, em um certo ponto da história tomaram rumos um pouco diferentes, e acabaram por possuir algumas funcionalidades distintas, mas sem perder a essência. Mais sobre a história do OCaml e a sua relação com F# no livro que está disponível na Casa do Código.

Roslyn e o futuro

Uma das perguntas que ficaram no ar quando escrevi sobre projeto Roslyn em um post anterior foi: qual a real utilidade do projeto; qual a motivação; o que podemos fazer com ele? É mais um daqueles clichês que dizem que não estávamos encontrando a resposta certa por não estar fazendo a pergunta certa. Talvez a pergunta certa esteja na necessidade e não no objetivo.

Acredito que, em certo ponto, a Microsoft percebeu que para evoluir com C# e Visual Basic seria melhor recomeçar, reescrever o compilador, utilizar uma nova abordagem (CaaS – compiler as a service). É muito provável que o grande beneficiado pelo projeto Roslyn será a própria linguagem (o que ela será capaz de suportar em termos de features) do que propriamente o ferramental que será construído em volta do compilador.

Uma grande luz para essa questão está na apresentação The Future of C# [e Visual Basic] que aconteceu no BUILD 2014. Se você ainda está um pouco confuso sobre os reais benefícios que virão com o projeto Roslyn, sugiro fortemente assistir essa apresentação. A primeira parte é feita por Dustin Campbell, onde ele demonstra um pouco de como a IDE vai ser beneficiada com o projeto Roslyn. A segunda parte da apresentação (~ 31:00) é feita por Mads Torgersen, onde ele mostra como as linguagens poderão evoluir graças ao projeto.

the-future-of-csharp

Comunidade Open Source em .NET

É visível a preocupação de Scott Hanselman em difundir a cultura open source na comunidade de desenvolvedores .NET, incluindo seu recente anúncio sobre a importância da manutenção de projetos open source para o programa MVP. Ontem, Hanselman postou falando sobre o quanto é difícil o envolvimento e a manutenção de projetos open source na comunidade .NET e o trabalho que está realizando junto a Microsoft para mudar esse cenário. Resolvi traduzir a última parte do seu post no intuito de reforçar sua visão em como podemos nos envolver mais com a comunidade open source.

(…)

SE ENVOLVER É DIFÍCIL

Eu recebo dezenas de e-mails toda semana que perguntam “como posso me envolver em projetos open source?” Todos assumem que minha resposta será “escreva código” ou “envie um pull request,” ou algumas vezes, “ajude a documentar.”

Na verdade, isso não é tudo que você pode fazer. O que você pode fazer é ler. Absorver.  Entender. Ser receptivo, inclusive, e gentil. Oferecer análises ponderadas e fazer perguntas. Evitar hipérboles e linguajar inflamável/incitável. Apresente exemplos de código quando comentar em issues. Seja útil.

Seu posts em blogs são o motor da comunidade, seus commits em projetos open source, documentação, promoções, exemplos, palestras, gists são importantes. Mas se envolver em projetos open source nem sempre quer dizer “faça um fork de um projeto e envie um pull request gigantesco com a sua visão do mundo.” Algumas vezes é importante, mas sem glória, trabalhar escrevendo documentação de regulamentação, organizar uma conferência, ou ler minuciosamente uma thread gigantesca no Github antes de fazer uma pergunta.

Porque fazemos isso? Não é pela glória ou pelo dinheiro. É porque somos Construtores. Eu encorajo você a se envolver. Existe muito a ser feito.

Scott Hanselman, aqui.

O que é o projeto Roslyn

O projeto Roslyn é uma forma de repensar o compilador do C# e VB de forma modularizada. Dessa forma, o compilador deixa de ser uma caixa preta e passa a transparecer todos os processos de compilação. Desenvolvedores passam a ter acesso a todas as bibliotecas utilizadas pelo compilador. Literalmente, esses compiladores estão sendo reescritos. Por exemplo, o código fonte do projeto csc.exe que está sendo reescrito no projeto Roslyn (rcsc.exe) pode ser encontrado aqui. É o compilador de C# escrito em C#.

Indiretamente, podemos esperar novas ferramentas surgindo para análise de código e refatoração; talvez um Visual Studio mais inteligentes, quem sabe? Você poderia citar mais exemplos?

O código fonte está sendo distribuído através da licença Apache License 2.0 e está disponível no codeplex.

Roslyn é apenas um codinome para o projeto, já deu para perceber que a Microsoft chamará esse conjunto de bibliotecas e ferramentas de .NET Compiler Platform.

Exemplo

Como exemplo, criei um projeto Console em C# e adicionei o pacote NuGet para o Roslyn da seguinte forma:

PM> Install-Package Microsoft.CodeAnalysis -Pre

Depois adicionei o seguinte trecho de código:

using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace RoslynConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            SyntaxTree tree = CSharpSyntaxTree.ParseText(@"
using System;
using System.Collections.Generic;
using System.Text; 

namespace HelloWorld  {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine(""Hello, World!"");
        }
    }
}");

            var root = tree.GetRoot() as CompilationUnitSyntax;

            var compilation = CSharpCompilation.Create("HelloWorld")
                .AddReferences(new MetadataFileReference(typeof(object).Assembly.Location))
                .AddSyntaxTrees(tree);

            var semanticModel = compilation.GetSemanticModel(tree);
        }
    }
}

Note que foi necessário adicionar uma referência ao assembly mscorelib.dll através da expressão:

typeof(object).Assembly.Location

O objeto root (CompilationUnitSyntax) representa a árvore sintática do código. Você pode usar para navegar pelo código: quais os namespaces, quais classes estão dentro desse namespace, quais métodos da classe, etc.

O objeto compilation (CSharpCompilation) representa uma compilação do código e através dele é possível ter acesso a análise semântica do código (semanticModel). Segundo a documentação, é possível responder perguntas tais como: quais membros são acessíveis a partir de algum método?

Uma observação interessante é que o objeto compilation é imutável, e funciona sob demanda. A partir do momento que você vai acessando suas propriedades ele vai compilando o que for necessário. Não é possível alterar o compilation, apenas criar um novo a partir de um existente, o que possibilita reutilizar o que for possível.

Esse exemplo que coloquei é apenas um pedaço do exemplo citado no artigo Getting Started: Semantic Analysis. Leia lá para mais detalhes.

StyleCop no Visual Studio 2013

Update – 25.11.2013

andyr liberou, nesse final de semana, mais uma versão do StyleCop. Agora, com suporte oficial ao Visual Studio 2013.

Update – 30.10.2013

O usuário csdahlberg criou uma branch do StyleCop que da suporte ao Visual Studio 2013. Ele disponibiliza uma versão compilada nesse link.

StyleCop

StyleCop é uma ferramenta desenvolvida por um funcionário da Microsoft chamado Jason Allor com o intuito de ajudar a padronizar o estilo de escrita de código C#.  Hoje a Microsoft não responde mais pela ferramenta e essa responsabilidade foi delegada para a comunidade. As regras do StyleCop incluem documentação de código, nomenclaturas, espaçamento, entre outras. A lista completa com todas as regras podem ser encontradas aqui.

Manter o código organizado e padronizado quando você trabalha sozinho pode ser possível, com um time de duas ou três pessoas pode ser viável, mas com qualquer número maior que esse, fatalmente você vai acabar precisando de uma ferramenta como o StyleCop. Com ela, a validação da qualidade do código pode ser feita de forma automática.

StyleCop no Visual Studio 2013

Infelizmente, ainda não está disponível uma extensão do StyleCop para Visual Studio 2013 Preview. Mas, felizmente, você pode integrar ao projeto utilizando um pacote do NuGet chamado StyleCop.MSBuild. Basta adicionar ao projeto como você faria com qualquer outro pacote e na próxima vez que você tentar compilar o projeto o Visual Studio apresentará todos os warnings referentes ao StyleCop.

stylecop2

O StyleCop acompanha um arquivo de settings que contém todas as regras que você deseja utilizar no seu projeto, você pode facilmente editar esse arquivo utilizando uma ferramenta chamada StyleCop Settings Editor. Quando você baixar o pacote a ferramenta ficará instalada em “.\packages\StyleCop.MSBuild.4.7.45.0\tools\”. Basta executar a ferramenta passando o arquivo de configuração como parâmetro da seguinte forma:

> StyleCopSettingsEditor.exe Settings.StyleCop

stylecopPara mim, a melhor forma é copiar o arquivo de configuração da pasta packages para o mesmo nível do arquivo da solução. Dessa forma você pode subi-lo para o controle de versão, uma vez que o pacote do NuGet não precisa ficar versionado. Se você precisar de regras específicas para cada projeto, basta copiar o arquivo para dentro da pasta do projeto, assim você terá um arquivo de settings diferente para cada projeto.

Visual Studio 2013 IDE

Programa Visual Studio Toolbox do Channel 9 mostrando o que está vindo de novidade na IDE do Visual Studio.

visual studio ide video preview

Vale salientar que já é possível baixar a versão 2013 Preview. Por ser um preview, você pode baixar qualquer edição (Professional, Premium, etc) mesmo sem ter a assinatura MSDN, mas também já está disponível a versão Express que continuará sendo gratuita.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 219 outros seguidores

%d blogueiros gostam disto: