E as tecnologias 'de outro mundo?'

[quote=Mauricio Linhares]

Vamos lá, esse foi provavelmente o comentário mais obtuso que você já fez aqui. Espero que quem esteja lendo essa thread ignore por completo essa sua afirmação e entenda que não se aprende outras linguagens pra se conhecer a fundo, mas para conhecer outras formas e outros paradigmas de se resolver os mesmos problemas.[/quote]

Depois de tudo vc não respondeu à pergunta: quem aposta em ruby ? A resposta é obiva : ninguem.
Por isso o JRuby é tão importante. Repare que o fato de existir JRuby significa que o Ruby fora da JVM está marcado para morrer.
Se não estivesse não havria porque criar o JRuby. Por outro lado o objetivo é usar uma plataforma que já existe e é testada a fundo com funcionalidades de nivel enterprise que a outra implementação de ruby não tem.

O pessoal quer portar RoR para Java. Não me diga que não vê isso. E não me diga que não vê que isso é dizer que Java (plataforma) é melhor.

Então se Java (plataforma) é melhor porque sair dela em primeiro lugar ?
Vc pode não gostar de Grails etc… o ponto é que funcionalmente é a mesma coisa que RoR. Sim é uma copia, mas em Java “puro”.
Sim , as pessoas vão escrever java em arquivos groovy e dai ? Esse é o objetivo : vc pode escrever java , mas com funcionaldiades de metadados que a linguagem java não tem. O compilador de ambos depende do mesmo bytecode. E o Java 1.7 com o seu invokeDynamic vem exatamente ao encontro de suportar linguagens de script de forma nativa dando a ambos a mesma vantagem. O reaproveitamento de codigo, experiencia, boas práticas, etc… que vc tem em java vai todo para groovy. Vc não precisa usar a sintaxe expecial de list se vc não quiser. à medida que vc usa mais, vc se sente mais à vontade vc começa a usar.
Poderiamos pensar o mesmo entre java 1.4 e 1.5. quanto tempo o pessoal de 1.4 demorou para começar a usar as funcioanlidades do 1.5 ? coisas banais como varargs. Com certeza demorou um pouco para pessoa começar a pensar em termos de generics, annotations , varargs e auto-boxing, mas à medida que escrevia codigo 1.4 e começou a ver a nova sintaxe foi mudando. O mesmo é válido para groovy , qualquer outra linguagem compatível com a sintaxe do java (afinal que começou com java lá em 1995 tinah que se habituar a mudar da sintaxe do C para java)

Sintaxe é uma coisas importante. Vc cria estruturas de pensamento diferentes quanto mais vc domina a sintaxe. Vc só pode ser proeficiente numa linguagem se vc pensar com as estruturas dela ( e isso é válido para qq tipo de linguagem seja java , ruby , ingles , turco ou morse)

É uma falácia dizer que precisa aprender rubi para aprender outros paradigmas. O mesmo paradigma existe em grovy e até em scala (até em javascript). Meta-programação é coisa antiga e não foi o rubi que inventou. Ou vc vai-me dizer que o pessoal aprendeu java para aprender o paradigma OO ? que paradigma é diferente de C++ para Java ? Nenhum. É OO na mesma.
A diferença é a plataforma que em C++ não existe. Mas ela é transparente ao programador , logo passar de C++ para Java não é mudar de paradigma, é mudar de tecnologia. Pura e simplesmente.

se vc me diz que o programador deve aprender uma linguagem nova por ano para se manter afiado , blz. Mas se me diz que isso é uma necessidade comercial para a vida dele, isso não é verdade. Basta ver que os especialista ganham mais que os novatos. E só se pode ser especialista investindo tempo na linguagem/plataforma.

O ponto é: o que o RoR faz tb é possivel sem sair da plataforma Java. O rubi veio para o Java ( não o o java que foi para rubi)
então porque sair da plataforma Java ? Aliás porque sair de uma plataforma e voltar a usar linguagens de programação “soltas” ?
É isso que realmente não entendo. E as justificativas que vejo são meio fracas ( tipo essa de aprender novas tencologias)

Porquê alguem na sua prefeita sanidade mental preferiria implementar algo do zero quando simplesmente usando já existe na linguagem/plataforma que usa ?

Não estamos falando do cara que saiu de faculdade sem nenhuma experiencia profissional e que para ele Java ou rubi é a mesma coisa. Estamos falando de quem já programa em java faz anos e alguem lhe diz que deve mudar para RoR. O que o RoR tem que não encontro na plataforma java ( sem frameworks ou não, não importa, já que RoR tb é um framework em cima de rubi) ?
Qual a vantagem em mudar de Java para RoR ? Porque mudar para uma “plataforma” imadura quando já uso uma que é muito madura ? Isso faz sentido para alguém ? Como isso faz sentido ? (A sério, eu gostaria de entender a preferência por rubi e RoR)

Não, não sou chiita em Ruby. Conheço e gosto de outras linguagens também.

Não, não implica. Sair do cercadinho do Java quer dizer pra parar de pensar que o único meio civilizado de programar é usando a linguagem ou a plataforma java. É perceber que existem outras coisas interessantes.

[quote=neófito]E java tem seus usos específicos. É uma linguagem de mais baixo nível, e uma coisa que ela tem que ruby não é performance. Você não percebe? São propósitos diferentes.

Você também não vai querer comparar C com Ruby né?[/quote]

Não entendo quando as pessoas defendem Java por causa por performance. Quando Java brigava com C++, os javeiros estavam do outro lado da briga.

@ Sergio
Dá uma lida em http://en.wikipedia.org/wiki/Sapir–Whorf_hypothesis e talvez você entenda o porquê de aprender uma nova linguagem.

Por que ninguém apedrejou a Sun por, ao criar o Java, reescrever bibliotecas que já haviam em C?

[quote=sergiotaborda]Não estamos falando do cara que saiu de faculdade sem nenhuma experiencia profissional e que para ele Java ou rubi é a mesma coisa. Estamos falando de quem já programa em java faz anos e alguem lhe diz que deve mudar para RoR. O que o RoR tem que não encontro na plataforma java ( sem frameworks ou não, não importa, já que RoR tb é um framework em cima de rubi) ?
Qual a vantagem em mudar de Java para RoR ? Porque mudar para uma “plataforma” imadura quando já uso uma que é muito madura ? Isso faz sentido para alguém ? Como isso faz sentido ? (A sério, eu gostaria de entender a preferência por rubi e RoR)
[/quote]

Existe plataforma RoR? Não! RoR é um framework que roda, primariamente, em plataforma LAMP. Existe também a possibilidade de rodar em cima da plataforma Java. Não entendo seu ponto.

[quote=Leonardo3001]Ah não! Muita idiotice pro meu gosto!

Vamos lá, o que tem a ver IoC com separação da camada “business”? É possível sim separar o model do controller! afinal, você não poderia devolver apenas um objeto que tem meios de trazer outro objeto, por exemplo?

Fazer cagada não tem nada a ver com framework usado.
[/quote]
Cara um fórum público e aberto, discussão em alto-nível, se quiser entrar, primeiramente abaixe o tom e respeite as pessoas ok ?

Vamos lá …

Amigo, não falei que tem haver, apenas o framework lhe dá uma trativa clara para isso. Por exemplo, posso fazer injeção de uma camada business que está num EJB. Então você vai criar objetos de domínio para regras de negócio, como Autoriza Transações, que faz uso de uma série de objetos somente para encapsulá-los ? Não entendi seu design … [/quote]

O texto pode até ser antigo, mas isso não descarta sua validade e nem que hajam problemas ainda para serem superados, já que JRuby ainda é muito novo no quesito maturidade. Agora o que tem haver proesso iterativo com maturidade para um cenário Enterprise, que é a pauta da discussão ?

Explico , tem haver em usar técnicas mais ágeis para produção como GORM, MVC mais simples, like Rails. Para se construir uma aplicação Web, ao invés de fazer um setup enorme, com MVC + Hibernate entre outros, fora o ciclo de desenvolvimento. Então você coloca a produtivdade do Rails ( Ruby) num cenário Weblogic por exemplo, empresa que só aceita Java e possui uma política de gestão e configuração. Outra que é mais fácil vender o peixe para gerentes, já que está usando Hibernate, Spring e as coisas que eles estão acostumados à ouvir.

Bom, acho que há motivos plausíveis para adoção e tentei fazer uma explanação puramente técnica. Não estou levando gosto pessoal, pois faço uso no meu dia-a-dia de Ruby On Rails somente para você saber e tenho certeza que o Maurício sabia disso, pois já havia comentado em outras oportunidades.

Então se quiser discutir e defender algo, fundamente !!

Separar a camada business de maneira elegante?

Supondo que o que você chama de camada business são entidades e serviços, não é necessário elegância nenhuma, é só criar o objeto e deixar ele lá no seu controller. Pra falar a verdade, eu tenho cada vez menos serviços dentro do meu código, os que eu tenho aqui são só aqueles que representam coisas externas ao sistema (e a maior parte deles nem surge no modelo, vivem escondidos em callbacks). O fato de não ter inversão de controle não significa que não tem “elegância” (eu, pessoalmente, acho que essa palavra tem até uma conotação meio infeliz…), repetindo mais uma vez, containers de inversão de controle faz sentido quando você tem linguagens estaticamente tipadas, em uma linguagem como Ruby isso já está praticamente dentro da linguagem, é muito simples trocar uma implementação pra outra e você não vai nem perceber.

Bem, como eu disse, não uso “projetinhos” pra busca, uso Solr e não acho que alguém em sã conciência usaria outra coisa. Quanto a segurança, restful_auth em Rails faz o mesmo serviço, sem complicação e sem documentação também.

Como já disseram, é pré-história. E a única coisa que roda “nativamente” na JVM hoje é Java. Groovy também é tão interpretada quanto Ruby.

Não dá pra colocar porque a diferença entre os dois e a quantidade de plugins externos do Rails vai muito mais além do que esses projetos em Java e no fim das contas eles terminam resolvendo muitos problemas comuns de aplicações web do dia a dia. Eu acho Rails bem mais produtivo pra desenvolvimento web por isso, as opções e soluções que você tem são pros problemas que você tem agora, não os que você vai ter daqui a milênios.

[quote=Leonardo3001]Não, não implica. Sair do cercadinho do Java quer dizer pra parar de pensar que o único meio civilizado de programar é usando a linguagem ou a plataforma java. É perceber que existem outras coisas interessantes.
[/quote]
Bem, vejamos. O hibernate hoje é um dos frameworks ORM open-source mais maduros que existem. Como eu usaria hibernate com annotations no jruby? Gosto de ruby, e realmente é uma linguagem muito interessante. Vale mesmo a pena aprendê-la, mas há casos onde o jruby não se dá tão bem com a plataforma java. Daí a necessidade do groovy. E o groovy não se inspirou apenas no ruby, mas também em python, smalltalk. Ela tem valor, certamente.

Hoje em dia a performance do java está muito boa, comparável a C++. Como prova disso, temos o Tomcat, cuja performance para conteúdo estático é semelhante a do httpd. E tudo isso com uma linguagem multiplataforma, muito mais simples do que C++ e sem muitos problemas da mesma. Outro exemplo é uma das implementações de SSH que eu uso, o JSCH. Rápido e multiplataforma. Legal né?

E o ruby, tem um servidor totalmente implementado na linguagem com performance semelhante?

O que quero dizer, é que há espaço para várias tecnologias e ferramentas hoje. Gosto bastante de ruby, mas atualmente uso mais o groovy, pelo mesmo estar bem mais próximo da plataforma java (o que facilita muito a minha vida) e ao mesmo tempo ter características muito legais, algumas até melhores do que existem em linguagens semelhantes.

O java, IMHO, é hoje a melhor linguagem com performance aceitável para certas aplicações. E multiplataforma. Também tem seu espaço. :smiley:

Procure por Capistrano no google. Aprenda o que ele faz e depois comente sobre bibliotecas de SSH.

É claro que é culpa da linguagem, ela foi criada com esse intuito. É do interesse deles que isso seja possível e até mesmo “encorajado”.

Scala tem o melhor dos dois mundos, é uma pena que as pessoas ainda não a estejam levando a sério :slight_smile:

O propósito de Java sempre foi o de ser uma linguagem de alto nível, não tem nada de baixo nível aí não.

Repetindo, ruby tem isso há muito tempo. Tanto tempo que nós só fazemos deployments usando SSH.

Com performance semelhante é óbvio que não, mas não faltam opções como Thin, Mongrel e Ebb.

[quote]
Como já disseram, é pré-história. E a única coisa que roda “nativamente” na JVM hoje é Java. Groovy também é tão interpretada quanto Ruby. [/quote]

Só um ponto para deixar claro, que não me expressei bem. Quis dizer que como 75% do Grails está em java, logo ele é muito mais performático. Somente 15% em Groovy o que o torna em torno de 20x menos performático que Java e muito mais rápido que JRuby, aí dá pra ter uma idéia…

poise tbm estava pensando que Ruby seria algo que não vingaria… porem creio que estava enganado pois estes dias estava no netcarreiras e vi algumas vagas de Ruby aqui no Brasil e inclusive na cidade onde moro… quero começar a aprender ruby… alguem sabe um bom tutorial?

Maurício , não conhecia o Ribs ( me lembrou Outback :'P) http://github.com/olabini/ribs/tree/master

  1. :wink: :wink:

Boa, gostei da notícia :slight_smile:

Aí é que você se engana, você que tem que se informar agora. Capistrano NÃO é uma implementação de SSH. Ele depende de bibliotecas existentes em um sistema POSIX. Ou seja, não funciona no Windows. Se você usa no windows com jruby, provavelmente é devido a uma implementação java de SSH. Talvez até mesmo o JSCH que eu citei.

Sim, mas implementados em linguagens como C++ ou C, ambas com problemas bem conhecidos e complexas (e que também possuem seu espaço).

[quote=Mauricio Linhares]
É claro que é culpa da linguagem, ela foi criada com esse intuito. É do interesse deles que isso seja possível e até mesmo “encorajado”. [/quote]
Essa sua afirmação é absurda. Por que alguém criaria uma linguagem e encorajaria a usar outra? Cite alguma fonte oficial dessa informação. O que é dito nas documentações sobre groovy é que se você não sabe fazer em groovy, na pior das hipóteses, você pode implementar como em java. Mas isso é muito diferente de encorajar a fazer igual java.

Eu disse “mais baixo nível”, em comparação a linguagens com mais facilidades como ruby e groovy.

A fonte que consultei sobre Capistrano é meio antiga, não tenho certeza se ele não roda no windows. De qualquer forma, ele NÃO é uma implementação de SSH.

Não, o Capistrano não é uma implementação de SSH, a implementação de SSH do Ruby é o gem net-ssh que é utilizado pelo Capistrano pra fazer conexões usando SSH.

Sim, mas implementados em linguagens como C++ ou C, ambas com problemas bem conhecidos e complexas (e que também possuem seu espaço).[/quote]

Nada disso, todos eles são escritos em Ruby. Tem no máximo uma extensão (normalmente o pedaço que faz o parsing do request http) em C.

Tô aqui batendo cabeça pra fazer um benchmark mas não tá rolando:

[code=java]
date = new java.util.Date()

def fact( int n ) {
if(n > 1) {
return n * fact(n-1)
} else {
return 1
}
}

8.times { fact(1000) }[/code]

Alguém poderia dizer qual o problema?

@ Kenobi

Olhando novando minha mensagem, vi que me excedi. Me desculpe, não era minha intenção te ofender, nem de duvidar da tua inteligência. Foi mal.

[quote=Mauricio Linhares]Tô aqui batendo cabeça pra fazer um benchmark mas não tá rolando:

[code=java]
date = new java.util.Date()

def fact( int n ) {
if(n > 1) {
return n * fact(n-1)
} else {
return 1
}
}

8.times { fact(1000) }[/code]

Alguém poderia dizer qual o problema?[/quote]

Então, “rubificando” vai.

date = java.util.Date.new

def fact(n) 
  if(n > 1)
    return n * fact(n - 1)
  else
    return 1
  end
end

8.times { puts fact 1000 }

[quote=neófito]A fonte que consultei sobre Capistrano é meio antiga, não tenho certeza se ele não roda no windows. De qualquer forma, ele NÃO é uma implementação de SSH.

[/quote]
Você pode usar o Capistrano no Windows pra fazer deploy quando o destino é um ambiente POSIX, mas, uma vez que uma das premissas do Capistrano é que o destino seja um ambiente POSIX, não é possível usá-lo para fazer deploy de uma aplicação quando o destino é o Windows, seja qual for a origem.

Uma coisa que não entendo é que o pessoal cita integração com qualquer framework Java como motivos para não usar Ruby, mas vejo isso um argumento sem sentido, porque:

:arrow: Havendo uma aplicação legada, é possível “puxar” um bean do Spring com WebApplicationContext, ou buscar um bean do EJB instanciando um InitialContext. Ambos podem muito bem ser instanciados por classes Ruby, mas com uma vantagem adicional: posso encapsular essa busca num módulo, e nas classes Ruby que o importaram, sejam utilizadas através de apenas uma linha (como se fosse anotação Java).

:arrow: No caso de uma aplicação do zero, usando tudo em Ruby, não há necessidade de Spring ou EJB, pois Ruby possui closure, classes que são também objetos, metaprogramação… Então é possível inserir conceitos transversais (logging, segurança, transação) usando seu próprio código Ruby, sem depender de frameworks pesados que estão lá para superar limitações da linguagem.

:arrow: Existem muitas alternativas no mundo Ruby a bibliotecas Java. Ao invés de Hibernate, é possível usar ActiveRecord ou DataMapper. Talvez não seja tão “parrudo” quanto o framework de persistência do Java, mas na maioria dos casos, essas duas bibliotecas são mais do que suficiente. Ah, e sem falar que existe a implementação do Hibernate para Ruby feita pelo Ola Bini, o Ribs.

:arrow: Alguém citou que Groovy compila em bytecode Java e que Ruby não. Falso, todo pacote JRuby vem com o compilador jrubyc que faz essa compilação. Então talvez a performance entre as linguagens não seja tão diferente.

Na verdade, rubyficando ficaria assim:

[code=ruby]require ‘java’

date = java::util::Date.new

def fact(n)
if(n > 1)
n * fact(n-1)
else
1
end
end

8.times{
fact(5000)
}

puts java::util::Date.new.time - date.time[/code]

O que eu quero fazer é portar esse benchmark pra Groovy -> http://antoniocangiano.com/2007/12/03/the-great-ruby-shootout/

Se algum groovista quiser me ajudar… parece que os meus dotes em Groovy andam meio enferrujados :slight_smile: