mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-11-29 22:12:07 +03:00
145 lines
6.7 KiB
Markdown
145 lines
6.7 KiB
Markdown
|
---
|
||
|
category: tool
|
||
|
tool: ruby ecosystem
|
||
|
contributors:
|
||
|
- ["Jon Smock", "http://github.com/jonsmock"]
|
||
|
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
|
||
|
translators:
|
||
|
- ["Cristian Achille", "http://github.com/blackdev1l/"]
|
||
|
---
|
||
|
|
||
|
Generalmente chi usa ruby ha l'esigenza di avere differenti versioni di Ruby
|
||
|
installate, gestire le proprie gemme, e le loro dipendenze.
|
||
|
|
||
|
## Manager Ruby
|
||
|
|
||
|
Alcune piattaforme hanno Ruby pre-installato o disponibile come pacchetto.
|
||
|
Molti sviluppatori Ruby non usano questi pacchetti, o se lo fanno, li usano solo
|
||
|
per installare dei manager Ruby, i quali permettono di installare e gestire più
|
||
|
versioni di Ruby in base al progetto su cui si lavora.
|
||
|
|
||
|
Di seguito i più famosi manager Ruby:
|
||
|
|
||
|
* [RVM](https://rvm.io/) - Installa e permette di utilizzare diverse versioni di
|
||
|
Ruby. RVM Ha anche il concetto di gemsets i quali isolano completamente l'ambiente di sviluppo del progetto.
|
||
|
* [ruby-build](https://github.com/sstephenson/ruby-build) - Installa solamente
|
||
|
multiple versioni di ruby. Usa questo se vuoi maggior controllo sull'installazione di Ruby.
|
||
|
* [rbenv](https://github.com/sstephenson/rbenv) -
|
||
|
Permette solo la scelta di quale versione Ruby utilizzare. Usato insieme a ruby-build.
|
||
|
Utilizza questo per un maggior controllo su quale versione di Ruby utilizzare.
|
||
|
* [chruby](https://github.com/postmodern/chruby) -
|
||
|
Permette solo la scelta di quale Ruby utilizzare, simile a rbenv.
|
||
|
|
||
|
## Ruby Versions
|
||
|
|
||
|
Ruby fù creato da Yukihiro "Matz" Matsumoto, il [BDFL](https://en.wikipedia.org/wiki/Benevolent_Dictator_for_Life),
|
||
|
(acronimo inglese che sta per "Benevolo dittatore a vita") , seppur
|
||
|
ultimamente non è più del tutto vera; l'implementazione di Ruby
|
||
|
è detta MRI (Matz' Reference Implementation), e dunque quando si legge di una
|
||
|
versione Ruby, essa si riferisce sempre al rilascio di una MRI
|
||
|
|
||
|
Le tre maggiori versioni di Ruby in uso sono:
|
||
|
|
||
|
* 2.0.0 - Rilasciata nel febbraio 2013. La maggior parte delle librerie e
|
||
|
framework supportano la 2.0.0
|
||
|
* 1.9.3 - Rilasciata nel ottobre 2011. QUesta è la versione che molti
|
||
|
svluppatori usano, il supporto è
|
||
|
[concluso](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
|
||
|
* 1.8.7 - Il supporto per Ruby 1.8.7 è
|
||
|
[concluso](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
|
||
|
|
||
|
I cambiamenti tra la 1.8.7 a la 1.9.x sono maggiori di quelli tra la 1.9.3 a la
|
||
|
2.0.0. Per esempio, nella 1.9 vengono introdotti gli encodings e la bytecode VM.
|
||
|
Esistono ancora dei progetti basati sulla 1.8.7, ma stanno diventando una
|
||
|
minoranza, man mano che la community si sta trasferendo alle versioni 1.92 e
|
||
|
1.9.3
|
||
|
|
||
|
## Ruby Implementations
|
||
|
|
||
|
L'ecosistema Ruby gode di molte implementazioni differenti di Ruby, ognuna con
|
||
|
particolari punti di forza, da chiarire che ogni implementazione è scritta con
|
||
|
un linguaggio diverso, ma esse *sono tutte Ruby*. Ogni implementazione ha
|
||
|
feature extra ma tutte esse possono eseguire file ruby. Per esempio, JRuby è
|
||
|
scritto in Java, ma non devi conoscere java per usarlo.
|
||
|
|
||
|
Implementazioni mature e compatibili:
|
||
|
|
||
|
* [MRI](https://github.com/ruby/ruby) - Scritto in C, Questa è l'implementazione
|
||
|
standard di Ruby, per definizione è 100% compatibile (con se stessa). Tutte le
|
||
|
altre implemetazioni mantengono la compatibilità con MRI
|
||
|
(vedere [RubySpec](#rubyspec) sotto).
|
||
|
* [JRuby](http://jruby.org/) - Scritto in Java e Ruby, Questa implementazione è
|
||
|
molto veloce e robusta, la forza di JRuby consiste nell'interoperabilità
|
||
|
tra JVM/Java, permettendo l'utilizzo di struemnti Java già esistenti, progetti
|
||
|
e linguaggi
|
||
|
* [Rubinius](http://rubini.us/) - Scritto principalmente in Ruby con un
|
||
|
c++ bytecode VM, molto matura e veloce, permette alcune feature riguardo VM.
|
||
|
|
||
|
Mediamente mature e compatibili:
|
||
|
|
||
|
* [Maglev](http://maglev.github.io/) - Sviluppata sui Gemstone, è una Smalltalk
|
||
|
VM, Smalltalk è degli strumenti molto utili, e questo progetto cerca di portare
|
||
|
questi strumenti nello sviluppo Ruby.
|
||
|
* [RubyMotion](http://www.rubymotion.com/) - Porta ruby nello sviluppo iOS.
|
||
|
|
||
|
Poco mature e compatibili:
|
||
|
|
||
|
* [Topaz](http://topazruby.com/) - Scritto in RPython (usando PyPy come
|
||
|
toolchain) Topaz è un progetto ancora giovane e non compatibile, ha le
|
||
|
possibilità di diventare una implementazione Ruby molto performante
|
||
|
* [IronRuby](http://ironruby.net/) - Scritto in C# e prendendo di mira la
|
||
|
piattaforma .NET, lo sviluppo sembra fermo da quando Microsoft ha rimosso il
|
||
|
suo supporto.
|
||
|
|
||
|
Le implementazioni Ruby possono avere una propria versione, ma hanno sempre come
|
||
|
target una specifica versione di MRI. Molte implementazioni hanno l'abilità di
|
||
|
selezionare una versione specifica di MRI.
|
||
|
|
||
|
##RubySpec
|
||
|
|
||
|
La maggior parte delle implementazioni Ruby dipendono pesantemente su
|
||
|
[RubySpec](http://rubyspec.org/). Ruby non ha una specifica ufficiale, quindi la
|
||
|
community ha scritto una specifica eseguibile in Ruby per testare la compatibilità
|
||
|
con MRI.
|
||
|
|
||
|
## RubyGems
|
||
|
|
||
|
[RubyGems](http://rubygems.org/) è un package manager gestito dalla communtiy
|
||
|
per Ruby. Rubygems viene installato con Ruby, quindi non c'è bisogno di
|
||
|
scaricarlo separatamente.
|
||
|
|
||
|
I pacchetti Ruby sono chiamate "gemme", e possono essere hostate dalla community
|
||
|
su RubyGems.org . Ogni gemma contiene il codice sorgente e del metadata, tra cui
|
||
|
la versione, le dipendenze, autor* e licenz*.
|
||
|
|
||
|
## Bundler
|
||
|
|
||
|
[Bundler](http://bundler.io/) è un risolvitore di dipendenze, Esso usa il Gemfile
|
||
|
di un progetto per cercare le dipendenze, dopo di che ottiene le dipendenze delle
|
||
|
dipendenze ricorsivamente, Questo procedimento viene eseguito finchè tutte le
|
||
|
dipendenze sono state risolte e scaricate, o si fermerà se un conflitto verrà
|
||
|
trovato.
|
||
|
|
||
|
Bundler genererà un error se troverà dipendenze in conflitto, Per esempio,
|
||
|
se la gemma A richiede la versione 3 o maggiore della gemma Z, ma la gemma B
|
||
|
richiede la versione 2, Bundler ti notificherà del conflitto. Questo diventa
|
||
|
di aiuto nel momento in cui si hanno molte gemme nel progetto, il che porta a
|
||
|
un grande grafo di dipendenza da risolvere.
|
||
|
|
||
|
# Testing
|
||
|
|
||
|
Il testing è un pezzo fondamentale della cultura Ruby, Ruby viene installato con
|
||
|
il proprio testing framework chiamato minitest (O TestUnit per ruby 1.8.x).
|
||
|
Esistono molte librerie con obiettivi differenti
|
||
|
|
||
|
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Testing frameowrk rilasciato insieme a Ruby 1.8.x
|
||
|
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Testing frameowrk rilasciato insieme a Ruby 1.9/2.0
|
||
|
* [RSpec](http://rspec.info/) - Un testing framework che si concentra nella chiarezza
|
||
|
* [Cucumber](http://cukes.info/) - Un BDD testing framework che estrapola testo formattato in Gherkin
|
||
|
|
||
|
## Sii cordiale
|
||
|
|
||
|
La community Ruby è orgogliosa di essere una communtiy aperta, accogliente e
|
||
|
variegata. Matz stesso è estremamente amichevole, e la generosità degli sviluppatori
|
||
|
Ruby è fantastica.
|