learnxinyminutes-docs/fr/ruby-ecosystem.md

153 lines
7.5 KiB
Markdown
Raw Normal View History

---
contributors:
- ["Jon Smock", "http://github.com/jonsmock"]
- ["Rafal Chmiel", "http://github.com/rafalchmiel"]
translators:
- ["Xuan-thi Nguyen", "http://github.com/mellenguyen"]
- ["Sylvain Abélard", "http://github.com/abelards"]
---
Les gens utilisant Ruby adoptent généralement un gestionnaire pour installer
différentes versions de Ruby, gérer leurs paquets (ou gems), et gérer les
dépendances des gems.
## Ruby Managers
Quelques plateformes possèdent Ruby pré-installé ou disponible en tant que
paquet. La plupart des rubyistes ne les utilisent pas, ou si c'est le cas, ne
les utilisent que pour faire démarrer un autre installateur ou implémentation de
Ruby. Les rubyistes tendent plutôt à installer un gestionnaire en Ruby pour installer
et changer entre les différentes et nombreuses versions de Ruby et les
environnements de leurs projets Ruby.
Les gestionnaires d'environnement Ruby les plus populaires sont :
* [RVM](https://rvm.io/) - Installe et navigue entre les rubies. RVM possède
églement le concept des gemsets pour isoler les environnements de projets
complètement.
* [ruby-build](https://github.com/sstephenson/ruby-build) - Installe seulement
les rubies. Utilisez-le pour un contrôle plus fin des installations des
rubies.
* [rbenv](https://github.com/sstephenson/rbenv) - Navigue seulement entre les
rubies. Utilisé avec ruby-build. Utilisez-le pour un contrôle plus fin des
chargements des rubies.
* [chruby](https://github.com/postmodern/chruby) - Navigue seulement entre les
rubies. Similaire à rbenv. Neutre sur comment les rubies sont installés.
## Versions de Ruby
Ruby a été créé par Yukihiro "Matz" Matsumoto, qui reste quelque peu un
[BDFL](https://fr.wikipedia.org/wiki/Benevolent_Dictator_for_Life), bien que
cela soit récemment en changement. Jusqu'à la standardisation du langage en
2011, l'implémentation de référence de Ruby était appelé MRI (Matz' Reference
Implementation).
Les trois versions majeures de Ruby actuellement utilisées sont :
* 2.0.0 - Sortie en février 2013. La plupart des bibliothèques et frameworks
gèrent la versions 2.0.0.
* 1.9.3 - Sortie en octobre 2011. Il s'agit de la version que la majorité des
rubyists utilisent actuellement. [Fin de vie](https://www.ruby-lang.org/en/news/2015/02/23/support-for-ruby-1-9-3-has-ended/)
* 1.8.7 - Sortie en juin 2006. [Fin de vie](http://www.ruby-lang.org/en/news/2013/06/30/we-retire-1-8-7/).
Les changements entre 1.8.7 et 1.9.x sont bien plus grands qu'entre 1.9.3
et 2.0.0. Par exemple, les versions 1.9 ont introduit le support des
encodages et d'une VM bytecode ([YARV](https://fr.wikipedia.org/wiki/YARV)).
Il y a toujours des projets sur 1.8.7, mais ils deviennent minoritaires, étant
donné que la majorité de la communauté a migré vers au moins 1.9.2 ou 1.9.3.
## Implémentations Ruby
L'écosystème Ruby comprend de nombreuses implémentations de Ruby, chacune avec
des points forts uniques et différents degrés de compatibilité. Les différentes
implémentations sont écrites dans différents languages.
Chaque implémentation a des "hooks" et des fonctionnalités spécifiques, elles
exécutent cependant très bien des fichiers Ruby classiques.
Par exemple, JRuby est écrit en Java, mais vous n'avez pas besoin de connaître
le Java pour l'utiliser.
Très mature/compatible:
* [MRI](https://github.com/ruby/ruby) - Ecrite en C, c'est l'implémentation de
référence de Ruby. Elle est par définition 100% compatible (avec elle-même).
Tous les autres rubies maintiennent la compatibilité avec MRI
2024-08-14 06:11:59 +00:00
(voir [Ruby Spec](#ruby-spec) à la suite).
* [JRuby](http://jruby.org/) - Écrite en Java et Ruby, cette robuste
implémentation est assez rapide.
La force de JRuby réside surtout sur l'interopérabilité JVM/Java, faisant
levier sur des outils JVM, des projets et des langages existants.
* [Rubinius](http://rubini.us/) - Ecrite principalement en Ruby avec une VM
bytecode en C++. Egalement mature et rapide. Etant donné qu'elle est
implémentée en Ruby, elle couvre beaucoup de fonctionnalités de la
VM dans Ruby.
Mpyennement mature/compatible:
* [Maglev](http://maglev.github.io/) - Basée sur Gemstone, une VM Smalltalk.
Smalltalk possède quelques outils impressionnants, et ce projet tente
de les apporter dans le développement Ruby.
* [RubyMotion](http://www.rubymotion.com/) - Ruby pour développement iOS et Android.
2024-12-04 00:04:55 +00:00
* [Opal](http://opalrb.org/) - Compile le Ruby en JavaScript
Les implémentations de Ruby peuvent avoir leurs propres numéros de versions,
mais elles ciblent toujours une versions spéficique de MRI pour la
compatibilité.
Beaucoup d'implémentations ont la capacité d'entrer dans différents modes
(par exemple, la version 1.8 ou 1.9) afin de spécifier quelle version de MRI
cibler.
Une liste non exhaustive d'implémentations peut être trouvée [ici (EN)](https://github.com/cogitator/ruby-implementations/wiki/List-of-Ruby-implementations).
2024-08-14 06:11:59 +00:00
## Ruby Spec
2024-08-14 06:11:59 +00:00
La plupart des implémentations Ruby s'appuient fortement sur [Ruby Spec](https://github.com/ruby/spec).
Ruby n'a pas de spécification officielle, c'est pourquoi la commaunité a écrit
des spécifications exécutables en Ruby pour tester la compatibilité de leur
implémentation avec MRI.
## RubyGems
[RubyGems](http://rubygems.org/) est un gestionnaire de paquets communautaire
pour Ruby.
RubyGems est livré avec Ruby, il n'y a donc pas besoin de le télécharger
séparément.
Les paquets Ruby sont appelés des "gems", et peuvent être hébergés par la
communauté à RubyGems.org. Chaque gem contient son code source et quelques
métadatas, includant des choses comme la version, les dépendances,
l(es) auteur(s) et la/les licence(s).
## Bundler
[Bundler](http://bundler.io/) est un outil de résolution de dépendances des gems. Il
utilise le Gemfile d'un projet pour en trouver les dépendances, et récupère
ensuite les dépendances de ces dépendances récursivement. Il déroule cet
algorithme jusqu'à ce que toutes les dépendances soient résolues et
téléchargées, ou s'arrête si un conflit est trouvé.
Bundler lèvera une erreur s'il trouve des conflits de dépendances. Par exemple,
si la gem A recquiert la version 3 ou plus de gem Z, mais que gem B recquiert
seulement la version 2 de la même gem Z, Bundler vous notifiera ce conflit. Cela devient
extrêmement utile, étant donné que beaucoup de gems font référence à d'autres
gems (qui se réfèrent à d'autres gems et ainsi de suite), ce qui peut former un large graphe de
dépendance à résoudre.
# Les tests
Tester fait partie intégrante de la culture Ruby. Ruby fournit son propre
framework de tests unitaires appelé minitest (ou TestUnit pour Ruby
version 1.8.x). Il existe beaucoup de librairies de tests avec des buts
différents.
* [TestUnit](http://ruby-doc.org/stdlib-1.8.7/libdoc/test/unit/rdoc/Test/Unit.html) - Framework de tests intégré de Ruby version 1.8 style "Unit"
* [minitest](http://ruby-doc.org/stdlib-2.0.0/libdoc/minitest/rdoc/MiniTest.html) - Framework de tests intégré de Ruby version 1.9/2.0
* [RSpec](http://rspec.info/) - Un framework de tests qui se focalise sur l'expressivité
* [Cucumber](http://cukes.info/) - Un framework de tests BDD ([behaviour-driven development](https://fr.wikipedia.org/wiki/Behavior_driven_development)) qui parse les tests formatés de Gherkin.
## Soyez gentil
La communauté Ruby est fière d'être une communauté ouverte, riche et
accueillante. Matz lui-même est extrêmement sociable, et la générosité des
rubyistes est généralement remarquable.