close

Rubi

Ir para a navegação Ir para a pesquisa
Rubi
Ruby logo.svg
Desenvolvedor(es)
Comunidade de Desenvolvedores Ruby
https://www.ruby-lang.org/
Informações gerais
Extensões comuns .rb, .rbw
Paradigma multi -paradigma : orientado a objetos , reflexivo
Apareceu em novecentos e noventa e cinco
Desenhado por Yukihiro Matsumoto
Última versão estável 3.1.0 [ 1 ] ( 25 de dezembro de 2021 (9 meses e 22 dias))
tipo de sistema fortemente tipado , dinâmico
implementações Ruby MRI , YARV , JRuby , Rubinius , IronRuby , MacRuby , HotRuby
influenciado por Perl , Smalltalk , Python , Lisp , Eiffel , Scheme , Ada , Dylan , CLU
influenciou D , Groovy , Falcão
Sistema operativo Multi plataforma
Licença Licença Ruby

Ruby é uma linguagem de programação orientada a objetos , reflexiva e interpretada , criada pelo programador japonês Yukihiro " Matz " Matsumoto , que começou a trabalhar em Ruby em 1993 e o apresentou publicamente em 1995 . Ele combina uma sintaxe inspirada em Python e Perl com recursos de programação orientados a objetos semelhantes ao Smalltalk . Ele também compartilha funcionalidades com outras linguagens de programação como Lisp , Lua , Dylan e CLU . Ruby é uma linguagem de programação interpretada de passagem única e sua implementação oficial é distribuída sob uma licença de software livre .

História

A linguagem foi criada por Yukihiro "Matz" Matsumoto , que começou a trabalhar em Ruby em 24 de fevereiro de 1993 , e a apresentou ao público em 1995 . No círculo de amigos de Matsumoto, ele recebeu o nome de Ruby (em espanhol rubí ) como uma brincadeira em alusão à linguagem de programação Perl ( pérola em inglês). A última versão estável da ramificação 1.8 é 1.8.7_p248, da ramificação 1.9 é 1.9.2_p180 . A versão em 1.9 que incorpora melhorias substanciais no desempenho da linguagem, que devem ser refletidas na próxima versão de produção estável da linguagem, Ruby 1.9.0.1 Diferenças de desempenho entre a implementação atual de Ruby (1.8.6) e outras linguagens Abordagens de programação mais arraigadas levaram ao desenvolvimento de várias máquinas virtuais para Ruby. Entre eles estão JRuby , uma tentativa de portar Ruby para a plataforma Java , e Rubinius , um interpretador modelado a partir das máquinas virtuais Smalltalk . Os principais desenvolvedores deram suporte à máquina virtual fornecida pelo projeto YARV , que foi incorporada à árvore de origem do Ruby em 31 de dezembro de 2006 e ficou conhecida como Ruby 1.9.

Filosofia

Image
Yukihiro Matsumoto , o criador do Ruby

O criador da linguagem, Yukihiro "Matz" Matsumoto , disse que Ruby é projetado para produtividade e diversão do desenvolvedor, seguindo os princípios de uma boa interface de usuário. [ 2 ] Ele argumenta que o design de sistemas precisa enfatizar as necessidades humanas em vez das necessidades da máquina: [ 3 ]

As pessoas, especialmente os engenheiros de computação, geralmente se concentram nas máquinas. Eles pensam: "Fazendo isso, a máquina funcionará mais rápido. Fazendo isso, a máquina funcionará com mais eficiência. Fazendo isso..." como eles lidam com aplicativos em computadores. Nós somos os chefes. Eles são os escravos.

Ruby segue o princípio da menor surpresa , o que significa que a linguagem deve se comportar de forma a minimizar a confusão para usuários experientes. Matz disse que seu principal objetivo era fazer uma linguagem que fosse divertida para ele, minimizando o esforço de programação e a confusão potencial. Ele disse que não aplicou o princípio da menor surpresa ao design do Ruby, [ 3 ] no entanto, a frase foi associada à linguagem de programação Ruby. A frase em si tem sido uma fonte de controvérsia, pois os não iniciados podem entender que os recursos do Ruby são semelhantes aos recursos de outras linguagens conhecidas. Em uma discussão em maio de 2005 no grupo de notícias comp.lang.ruby, Matz tentou distanciar Ruby da filosofia mencionada acima, explicando que qualquer escolha de design seria surpreendente para alguém, e que ele usa um padrão pessoal de avaliação de ruby.surpresa. Se esse padrão pessoal permanecer consistente, haverá poucas surpresas para aqueles familiarizados com o padrão. [ 4 ]

Matz definiu assim em uma entrevista: [ 3 ]

Todo mundo tem um passado pessoal. Alguém pode vir do Python, outro do Perl, e pode se surpreender com diferentes aspectos da linguagem. Então eles podem dizer 'Estou surpreso com este recurso de linguagem, então Ruby viola o princípio da menor surpresa.' Espere espere. O princípio da menor surpresa não é apenas para você. O princípio da menor surpresa significa o princípio da 'minha' menor surpresa. E isso significa o princípio da menor surpresa depois que você aprende Ruby bem. Por exemplo, eu era um programador C++ antes de começar a projetar Ruby. Programei exclusivamente em C++ por dois ou três anos. E depois de dois anos programando em C++, eu ainda estava maravilhado.

Semântica

Ruby é orientado a objetos : todos os tipos de dados são um objeto, incluindo classes e tipos que outras linguagens definem como primitivos (como integers , booleanos e nil ). Cada função é um método . Variáveis ​​são sempre referências a objetos, não os próprios objetos. Ruby suporta métodos de herança , mixins e singleton vinculados dinamicamente (de propriedade e definidos por uma única instância em vez de definidos pela classe). Embora Ruby não suporte herança múltipla , as classes podem importar módulos como mixins . Ele suporta sintaxe procedural, mas todos os métodos definidos fora do escopo de um objeto são, na verdade, métodos da classe Object. Como essa classe é a mãe de todas as outras, as alterações são visíveis para todas as classes e objetos.

Ruby tem sido descrita como uma linguagem de programação multiparadigma : permite programar proceduralmente (definindo funções e variáveis ​​fora das classes tornando-as parte do objeto raiz Object), orientada a objetos (tudo é um objeto) ou funcionalmente (possui funções anônimas , encerramentos e continuações ; todas as instruções têm valores e as funções retornam a última avaliação). Ele suporta introspecção , reflexão e metaprogramação , bem como suporte para threads gerenciados por intérprete . Ruby é tipado dinamicamente e suporta polimorfismo de tipo (permite tratar subclasses usando a interface da classe pai). Ruby não requer polimorfismo de função (sobrecarga de função), pois é tipado dinamicamente (os parâmetros de uma função podem ser de um tipo diferente em cada chamada, e essa função é responsável por determinar o tipo e agir de acordo).

De acordo com o Ruby FAQ, [ 5 ] "Se você gosta de Perl , você vai gostar de Ruby e sua sintaxe. Se você gosta de Smalltalk , você vai gostar de Ruby e sua semântica. Se você gosta de Python , a enorme diferença de design entre Python e Ruby/Perl pode ou não convencê-lo. [ 6 ]

Características

Ruby atualmente não tem suporte total a Unicode , [ 7 ] apesar do suporte parcial para UTF-8 .

Interação

A distribuição oficial do Ruby inclui irb(Interactive Ruby Shell), um interpretador de linha de comando interativo que pode ser usado para testar código rapidamente. O snippet de código a seguir representa uma sessão de amostra usando irb:

$  irb 
irb ( main ): 001 : 0 >  puts  "Hello world" 
Hello  world 
=>  nil 
irb ( main ): 002 : 0 >  1 + 2 
=>  3

Sintaxe

A sintaxe do Ruby é semelhante ao Perl ou Python. A definição de classes e métodos é definida por palavras-chave. No entanto, em Perl, as variáveis ​​não possuem prefixos. Quando usado, um prefixo indica o escopo das variáveis. A principal diferença de C e Perl é que palavras-chave são usadas para definir blocos de código sem chaves. As quebras de linha são significativas e interpretadas como o final de uma instrução; o ponto e vírgula tem o mesmo uso. Ao contrário do Python, o recuo não é significativo.

Uma das diferenças entre Ruby e Python e Perl é que Ruby mantém todas as suas variáveis ​​de instância privadas dentro de classes e só as expõe através de métodos de acesso ( attr_writer, attr_reader, etc.). Ao contrário dos métodos get e set em outras linguagens como C++ ou Java, os métodos de acesso do Ruby podem ser escritos com uma única linha de código. Como chamar esses métodos não requer o uso de parênteses, é trivial alterar uma variável de instância em uma função sem tocar em uma única linha de código ou refatorar esse código. Os descritores de propriedade do Python são semelhantes, mas têm uma desvantagem no processo de desenvolvimento. Se alguém iniciar em Python usando uma instância de variável exposta publicamente e, em seguida, alterar a implementação para usar uma instância de variável privada exposta por meio de um descritor de propriedade, o código interno da classe precisará ser ajustado para usar a variável privada em vez da propriedade pública. Ruby elimina essa decisão de design forçando todas as variáveis ​​de instância a serem privadas, mas também fornece uma maneira fácil de declarar métodos sete get. Isso mantém o princípio de que em Ruby os membros internos de uma classe não podem ser acessados ​​de fora da classe; em vez disso, uma mensagem (um método é chamado) é passada para a classe e uma resposta é recebida.

Licença

O interpretador e as bibliotecas são licenciados duplamente (inseparavelmente) sob as licenças de software livre GPL e Ruby License . [ 8 ]

A partir da versão 1.9.3, opta-se por uma licença dupla sob as licenças BSD de duas cláusulas e a Licença Pública Ruby. [ 9 ]

Veja também

Referências

  1. https://www.ruby-lang.org/en/news/2021/12/25/ruby-3-1-0-released/
  2. "A linguagem de programação Ruby, por Yukihiro Matsumoto" . informit.com (em inglês) . Recuperado em 7 de outubro de 2016 . 
  3. abc Bill Venners ( 29 de setembro de 2003). Artima, ed. "Filosofia de Ruby, uma conversa com Yukihiro Matsumoto, Parte I " . Recuperado em 2 de maio de 2015 . 
  4. ^ "Ruby Weekly News 23 - 29 de maio de 2005" . Arquivado a partir do original em 29 de setembro de 2007 . Recuperado em 5 de janeiro de 2008 . 
  5. ^ "RubyFAQ" . Arquivado a partir do original em 9 de dezembro de 2007 . Recuperado em 6 de janeiro de 2008 . 
  6. Como o Ruby se compara ao Python? (FAQ) (em inglês)
  7. Recurso #2034 Considere a Biblioteca ICU para Melhorar e Expandir o Suporte Unicode
  8. Licença Ruby
  9. O que há de novo no Ruby 1.9.3

Links externos