Python e Ruby são geralmente considerados primos próximos (embora com uma bagagem histórica bastante diferente) com expressividade e poder semelhantes. Mas alguns argumentaram que o imenso sucesso do framework Rails realmente tem muito a ver com a linguagem em que é construído: o próprio Ruby. Então, por que Ruby seria mais adequado para tal estrutura do que Python?
python
ruby-on-rails
ruby
web-frameworks
Victor Yan
fonte
fonte
Respostas:
Provavelmente, existem duas diferenças principais:
Ruby tem encerramentos elegantes e anônimos.
Rails os usa com bons resultados. Aqui está um exemplo:
Fechamentos / lambdas anônimos tornam mais fácil emular novos recursos de linguagem que receberiam blocos. Em Python, os encerramentos existem, mas devem ser nomeados para serem usados. Portanto, em vez de poder usar closures para emular novos recursos de linguagem, você é forçado a ser explícito sobre o fato de que está usando uma closure.
Ruby tem uma metaprogramação mais limpa e fácil de usar.
Isso é usado extensivamente no Rails, principalmente por causa de sua facilidade de uso. Para ser específico, em Ruby, você pode executar código arbitrário no contexto da classe. Os seguintes snippets são equivalentes:
Em ambos os casos, você pode fazer:
que imprimirá "OLÁ". O
class_eval
método também recebe uma String, portanto, é possível criar métodos dinamicamente, conforme uma classe está sendo criada, que possuem semânticas diferentes com base nos parâmetros que são passados.É, de fato, possível fazer esse tipo de metaprogramação em Python (e outras linguagens também), mas Ruby tem uma vantagem porque a metaprogramação não é um estilo especial de programação. Isso decorre do fato de que em Ruby, tudo é um objeto e todas as linhas de código são executadas diretamente. Como resultado,
Class
es são eles próprios objetos, corpos de classe têm umself
apontador para a classe e você pode chamar métodos na classe enquanto está criando um.Isso é em grande parte responsável pelo grau de declaratividade possível no Rails, e pela facilidade com que somos capazes de implementar novos recursos declarativos que parecem palavras-chave ou novos recursos de linguagem de bloco.
fonte
Aqueles que argumentaram que
estão (IMO) enganados. Esse sucesso provavelmente se deve mais a um marketing inteligente e sustentável do que a qualquer habilidade técnica. Django sem dúvida faz um trabalho melhor em muitas áreas (por exemplo, o administrador embutido) sem a necessidade de quaisquer recursos do Ruby. Não estou zombando do Ruby, apenas defendendo o Python!
fonte
A comunidade python acredita que fazer as coisas da maneira mais simples e direta possível é a mais alta forma de elegância. A comunidade ruby acredita que fazer as coisas de maneiras inteligentes que permitem códigos legais é a mais alta forma de elegância.
Rails é tudo sobre se você seguir certas convenções, um monte de outras coisas acontecerão magicamente para você. Isso combina muito bem com o jeito rubi de ver o mundo, mas não segue o jeito python.
fonte
Este debate é um novo debate "vim versus emacs"?
Sou um programador Python / Django e até agora nunca encontrei um problema nessa linguagem / framework que me levasse a mudar para Ruby / Rails.
Posso imaginar que seria o mesmo se eu tivesse experiência com Ruby / Rails.
Ambos têm filosofia semelhante e fazem o trabalho de maneira rápida e elegante. A melhor escolha é aquela que você já conhece.
fonte
Pessoalmente, acho que o ruby é superior ao python em muitos aspectos, o que eu chamaria de 'expressividade consistente'. Por exemplo, em ruby, join é um método no objeto array que produz uma string, então você obtém algo assim:
Em python, join é um método no objeto string, mas que gera um erro se você passar algo diferente de string como o objeto a ser unido, então a mesma construção é algo como:
Existem muitos desses pequenos tipos de diferenças que se somam com o tempo.
Além disso, não consigo pensar em uma maneira melhor de introduzir erros lógicos invisíveis do que tornar os espaços em branco significativos.
fonte
A verdadeira resposta é que nem Python nem Ruby são candidatos melhores / piores para um framework web. Se você deseja objetividade, precisa escrever algum código em ambos e ver qual se encaixa melhor em sua preferência pessoal, incluindo a comunidade.
A maioria das pessoas que defende um ou outro nunca usou a outra língua seriamente ou está 'votando' em sua preferência pessoal.
Eu diria que a maioria das pessoas decide o que quer que eles entrem em contato primeiro porque lhes ensina algo novo (MVC, testes, geradores etc.) ou faz algo melhor (plug-ins, modelos, etc.). Eu costumava desenvolver com PHP e entrei em contato com RubyOnRails. Se eu conhecesse MVC antes de encontrar Rails, provavelmente nunca teria deixado o PHP para trás. Mas assim que comecei a usar Ruby, gostei da sintaxe, dos recursos etc.
Se eu tivesse encontrado o Python e um de seus frameworks MVC primeiro, provavelmente estaria elogiando essa linguagem!
fonte
Python tem uma grande variedade de estruturas semelhantes a Rails. Há tantos que dizem que durante uma palestra típica na PyCon, pelo menos um framework da web verá a luz.
O argumento de que a metaprogramação de Rubys a tornaria mais adequada é IMO incorreto. Você não precisa de metaprogramação para estruturas como esta.
Portanto, acho que podemos concluir que Ruby não é melhor (e provavelmente nem pior) do que Python nesse aspecto.
fonte
Porque Rails é desenvolvido para tirar vantagem do conjunto de recursos do Rubys.
Uma pergunta similarmente sem gorm seria "Por que o Python é mais adequado para Django do que Ruby?".
fonte
Suponho que não devemos discutir as características da linguagem em si, mas sim os acentos que as respectivas comunidades fazem nas características da linguagem. Por exemplo, em Python, reabrir uma classe é perfeitamente possível, mas não é comum; em Ruby, entretanto, reabrir uma aula é algo da prática diária. isso permite uma customização rápida e direta do framework para o requisito atual e torna o Ruby mais favorável para frameworks do tipo Rails do que qualquer outra linguagem dinâmica. Daí minha resposta: uso comum de reabertura de aulas.
fonte
Alguns disseram que o tipo de metaprogramação necessária para tornar o ActiveRecord (um componente-chave do rails) possível é mais fácil e mais natural de fazer em ruby do que em python - eu não conheço python ainda;), então não posso confirmar pessoalmente esta afirmação.
Eu usei rails brevemente, e seu uso de catchalls / interceptores e avaliação dinâmica / injeção de código permite que você opere em um nível muito mais alto de abstração do que alguns dos outros frameworks (antes do tempo). Tenho pouca ou nenhuma experiência com o framework Python - mas ouvi dizer que é igualmente capaz - e que a comunidade python faz um ótimo trabalho apoiando e promovendo empreendimentos python.
fonte
Acho que a sintaxe é mais limpa e Ruby, pelo menos para mim, é muito mais "agradável" - por mais subjetivo que isso seja!
fonte
Duas respostas:
uma. Porque rails foi escrito para ruby.
b. Pela mesma razão, C é mais adequado para Linux do que Ruby
fonte
Tudo isso é TOTALMENTE "IMHO"
Em Ruby existe UMA estrutura de aplicativo da web, portanto, é a única estrutura anunciada para essa linguagem.
Python teve vários desde o início, só para citar alguns: Zope, Twisted, Django, TurboGears (ele mesmo uma mistura de outros componentes do framework), Pylons (uma espécie de clone do framework Rails), e assim por diante. Nenhum deles é suportado em toda a comunidade python como "O que deve ser usado", então todo o "impulso" está espalhado por vários projetos.
Rails tem o tamanho da comunidade somente, ou pelo menos na grande maioria, por causa do Rails.
Tanto Python quanto Ruby são perfeitamente capazes de fazer o trabalho como uma estrutura de aplicativos da web. Use aquele que VOCÊ (e sua equipe de desenvolvimento em potencial) gosta e pelo qual pode se alinhar.
fonte