[SML] Quando uma linguagem funcional não funciona.
March 14th, 2007
Uma das respostas é simples: “Quando você tem um hardware que não supre as exigências requeridas”.
O meu hardware não é lá muito possante, mas tem me atendido sem maiores problemas. Um AMD 2600+ com 512M de RAM. Uso KDE, Gimp, Firefox e diversos outros programas e não tenho reclamações. Ou melhor, não tinha.
Estava olhando algumas implementações da familia SML para ver a possibilidade de substituir Haskell ou Ocaml em um projeto que tenho em mente. Gostaria de aprender mais o paradigma e, nada como uma aplicação mais real. Uma das diretrizes era que a linguagem deveria gerar um executável. A primeira que foi para os testes foi mlton . Olhei alguma documentação, instalei e fui para a fase de testes. Posso dizer que gostei da linguagem, de certa forma, até mais que Haskell e Ocaml. Como mlton ainda não ainda não possui um ambiente interativo, baixei o SMLNJ, para poder utilizar com o Emacs e facilitar as coisas. Ambas possuem toda a biblioteca básica e mais alguma coisa e são compatíveis. Alguns testes, algumas compilações e o resultado foi satisfatório. O tamanho dos programas gerados pelo mlton foram maiores que Ocaml e menores que Haskell e a velocidade também foi boa. Porém, mlton, foi o que mais demorou para compilar. Não me importei muito, já que é um processo complexo e trabalhoso para a otimização do resultado (veja a apresentação em pdf).
Para um teste mais apurado, baixei HaMLet, que é um SML em SML para compilar com mlton. O resultado foi desastroso. Após algum tempo, o mouse começou a soluçar, as coisas começaram a ir mais devagar e a compilação não seguia. Fui tomar um banho, jantar, assistir um pouco de tv e, na volta, estava tudo como antes. Um simples Ctrl-C interrompeu a compilação, ou melhor, a tentativa. É, parece que para usar mlton para algo mais complexo é necessário iniciar pensando em 1MiB de RAM para cima (fora o swap :-).
Mas acho que valeu, e até aconselho SMLNJ para quem deseja brincar um pouco com a linguagem. Acho que serve como porta de entrada para o estilo. O modo interativo é legal e não precisa do ;; irritante do Ocaml, apesar de interativo as entradas são compiladas e é inteligente o suficiente para saber quando precisa carregar algo (Time.now e ele carrega automaticamente o necessário). Não cheguei a gerar executáveis com o SMLNJ (que é um pouco diferente do método tradicional), mas como outra necessidade seria um toolkit gráfico, GTK 2+ e glade, e não encontrei nada, achei melhor deixar pra lá, por enquanto (mas continuo dizendo que é legal).
Eu sou meio insistente e, apesar de ser uma implementação um pouco mais antiga, testei rapidamente ML Kit , que pareceu sofrer do mesmo problema do mlton. Um dia eu atualizo o meu computador. Mas não será apenas por um compilador. :-)
Entry Filed under: Geral
2 Comments
1. Andrei | March 15th, 2007 at 2:30 pm
O mlton é um ótimo compilador, otimiza bem, usa tecnicas recentes, foi feito por um pessoal que entende do assunto, mas é um compilador de programa inteiro (whole-program), e as otimizações que ele aplica dependem disso, então tome memória para conseguir rodar.
O problema de SML é não ter muita comunidade, ter poucos usuários. Diferente de OCaml, se faz pouca coisa com SML hoje em dia, embora ainda se mantenham algumas aplicações existentes, como provadores de teoremas. Mas convenhamos que não é uma aplicação dessas que atrairá as massas. Então, embora seja interessante, me parece uma linguagem que está indo pro limbo, no caminho de outras como Sather que eram legais e quase ninguém usa.
Da família ML existem com alguma atividade real hoje apenas OCaml e a nova F# da Microsoft. E existe uma variante nova que vale a pena dar uma olhada: Alice ML, que integra conceitos da linguagem Mozart/Oz com uma linguagem próxima à SML.
2. Guaracy Monteiro | March 16th, 2007 at 12:38 am
E o problema do ‘programa inteiro’ são as alterações que a gente faz no programa. :-)
“… me parece uma linguagem que está indo pro limbo, no caminho de outras como Sather que eram legais e quase ninguém usa.”
Quando a gente começa a olhar que vê quantas linguages interessantes estão na UTI. Algumas são usadas por universidades e, durante o ano letivo, existe uma certa movimentação. Depois para tudo.
“Da família ML existem com alguma atividade real hoje apenas OCaml e a nova F# da Microsoft. E existe uma variante nova que vale a pena dar uma olhada: Alice ML, que integra conceitos da linguagem Mozart/Oz com uma linguagem próxima à SML.”
Vi uma certa luz para OCaml devido a utilização dela por empresas e um certo esforço na divulgação. A Jane Street Capital (onde o ‘inventor’ do mlton está trabalhando), utiliza Ocaml e lançou um The Ocaml Summer Project, onde distribuirá US$ 6.000 para projetos em Ocaml. Outra área em que a linguagem parece se sair bem é na criação de compiladores/interpretadores/etc. F#, apesar de ser baseada em Ocaml, possui alguns detalhes que eu gosto mais, mas acho que terei que engolir o ‘+’ e ‘+.’ de Ocaml.
Já conhecia Mozart/Oz e sabia da existência da Alice (existia uma discussão sobre a implementação de certas características na VM). Mozart/Oz me fez instalar o Emacs pela primeira vez (na época eu detestei). Alice já vem com uma IDE em GTK o que facilita um pouco as coisas para a divulgação. Mas como a minha idéia inicial era gerar um executável, ela está instalada aqui mais por curiosidade.
Trackback this post