Daniel Quirino Oliveira:
Não, não acho que seria vantajoso. Ok, poderia ser legal virar para o mundo e dizer “Hey, Java também serve para instalador de sistema operacional. Hip Hip Hurra!”. Mas, ponto final.
Primeiro, porque reescrever algo que já funciona muito bem sem adicionar novo valor ao produto é como jogar dinheiro pela janela (se quiser, pode jogar na janela de casa).
Segundo, porque scripts se encaixam muito bem neste tipo de aplicação de automatização de tarefas. E, acredite, se uma rotina bem escrita em Ruby já estiver razoavelmente grande, é possível que esta mesma rotina fique monstruosa em Java. Groovy talvez ficasse legal, mas aí é preciso ver se a nova versão vai adicionar algum valor à versão antiga.
Terceiro, deixa a galerinha dos scripts se divertirem com alguma coisa útil
huauhahuahua
Vamos esquecer a idéia de, por exemplo, reescrever o Portage, mas permita-me insistir mais um pouco no exemplo do instalador de pacotes. Já que você falou sobre o que poderia ser acrescentado, deixe-me contar uma “pequena” história.
Eu já tenho um certo tempo de uso de certas ferramentas para instalar pacotes (tipicamente, APT e Portage). Uma situação que eu vivo sempre e que, na qual, nenhuma destas ferramentas me deixa contente, é quando eu vou instalar vários pacotes de uma só vez.
O apt-get (APT) primeiramente faz o download de todos os pacotes para só depois começar a instalação. O emerge (Portage), diferentemente, baixa e instala um pacote por vez e só procede ao download do próximo pacote quando a instalação do pacote atual for concluída. Ambas as ferramentas, a meu ver, acabam levando um tempo excessivamente longo para instalar todos os pacotes, sendo que o Portage, além disso, acaba disperdiçando meu tempo de conexão com a Internet (o que, para um usuário de accesso discado à Internet como eu, é muito ruim).
Imaginemos agora que eu estou tentando instalar dois ou mais pacotes, sendo que um não dependa dos outros. O meu maior sonho é encontrar uma ferramenta para instalação de pacotes que me permita, neste caso, proceder ao download dos próximos pacotes enquanto faz a instalação do pacote atual. Sem dúvida, isto me economizaria tempo, tanto de instalação, quanto de conexão com a Internet.
Com algum esforço, eu consigo fazer isto hoje, mais ou menos, com o Portage. Na sua versão atual, o Portage utiliza arquivos de bloqueio para previnir que, por exemplo, duas execuções do emerge tentem fazer o download do mesmo arquivo ou desinstalar o mesmo pacote (até o presente momento, não há nada que as previna de tentar compilar o mesmo programa). Eu posso, por exemplo, abrir dois terminais e executar emerge --fetchonly <pacote1> <pacote2> …, no terminal 1, e emerge <pacote1> <pacote2> …, no terminal 2 (com o APT, isto não seria possível, mesmo porque ele não permite a execução do apt-get em múltiplos processos). Assim, o processo rodando no terminal 2 (instalação do pacote atual) vai aguardar pela liberação dos bloqueios criados pelo processo rodando no terminal 1 (download do pacote atual). Em suma, o processo no terminal 2 vai instalando os pacotes enquanto o processo no terminal 1 vai fazendo o download dos pacotes restantes.
Bom seria se eu pudesse fazer tudo isso sem precisar abrir vários terminais… Além disso, quem possui uma máquina mais potente pode querer compilar mais de um programa simultaneamente, usuários de banda larga podem querer fazer o download de vários pacotes simultaneamente (coisa que, altualmente, o Portage não permite), e por aí vai.
Pois bem. Eu imagino que uma ferramenta para instalação de pacotes poderia prover soluções para estes casos utilizando processamento concorrente (multi-threading). Então eu pergunto novamente: Isto seria possível? Viável? Vantajoso? E, se for vantajoso, seria mais vantajoso utilizando Java ou alguma outra linguagem que suporte multi-threading?
Desculpem-me se eu estiver falando bobagem, pois eu conheço muito pouco sobre processamento concorrente e sobre quais linguagens suportam-no atualmente.