Ruby (linguagem de programação) - Ruby (programming language)
Paradigma | Multi-paradigma : funcional , imperativo , orientado a objetos , reflexivo |
---|---|
Projetado por | Yukihiro Matsumoto |
Desenvolvedor | Yukihiro Matsumoto, et al. |
Apareceu pela primeira vez | 1995 |
Versão estável | |
Disciplina de digitação | Pato , dinâmico , forte |
Alcance | Lexical, às vezes dinâmico |
Linguagem de implementação | C |
SO | Plataforma cruzada |
Licença | Licença Ruby |
Extensões de nome de arquivo | .rb |
Local na rede Internet | www |
Implementações principais | |
Ruby MRI , TruffleRuby , YARV , Rubinius , MagLev , JRuby , MacRuby , RubyMotion , Mruby , IronRuby | |
Influenciado por | |
Ada , Basic , C ++ , CLU , Dylan , Eiffel , Lisp , Lua , Perl , Python , Smalltalk | |
Influenciado | |
Clojure , CoffeeScript , Crystal , D , Elixir , Groovy , Ioke , Julia , Mirah , Nu , Ring, Rust , Swift | |
|
Ruby é uma linguagem de programação interpretada , de alto nível e de propósito geral . Ele foi projetado e desenvolvido em meados da década de 1990 por Yukihiro "Matz" Matsumoto no Japão .
Ruby é tipado dinamicamente e usa coleta de lixo e compilação just-in-time . Ele oferece suporte a vários paradigmas de programação , incluindo programação procedural , orientada a objetos e funcional . De acordo com o criador, Ruby foi influenciado por Perl , Smalltalk , Eiffel , Ada , BASIC e Lisp .
História
Conceito inicial
Matsumoto disse que Ruby foi concebido em 1993. Em uma postagem de 1999 na lista de discussão ruby-talk , ele descreve algumas de suas primeiras idéias sobre a linguagem:
Eu estava conversando com meu colega sobre a possibilidade de uma linguagem de script orientada a objetos. Eu conhecia Perl (Perl4, não Perl5), mas não gostei muito, porque tinha cheiro de linguagem de brinquedo (ainda tem). A linguagem orientada a objetos parecia muito promissora. Eu conhecia Python então. Mas não gostei, porque não achei que fosse uma verdadeira linguagem orientada a objetos - os recursos OO pareciam ser um complemento da linguagem. Como maníaco por linguagem e fã de OO por 15 anos, eu realmente queria uma linguagem de script genuína, orientada a objetos e fácil de usar. Procurei, mas não consegui encontrar. Então eu decidi fazer isso.
Matsumoto descreve o design do Ruby como sendo uma linguagem simples do Lisp em seu núcleo, com um sistema de objetos como o do Smalltalk, blocos inspirados por funções de ordem superior e utilidade prática como o do Perl.
O nome "Ruby" se originou durante uma sessão de bate-papo online entre Matsumoto e Keiju Ishitsuka em 24 de fevereiro de 1993, antes que qualquer código fosse escrito para a linguagem. Inicialmente foram propostos dois nomes: " Coral " e " Ruby ". Matsumoto escolheu o último em um e-mail posterior para Ishitsuka. Matsumoto mais tarde observou um fator na escolha do nome "Ruby" - era a pedra de nascimento de um de seus colegas.
Lançamentos iniciais
O primeiro lançamento público do Ruby 0.95 foi anunciado nos grupos de notícias domésticos japoneses em 21 de dezembro de 1995. Subseqüentemente, mais três versões do Ruby foram lançadas em dois dias. O lançamento coincidiu com o lançamento da lista de discussão ruby list em japonês , que foi a primeira lista de discussão para o novo idioma.
Já presentes neste estágio de desenvolvimento estavam muitos dos recursos familiares em versões posteriores do Ruby, incluindo design orientado a objetos , classes com herança, mixins , iteradores , encerramentos , tratamento de exceções e coleta de lixo .
Após o lançamento do Ruby 0.95 em 1995, várias versões estáveis do Ruby foram lançadas nos anos seguintes:
- Ruby 1.0: 25 de dezembro de 1996
- Ruby 1.2: dezembro de 1998
- Ruby 1.4: agosto de 1999
- Ruby 1.6: setembro de 2000
Em 1997, o primeiro artigo sobre Ruby foi publicado na web. No mesmo ano, Matsumoto foi contratado pela netlab.jp para trabalhar em Ruby como desenvolvedor em tempo integral.
Em 1998, o Ruby Application Archive foi lançado por Matsumoto, junto com uma página inicial simples em inglês para Ruby.
Em 1999, a primeira lista de mala direta em inglês, ruby-talk , começou, o que sinalizou um crescente interesse pelo idioma fora do Japão. Nesse mesmo ano, Matsumoto e Keiju Ishitsuka escreveram o primeiro livro sobre Ruby, The Object-oriented Scripting Language Ruby (オ ブ ジ ェ ク ト 指向 ス ク リ プ ト 言語 Ruby), que foi publicado no Japão em outubro de 1999. Ele seria seguido no início de 2000 por cerca de 20 livros sobre Ruby publicados em japonês.
Em 2000, Ruby era mais popular do que Python no Japão. Em setembro de 2000, o primeiro livro em inglês Programming Ruby foi impresso, que mais tarde foi liberado gratuitamente para o público, ampliando ainda mais a adoção do Ruby entre os falantes de inglês. No início de 2002, a lista de discussão ruby-talk em inglês estava recebendo mais mensagens do que a lista de ruby em japonês , demonstrando a popularidade crescente de Ruby no mundo não-japonês.
Ruby 1.8 e 1.9
Ruby 1.8 foi lançado inicialmente em agosto de 2003, permaneceu estável por um longo tempo e foi retirado em junho de 2013. Embora obsoleto, ainda há código baseado nele. Ruby 1.8 é apenas parcialmente compatível com Ruby 1.9.
Ruby 1.8 tem sido o assunto de vários padrões da indústria. As especificações de linguagem para Ruby foram desenvolvidas pelo Centro de Promoção de Padrões Abertos da Agência de Promoção de Tecnologia da Informação (uma agência governamental japonesa ) para submissão ao Comitê de Padrões Industriais Japoneses (JISC) e então à Organização Internacional de Padronização (ISO). Foi aceito como um padrão industrial japonês (JIS X 3017) em 2011 e um padrão internacional ( ISO / IEC 30170 ) em 2012.
Por volta de 2005, o interesse pela linguagem Ruby aumentou junto com Ruby on Rails , um framework da web escrito em Ruby. Rails é frequentemente creditado com o aumento do conhecimento sobre Ruby.
Efetivo com Ruby 1.9.3, lançado em 31 de outubro de 2011, Ruby mudou de uma licença dupla sob a Licença Ruby e a GPL para uma licença dupla sob a Licença Ruby e a licença BSD de duas cláusulas. A adoção do 1.9 foi retardada por mudanças do 1.8 que exigiram que muitas joias populares de terceiros fossem reescritas. Ruby 1.9 apresenta muitas mudanças significativas na série 1.8. Exemplos incluem:
- variáveis locais de bloco (variáveis que são locais para o bloco em que são declaradas)
- uma sintaxe lambda adicional :
f = ->(a,b) { puts a + b }
- uma sintaxe literal Hash adicional usando dois pontos para chaves de símbolo:
{symbol_key: "value"} == {:symbol_key => "value"}
- codificações de caracteres por string são suportadas
- nova API de soquete ( suporte IPv6 )
-
require_relative
segurança de importação
Ruby 2
O Ruby 2.0 foi projetado para ser totalmente compatível com as versões anteriores do Ruby 1.9.3. A partir do lançamento oficial 2.0.0 em 24 de fevereiro de 2013, havia apenas cinco incompatibilidades conhecidas (menores). Ruby 2.0 adicionou vários novos recursos, incluindo:
- argumentos de palavra-chave do método,
- um novo método,
Module#prepend
para estender uma classe, - um novo literal para criar uma série de símbolos,
- nova API para a avaliação preguiçosa de Enumerables, e
- uma nova convenção de uso de #to_h para converter objetos em Hashes.
A partir do 2.1.0, a política de versão do Ruby mudou para ser mais semelhante ao controle de versão semântico .
Ruby 2.2.0 inclui acelerações, correções de bugs e atualizações de biblioteca e remove algumas APIs obsoletas. Mais notavelmente, Ruby 2.2.0 introduz mudanças no manuseio de memória - um coletor de lixo incremental, suporte para coleta de lixo de símbolos e a opção de compilar diretamente no jemalloc. Ele também contém suporte experimental para usar vfork (2) com system () e spawn (), e suporte adicionado para a especificação Unicode 7.0. Desde a versão 2.2.1, o desempenho do Ruby MRI no PowerPC64 foi melhorado. Os recursos que se tornaram obsoletos ou removidos incluem callcc, a biblioteca DL, Digest :: HMAC, lib / rational.rb, lib / complex.rb, GServer, Logger :: Application, bem como várias funções C API.
Ruby 2.3.0 inclui muitas melhorias de desempenho, atualizações e correções de bugs, incluindo mudanças na chamada Proc #, uso de Socket e IO de palavras-chave de exceção, manipulação de nome de Thread #, conexões passivas padrão Net :: FTP e Rake sendo removido de stdlib. Outras mudanças notáveis em incluem:
- A capacidade de marcar todos os literais de string como congelados por padrão com um aumento consequentemente grande de desempenho nas operações de string.
- Comparação de hash para permitir a verificação direta de pares de chave / valor em vez de apenas chaves.
- Um novo operador de navegação segura
&.
que pode facilitar o manuseio de nada (por exemplo, em vez de , podemos usar ).if obj && obj.foo && obj.foo.bar
if obj&.foo&.bar
- A gem did_you_mean agora é empacotada por padrão e necessária na inicialização para sugerir automaticamente correspondências de nomes semelhantes em um NameError ou NoMethodError .
-
Hash # dig e Array # dig para extrair facilmente valores profundamente aninhados (por exemplo , dado , o valor Foo Baz agora pode ser recuperado por ).
profile = { social: { wikipedia: { name: 'Foo Baz' } } }
profile.dig(:social, :wikipedia, :name)
-
.grep_v(regexp)
que corresponderá a todos os exemplos negativos de uma determinada expressão regular, além de outros novos recursos.
Ruby 2.4.0 inclui melhorias de desempenho para tabela de hash, Array # max, Array # min e acesso a variáveis de instância. Outras mudanças notáveis incluem:
- Binding # irb: iniciar uma sessão REPL semelhante a binding.pry
- Unifique Fixnum e Bignum na classe Integer
- String suporta mapeamentos de caso Unicode, não apenas ASCII
- Um novo método, Regexp # match ?, que é uma versão booleana mais rápida de Regexp # match
- A detecção de deadlock de thread agora mostra threads com seu backtrace e dependência
Algumas mudanças notáveis no Ruby 2.5.0 incluem as instruções de resgate e garantia usam automaticamente um bloco do-end circundante (menos necessidade de blocos extras de início e fim ), encadeamento de método com yield_self , suporte para cobertura de ramificação e medição de cobertura de método e mais fácil Transformações de hash com Hash # slice e Hash # transform_keys Além disso, vêm muitas melhorias de desempenho, como passagem de bloco mais rápida (3 vezes mais rápida), Mutexes mais rápidos, modelos de ERB mais rápidos e melhorias em alguns métodos de concatenação.
Algumas mudanças notáveis no Ruby 2.6.0 incluem um compilador experimental just-in-time (JIT) e RubyVM :: AbstractSyntaxTree (experimental).
Algumas mudanças notáveis no Ruby 2.7.0 incluem correspondência de padrão (experimental), melhorias REPL, compactação GC e separação de argumentos posicionais e de palavras-chave.
Ruby 3
Ruby 3.0.0 foi lançado no dia de Natal em 2020. É conhecido como Ruby 3x3. Um de seus principais objetivos era mudar o interpretador para um Compilador Just-In-Time, para tornar os programas mais rápidos.
O Ruby 3.1 está planejado para ser lançado no dia de Natal de 2021.
Tabela de versões
Versão | Última versão pequenininha | Data de lançamento inicial | Fim da fase de suporte | Fim da fase de manutenção de segurança |
---|---|---|---|---|
1.0 | N / D | 25/12/1996 | N / D | N / D |
1.8 | 1.8.7-p375 | 04/08/2003 | 2012-06 | 01-07-2014 |
1,9 | 1.9.3-p551 | 25/12/2007 | 23/02/2014 | 23/02/2015 |
2.0 | 2.0.0-p648 | 24/02/2013 | 24/02/2015 | 24/02/2016 |
2,1 | 2.1.10 | 25/12/2013 | 30/03/2016 | 31-03-2017 |
2,2 | 2.2.10 | 25/12/2014 | 28-03-2017 | 31/03/2018 |
2,3 | 2.3.8 | 25/12/2015 | 20/06/2018 | 31/03/2019 |
2,4 | 2.4.10 | 25/12/2016 | 01/04/2019 | 01-04-2020 |
2,5 | 2.5.9 | 25/12/2017 | 2021-04-05 | 2021-04-05 |
2,6 | 2.6.8 | 25/12/2018 | 2021-04-05 | 2022-04-05 |
2,7 | 2.7.4 | 25/12/2019 | TBA | TBA |
3,0 | 3.0.2 | 2020-12-25 | TBA | TBA |
3,1 | 3.1.0 | 2021-12-25 | TBA | TBA |
Lenda:
Versão antiga
Versão mais antiga, ainda mantida
Última versão
Lançamento futuro
|
Semântica e filosofia
Matsumoto disse que Ruby foi projetado para produtividade e diversão do programador, seguindo os princípios de um bom design de interface de usuário . Em uma Google Tech Talk em 2008, Matsumoto afirmou ainda: "Espero ver Ruby ajudar todos os programadores do mundo a serem produtivos, a desfrutar da programação e a serem felizes. Esse é o objetivo principal da linguagem Ruby." Ele enfatiza que o projeto de sistemas precisa enfatizar as necessidades humanas, em vez de computacionais:
Freqüentemente, as pessoas, especialmente os engenheiros de computação, se concentram nas máquinas. Eles pensam: "Ao fazer isso, a máquina funcionará mais rápido. Ao fazer isso, a máquina funcionará com mais eficácia. Ao fazer isso, a máquina fará algo, algo, alguma coisa." Eles estão se concentrando nas máquinas. Mas, na verdade, precisamos nos concentrar nos humanos, em como os humanos se preocupam em fazer a programação ou operar a aplicação das máquinas. Nós somos os mestres. Eles são os escravos.
Matsumoto disse que seu objetivo principal de design era fazer uma linguagem que ele próprio gostasse de usar, minimizando o trabalho do programador e possíveis confusões. Ele disse que não aplicou o princípio do mínimo espanto (POLA) ao design do Ruby; em uma discussão de maio de 2005 no newsgroup comp.lang.ruby, Matsumoto tentou distanciar Ruby do POLA, explicando que, como qualquer escolha de design será surpreendente para alguém, ele usa um padrão pessoal para avaliar a surpresa. Se esse padrão pessoal permanecer consistente, haveria poucas surpresas para aqueles que estão familiarizados com o padrão.
Matsumoto definiu desta forma em uma entrevista:
Todo mundo tem uma formação individual. Alguém pode vir do Python, alguém pode vir do Perl e pode ser surpreendido por diferentes aspectos da linguagem. Então, eles vêm até mim e dizem: 'Fiquei surpreso com essa característica da linguagem, então Ruby viola o princípio da menor surpresa.' Esperar. Esperar. O princípio da menor surpresa não é apenas para você. O princípio da menor surpresa significa princípio do menor a minha surpresa. E isso significa o princípio da menor surpresa depois de aprender Ruby muito bem. Por exemplo, eu era um programador C ++ antes de começar a projetar Ruby. Eu programei em C ++ exclusivamente por dois ou três anos. E depois de dois anos de programação C ++, ainda me surpreende.
Ruby é orientado a objetos : todo valor é um objeto, incluindo classes e instâncias de tipos que muitas outras linguagens designam como primitivos (como inteiros , booleanos e " nulos "). As variáveis sempre contêm referências a objetos. Cada função é um método e os métodos são sempre chamados em um objeto. Os métodos definidos no escopo de nível superior tornam-se métodos da classe Object. Como essa classe é ancestral de todas as outras classes, esses métodos podem ser chamados em qualquer objeto. Eles também são visíveis em todos os escopos, servindo efetivamente como procedimentos "globais". Ruby suporta herança com envio dinâmico , mixins e métodos singleton (pertencentes a, e definidos para, uma única instância ao invés de serem definidos na classe). Embora Ruby não suporte herança múltipla , as classes podem importar módulos como mixins.
Ruby foi descrito como uma linguagem de programação multiparadigma : permite a programação procedural (definir funções / variáveis fora das classes torna-as parte da raiz, 'self' Object), com orientação a objetos (tudo é um objeto) ou programação funcional (é tem funções anônimas , encerramentos e continuações ; todas as instruções têm valores e as funções retornam a última avaliação). Possui suporte para introspecção , reflexão e metaprogramação , bem como suporte para threads baseadas em intérpretes . Ruby apresenta tipagem dinâmica e suporta polimorfismo paramétrico .
De acordo com o FAQ do Ruby, a sintaxe é semelhante ao Perl e a semântica é semelhante ao Smalltalk , mas é muito diferente do Python .
Recursos
- Totalmente orientado a objetos com herança , mixins e metaclasses
- Digitação dinâmica e digitação de pato
- Tudo é uma expressão (até mesmo declarações ) e tudo é executado imperativamente (até mesmo declarações )
- Sintaxe sucinta e flexível que minimiza o ruído sintático e serve como base para linguagens de domínio específico
- Reflexão dinâmica e alteração de objetos para facilitar a metaprogramação
- Fechamentos lexicais , iteradores e geradores , com uma sintaxe de bloco
- Notação literal para matrizes , hashes , expressões regulares e símbolos
- Incorporando código em strings ( interpolação )
- Argumentos padrão
- Quatro níveis de escopo variável ( global , classe , instância e local ) denotados por sigilos ou a falta deles
- Coleta de lixo
- Continuações de primeira classe
- Regras estritas de coerção booleana (tudo é verdadeiro, exceto
false
enil
) - Manipulação de exceção
- Sobrecarga do operador
- Suporte integrado para números racionais , números complexos e aritmética de precisão arbitrária
- Comportamento de despacho personalizado (por meio de
method_missing
econst_missing
) - Fios nativos e fibras cooperativas (fibras são uma característica 1.9 / YARV )
- Suporte para Unicode e várias codificações de caracteres .
- API de plug-in nativo em C
- Ruby Shell interativo (um REPL )
- Gerenciamento centralizado de pacotes por meio de RubyGems
- Implementado em todas as plataformas principais
- Grande biblioteca padrão, incluindo módulos para YAML , JSON , XML , CGI , OpenSSL , HTTP , FTP , RSS , curses , zlib e Tk
- Compilação just-in-time
- O rubi Shell interativo ,
irb
, um de linha de comando interativa intérprete que pode ser usado para código de teste rápido
Sintaxe
A sintaxe do Ruby é amplamente semelhante à do Perl e do Python . As definições de classe e método são sinalizadas por palavras-chave, enquanto os blocos de código podem ser definidos por palavras-chave ou chaves. Em contraste com o Perl, as variáveis não são obrigatoriamente prefixadas com um sigilo . Quando usado, o sigilo muda a semântica do escopo da variável. Para fins práticos, não há distinção entre expressões e declarações . As quebras de linha são significativas e consideradas como o final de uma instrução; um ponto-e-vírgula pode ser usado de forma equivalente. Ao contrário do Python, o recuo não é significativo.
Uma das diferenças de Python e Perl é que Ruby mantém todas as suas variáveis de instância completamente privadas para a classe e só expõe-los através de métodos de acesso ( attr_writer
, attr_reader
, etc.). Ao contrário dos métodos "getter" e "setter" de outras linguagens como C ++ ou Java , os métodos de acesso em Ruby podem ser criados com uma única linha de código por meio de metaprogramação ; no entanto, os métodos de acesso também podem ser criados na forma tradicional de C ++ e Java. Como invocação destes métodos não requer o uso de parênteses, é trivial para mudar uma variável de instância em uma função cheia, sem modificar uma única linha de código de chamada ou ter que fazer qualquer refatoração alcançar funcionalidade semelhante para C # e VB.NET propriedade membros.
Os descritores de propriedade do Python são semelhantes, mas apresentam uma compensação no processo de desenvolvimento. Se alguém começa em Python usando uma variável de instância exposta publicamente e, posteriormente, altera a implementação para usar uma variável de instância privada exposta por meio de um descritor de propriedade, o código interno da classe pode precisar ser ajustado para usar a variável privada em vez da propriedade pública . O design de Ruby força todas as variáveis de instância a serem privadas, mas também fornece uma maneira simples de declarar set
e get
métodos. Isso está de acordo com a ideia de que em Ruby, nunca se acessa diretamente os membros internos de uma classe de fora da classe; em vez disso, passa-se uma mensagem para a classe e recebe uma resposta.
Implementações
Intérprete de Ruby de Matz
O intérprete Ruby original é freqüentemente referido como o intérprete Ruby de Matz ou MRI. Esta implementação é escrita em C e usa sua própria máquina virtual específica para Ruby .
A implementação padronizada e aposentada do Ruby 1.8 foi escrita em C , como uma linguagem interpretada de passagem única .
Começando com Ruby 1.9 e continuando com Ruby 2.xe acima, o interpretador Ruby oficial foi YARV ("Yet Another Ruby VM"), e esta implementação substituiu a máquina virtual mais lenta usada em versões anteriores de MRI.
Implementações alternativas
Em 2018, havia uma série de implementações alternativas de Ruby, incluindo JRuby , Rubinius e mruby . Cada um tem uma abordagem diferente, com JRuby e Rubinius fornecendo compilação just-in-time e mruby também fornecendo compilação antecipada .
Ruby tem três principais implementações alternativas:
- JRuby , uma implementação combinada de Java e Ruby que é executada na máquina virtual Java . JRuby atualmente tem como alvo o Ruby 2.5.
- TruffleRuby , uma implementação Java usando a estrutura de implementação da linguagem Truffle com GraalVM
- Rubinius , uma máquina virtual de bytecode C ++ que usa LLVM para compilar o código de máquina em tempo de execução. O compilador de bytecode e a maioria das classes principais são escritos em Ruby puro. O Rubinius atualmente tem como alvo o Ruby 2.3.1.
Outras implementações Ruby incluem:
- MagLev , um Smalltalk aplicação que roda em GemTalk Sistemas ' GemStone / S VM
- mruby , uma implementação projetada para ser embutida no código C, em uma linha semelhante a Lua . Atualmente está sendo desenvolvido por Yukihiro Matsumoto e outros
- RGSS , ou Ruby Game Scripting System, uma implementação proprietária usada pela série RPG Maker de software para design de jogo e modificação do motor RPG Maker
- julializer , um transpiler (parcial) de Ruby para Julia . Ele pode ser usado para um grande aumento de velocidade, por exemplo, em implementações Ruby ou JRuby (pode ser útil apenas para código numérico).
- Topaz , uma implementação Ruby escrita em Python
- Opal , um interpretador baseado na web que compila Ruby para JavaScript
Outras implementações de Ruby agora extintas foram:
- MacRuby , uma implementação do Mac OS X no tempo de execução Objective-C . Sua contraparte iOS é chamada RubyMotion
- IronRuby uma implementação no .NET Framework
- Cardinal, uma implementação para a máquina virtual Parrot
- Ruby Enterprise Edition , muitas vezes abreviado para ree , uma implementação otimizada para lidar com projetos Ruby on Rails em grande escala
- HotRuby , uma implementação JavaScript e ActionScript da linguagem de programação Ruby
A maturidade das implementações Ruby tende a ser medida por sua capacidade de executar o framework Ruby on Rails (Rails), porque é complexo de implementar e usa muitos recursos específicos do Ruby. O ponto em que uma determinada implementação atinge esse objetivo é chamado de "singularidade do Rails". A implementação de referência, JRuby e Rubinius são todos capazes de executar Rails sem modificações em um ambiente de produção.
Suporte de plataforma
Matsumoto desenvolveu originalmente o Ruby no Sony NEWS-OS 3.x baseado no 4.3BSD , mas depois migrou seu trabalho para o SunOS 4.x, e finalmente para o Linux .
Em 1999, Ruby era conhecido por trabalhar em muitos sistemas operacionais diferentes , incluindo NEWS-OS, SunOS, AIX , SVR4 , Solaris , NEC UP-UX , NeXTSTEP , BSD, Linux, Mac OS , DOS , Windows e BeOS .
Versões e implementações modernas de Ruby estão disponíveis em muitos sistemas operacionais, como Linux, BSD, Solaris, AIX, macOS , Windows, Windows Phone , Windows CE , Symbian OS , BeOS, OpenVMS e IBM i .
A linguagem de programação Ruby é compatível com várias plataformas de hospedagem em nuvem, como Jelastic , Heroku , Google Cloud Platform e outras.
Repositórios e bibliotecas
RubyGems é o gerenciador de pacotes do Ruby. Um pacote Ruby é chamado de "gem" e pode ser instalado através da linha de comando. A maioria das gemas são bibliotecas, embora existam algumas que são aplicativos, como IDEs . Existem mais de 10.000 joias de Ruby hospedadas em RubyGems.org .
Muitas bibliotecas Ruby novas e existentes são hospedadas no GitHub , um serviço que oferece hospedagem de repositório de controle de versão para Git .
O Ruby Application Archive, que hospedava aplicativos, documentação e bibliotecas para programação Ruby, foi mantido até 2013, quando sua função foi transferida para RubyGems.
Veja também
- Comparação de linguagens de programação
- Projeto Metasploit
- Guia do porquê (comovente) para Ruby
- XRuby
- Crystal (linguagem de programação)
Referências
Leitura adicional
- Black, David; Leo, Joseph (15 de março de 2019), The Well-Grounded Rubyist (Terceira ed.), Manning Publications , p. 584, ISBN 978-1617295218
- Metz, Sandi (22 de agosto de 2018), Practical Object-Oriented Design: An Agile Primer Using Ruby (Segunda ed.), Addison-Wesley Professional , p. 288, ISBN 978-0-13-445647-8
- Cooper, Peter (12 de julho de 2016), Beginning Ruby: From Novice to Professional (Terceira ed.), Apress , p. 492, ISBN 978-1484212790
- Carlson, Lucas; Richardson, Leonard (3 de abril de 2015), Ruby Cookbook: Recipes for Object-Oriented Scripting (Segunda ed.), O'Reilly Media , p. 963, ISBN 978-1449373719
- Fulton, Hal; Arko, André (2 de março de 2015), The Ruby Way: Solutions and Techniques in Ruby Programming (Terceira ed.), Addison-Wesley Professional , p. 816, ISBN 978-0-321-71463-3
- Thomas, Dave; Fowler, Chad; Hunt, Andy (7 de julho de 2013), Programming Ruby 1.9 & 2.0: The Pragmatic Programmers 'Guide (Quarta ed.), Pragmatic Bookshelf , p. 888, ISBN 978-1937785499
- McAnally, Jeremy; Arkin, Assaf (28 de março de 2009), Ruby in Practice (primeira edição), Manning Publications , p. 360, ISBN 978-1933988474
- Flanagan, David; Matsumoto, Yukihiro (25 de janeiro de 2008), The Ruby Programming Language (primeira edição), O'Reilly Media , p. 446 , ISBN 978-0-596-51617-8
- Baird, Kevin (8 de junho de 2007), Ruby por Exemplo: Conceitos e Código (Primeira edição), No Starch Press , p. 326, ISBN 978-1593271480
- Fitzgerald, Michael (14 de maio de 2007), Learning Ruby (primeira edição), O'Reilly Media , p. 255 , ISBN 978-0-596-52986-4